From 27df1079c1d230fab29f565f5209f2a02e0def8a Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 20 七月 2026 16:56:51 +0800
Subject: [PATCH] 省立同德的功能

---
 smartor/src/main/java/com/smartor/mapper/MedicationItemMapper.java                             |   63 
 smartor/src/main/java/com/smartor/mapper/ServiceAppointRecordMapper.java                       |   63 
 smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java     |  194 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java               |   85 +
 smartor/src/main/java/com/smartor/domain/MedicationDoseInfo.java                               |   59 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java |    4 
 smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java                                    |    4 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java                                |    8 
 smartor/src/main/resources/mapper/smartor/MedicationItemMapper.xml                             |  434 +++++
 smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml                               |   19 
 smartor/src/main/java/com/smartor/mapper/MedicationDoseInfoMapper.java                         |   63 
 smartor/src/main/java/com/smartor/service/IServiceOutPathService.java                          |   24 
 smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java                     |   37 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java            |   21 
 smartor/src/main/resources/mapper/smartor/ServiceAppointRecordMapper.xml                       |  803 +++++++++++
 smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java                            |    8 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java                   |   36 
 smartor/src/main/java/com/smartor/service/IServiceAppointRecordService.java                    |   61 
 ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml                             |    2 
 smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java              |  178 ++
 smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java                  |   48 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java                          |    6 
 smartor/src/main/java/com/smartor/service/IXHGatherPatArchiveService.java                      |    9 
 ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java                         |   70 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java       |   11 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceAppointRecordController.java |  103 +
 smartor/src/main/java/com/smartor/domain/ServiceAppointRecord.java                             |  453 ++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationItemController.java       |  103 +
 smartor/src/main/java/com/smartor/service/IMedicationItemService.java                          |   61 
 smartor/src/main/java/com/smartor/service/IMedicationDoseInfoService.java                      |   61 
 smartor/src/main/java/com/smartor/domain/MedicationItem.java                                   |  168 ++
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java                  |   23 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java          |    7 
 smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java                             |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationDoseInfoController.java   |  110 +
 smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java             |   11 
 smartor/src/main/resources/mapper/smartor/MedicationDoseInfoMapper.xml                         |  172 ++
 smartor/src/main/java/com/smartor/domain/ServiceOutPath.java                                   |   16 
 smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml                             |   63 
 smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml                                |   42 
 smartor/src/main/java/com/smartor/service/impl/MedicationDoseInfoServiceImpl.java              |   96 +
 smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java                          |    3 
 smartor/src/main/java/com/smartor/service/impl/ServiceAppointRecordServiceImpl.java            |   96 +
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml                             |   27 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                                   |  294 ++-
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java       |   26 
 smartor/src/main/java/com/smartor/domain/PatMedInhosp.java                                     |   11 
 smartor/src/main/java/com/smartor/service/impl/MedicationItemServiceImpl.java                  |   96 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/sms/smsUtils.java                            |    8 
 49 files changed, 4,091 insertions(+), 273 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
index 79eb2fd..b9a4adb 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -42,6 +42,7 @@
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
+import java.net.URLEncoder;
 import java.security.MessageDigest;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -110,6 +111,9 @@
 
     @Value("${xhsmsPwd}")
     private String xhsmsPwd;
+    // 铏氭嫙鎺ュ叆鐮�
+    @Value("${xhsmsjrm}")
+    private String xhsmsjrm;
 
     @Value("${server.port}")
     private String port;
@@ -306,21 +310,26 @@
                         serviceOutPath.setParam6(subId);
                         serviceOutPath.setCreateTime(new Date());
                         serviceOutPath.setOrgid(serviceSubtask.getOrgid());
+                        serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+                        serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
+                        serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+                        serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
                         iServiceOutPathService.insertServiceOutPath(serviceOutPath);
 //                                sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "&param2=" + patid + "&param5=false");
                         //杞垚16杩涘埗
                         String format = String.format("%03X", serviceOutPath.getId());
                         serviceOutPath.setRadix(format);
                         serviceOutPath.setUpdateTime(new Date());
+                        serviceOutPath.setUrl(ip + ":" + req_path + "/sf?p=" + format);
                         iServiceOutPathService.updateServiceOutPath(serviceOutPath);
                         sendMagParam.setPhone(serviceSubtask.getPhone());
                         sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
                         SysConfig sysConfig = new SysConfig();
                         if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("6")) {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("zymyd.sms.template");
-                        }else if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("14")) {
+                        } else if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("14")) {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("mzmyd.sms.template");
-                        }else {
+                        } else {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("wj.sms.template");
                         }
                         if (!Objects.isNull(sysConfig)) {
@@ -339,10 +348,15 @@
                         serviceOutPath.setParam3(ivrTask1.getTaskName());
                         serviceOutPath.setCreateTime(new Date());
                         serviceOutPath.setOrgid(serviceSubtask.getOrgid());
+                        serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+                        serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
+                        serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+                        serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
                         iServiceOutPathService.insertServiceOutPath(serviceOutPath);
                         String format = String.format("%03X", serviceOutPath.getId());
                         serviceOutPath.setRadix(format);
                         serviceOutPath.setUpdateTime(new Date());
+                        serviceOutPath.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format);
                         iServiceOutPathService.updateServiceOutPath(serviceOutPath);
 //                                sendMagParam.setUrl(ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false");
                         sendMagParam.setPhone(serviceSubtask.getPhone());
@@ -355,9 +369,9 @@
                         SysConfig sysConfig = new SysConfig();
                         if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("6")) {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("zymyd.sms.template");
-                        }else if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("14")) {
+                        } else if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("14")) {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("mzmyd.sms.template");
-                        }else {
+                        } else {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("wj.sms.template");
                         }
                         if (!Objects.isNull(sysConfig)) {
@@ -374,6 +388,10 @@
                         serviceOutPath.setParam3(ivrTask1.getTaskName());
                         serviceOutPath.setCreateTime(new Date());
                         serviceOutPath.setOrgid(serviceSubtask.getOrgid());
+                        serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+                        serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
+                        serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+                        serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
                         iServiceOutPathService.insertServiceOutPath(serviceOutPath);
                         String format = String.format("%03X", serviceOutPath.getId());
                         serviceOutPath.setRadix(format);
@@ -412,15 +430,28 @@
                     String s = null;
                     if (active.equals("xh")) {
                         //鏂板崕鐨勭煭淇″彂閫佹柟寮�
-                        Map<String, String> req = new HashMap<>();
-                        req.put("phone", sendMagParam.getPhone());
-                        req.put("content", sendMagParam.getContent());
-                        log.info("content杩斿洖鍊肩殑鍐呭鏄細{}", sendMagParam.getContent());
-                        s = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
-                    } else if (active.equals("ls")) {
-//                        String url = configService.selectConfigByKey("token.360", serviceSubtask.getOrgid());
-//                        log.info("-------00token.360鐨刄RL涓猴細{}", url);
+                        Map<String, String> map2 = new HashMap<String, String>();
+                        map2.put("action", "send");
+                        map2.put("account", xhsmsAccount);
+                        map2.put("password", xhsmsPwd);
+                        map2.put("mobile", sendMagParam.getPhone());
+                        map2.put("content", sendMagParam.getContent());
+                        map2.put("extno", xhsmsjrm);
+                        map2.put("rt", "json");
+                        StringBuilder encodedParams = new StringBuilder();
 
+                        for (Map.Entry<String, String> entry : map2.entrySet()) {
+                            if (encodedParams.length() > 0) {
+                                encodedParams.append("&");
+                            }
+                            // 瀵归敭鍜屽�艰繘琛孶RL缂栫爜
+                            String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
+                            String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8");
+                            encodedParams.append(encodedKey).append("=").append(encodedValue);
+                        }
+                        Boolean isSuccess = HttpUtil.postJsonRequest(xhsmsPath, encodedParams.toString());
+                        if (isSuccess) s = "true";
+                    } else if (active.equals("ls")) {
                         //涓芥按鐨勭煭淇″彂閫佹柟寮�
                         SysConfig config = new SysConfig();
                         config.setConfigKey("ls.msg.info");
@@ -492,7 +523,8 @@
                         String sign = Md5Utils.hash(xhsmsAccount + timestamp + Md5Utils.hash(xhsmsPwd));
                         String content = sendMagParam.getContent();
                         String jsonMsg = "{" + "\"userName\": \"" + xhsmsAccount + "\"," + "\"content\": \"" + content + "\"," + "\"phoneList\": [" + sendMagParam.getPhone() + "]," + "\"timestamp\": " + timestamp + "," + "\"sign\": \"" + sign + "\"" + "}";
-                        s = HttpUtil.postJsonRequest(xhsmsPath, jsonMsg);
+                        Boolean b = HttpUtil.postJsonRequest(xhsmsPath, jsonMsg);
+                        if (b) s = "true";
                         log.info("------甯備竴鐭俊鍙戦�佺殑鍊间负锛歿}", s);
                         if (StringUtils.isNotEmpty(s)) {
                             JSONObject jsonObject = JSONObject.parseObject(s);
@@ -559,6 +591,10 @@
                         serviceOutPath.setParam6(subId);
                         serviceOutPath.setCreateTime(new Date());
                         serviceOutPath.setOrgid(serviceSubtask.getOrgid());
+                        serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+                        serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
+                        serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+                        serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
                         iServiceOutPathService.insertServiceOutPath(serviceOutPath);
                         String format = String.format("%03X", serviceOutPath.getId());
                         serviceOutPath.setRadix(format);
@@ -574,6 +610,10 @@
                         serviceOutPath.setParam6(subId);
                         serviceOutPath.setCreateTime(new Date());
                         serviceOutPath.setOrgid(serviceSubtask.getOrgid());
+                        serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+                        serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
+                        serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+                        serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
                         iServiceOutPathService.insertServiceOutPath(serviceOutPath);
                         String format = String.format("%03X", serviceOutPath.getId());
                         serviceOutPath.setRadix(format);
@@ -591,6 +631,10 @@
                         serviceOutPath.setParam3(ivrTask1.getTaskName());
                         serviceOutPath.setParam6(subId);
                         serviceOutPath.setCreateTime(new Date());
+                        serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+                        serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
+                        serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+                        serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
                         serviceOutPath.setOrgid(serviceSubtask.getOrgid());
                         iServiceOutPathService.insertServiceOutPath(serviceOutPath);
                         String format = String.format("%03X", serviceOutPath.getId());
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
index bdefcbd..9b3667f 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.utils.HttpUtil;
 import com.ruoyi.common.utils.RSAPublicKeyExample;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.http.HttpUtils;
 import com.ruoyi.common.utils.sms.smsUtils;
 import com.smartor.common.MtSubmitSmUtil;
 import com.smartor.common.ShiyiSmsUtil;
@@ -29,6 +30,7 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
@@ -54,6 +56,9 @@
 
     @Value("${xhsmsPwd}")
     private String xhsmsPwd;
+    // 铏氭嫙鎺ュ叆鐮�
+    @Value("${xhsmsjrm}")
+    private String xhsmsjrm;
 
     @Value("${localIP}")
     private String ip;
@@ -143,10 +148,33 @@
                     }
                 }
             } else if (active.equals("xh")) {
-                Map<String, String> req = new HashMap<>();
-                req.put("phone", vo.getPhone());
-                req.put("content", vo.getContent());
-                sendMsg = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
+//                Map<String, String> req = new HashMap<>();
+//                req.put("phone", vo.getPhone());
+//                req.put("content", vo.getContent());
+//                Boolean result = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
+                Map<String, String> map2 = new HashMap<String, String>();
+                map2.put("action", "send");
+                map2.put("account", xhsmsAccount);
+                map2.put("password", xhsmsPwd);
+                map2.put("mobile", vo.getPhone());
+                map2.put("content", vo.getContent());
+                map2.put("extno", xhsmsjrm);
+                map2.put("rt", "json");
+                StringBuilder encodedParams = new StringBuilder();
+
+                for (Map.Entry<String, String> entry : map2.entrySet()) {
+                    if (encodedParams.length() > 0) {
+                        encodedParams.append("&");
+                    }
+                    // 瀵归敭鍜屽�艰繘琛孶RL缂栫爜
+                    String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
+                    String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8");
+                    encodedParams.append(encodedKey).append("=").append(encodedValue);
+                }
+                Boolean result = HttpUtils.sendPost(xhsmsPath, encodedParams.toString());
+                if (result) {
+                    sendMsg = "true";
+                }
             } else if (active.equals("ls")) {
                 //涓芥按13瀹跺尰闄紝鏈夌偣涓嶆柟渚匡紝鏈夌┖鍐嶆帴
                 return AjaxResult.error("璇ョ煭淇″姛鑳借繕鏈紑閫�");
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationDoseInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationDoseInfoController.java
new file mode 100644
index 0000000..0debfe0
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationDoseInfoController.java
@@ -0,0 +1,110 @@
+package com.ruoyi.web.controller.smartor;
+
+import com.ruoyi.common.annotation.AddOrgId;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.smartor.domain.MedicationDoseInfo;
+import com.smartor.service.IMedicationDoseInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鑽搧鍓傞噺淇℃伅Controller
+ *
+ * @author lihu
+ * @date 2026-07-17
+ */
+@Api("鑽搧鍓傞噺淇℃伅")
+@RestController
+@RequestMapping("/smartor/medicationDoseInfo")
+public class MedicationDoseInfoController extends BaseController
+{
+    @Autowired
+    private IMedicationDoseInfoService medicationDoseInfoService;
+
+    /**
+     * 鏌ヨ鑽搧鍓傞噺淇℃伅鍒楄〃
+     */
+    @ApiOperation("鏌ヨ鑽搧鍓傞噺淇℃伅鍒楄〃")
+    //@PreAuthorize("@ss.hasPermi('smartor:info:list')")
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/list")
+    public TableDataInfo list(@RequestBody MedicationDoseInfo medicationDoseInfo)
+    {
+        startPage();
+        List<MedicationDoseInfo> list = medicationDoseInfoService.selectMedicationDoseInfoList(medicationDoseInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鑽搧鍓傞噺淇℃伅鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭鑽搧鍓傞噺淇℃伅鍒楄〃")
+    //@PreAuthorize("@ss.hasPermi('smartor:info:export')")
+    @Log(title = "鑽搧鍓傞噺淇℃伅", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, MedicationDoseInfo medicationDoseInfo)
+    {
+        List<MedicationDoseInfo> list = medicationDoseInfoService.selectMedicationDoseInfoList(medicationDoseInfo);
+        ExcelUtil<MedicationDoseInfo> util = new ExcelUtil<MedicationDoseInfo>(MedicationDoseInfo.class);
+        util.exportExcel(response, list, "鑽搧鍓傞噺淇℃伅鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇鑽搧鍓傞噺淇℃伅璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇鑽搧鍓傞噺淇℃伅璇︾粏淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:info:query')")
+    @GetMapping(value = "/getInfo/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(medicationDoseInfoService.selectMedicationDoseInfoById(id));
+    }
+
+    /**
+     * 鏂板鑽搧鍓傞噺淇℃伅
+     */
+    @ApiOperation("鏂板鑽搧鍓傞噺淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:info:add')")
+    @Log(title = "鑽搧鍓傞噺淇℃伅", businessType = BusinessType.INSERT)
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody MedicationDoseInfo medicationDoseInfo)
+    {
+        return toAjax(medicationDoseInfoService.insertMedicationDoseInfo(medicationDoseInfo));
+    }
+
+    /**
+     * 淇敼鑽搧鍓傞噺淇℃伅
+     */
+    @ApiOperation("淇敼鑽搧鍓傞噺淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:info:edit')")
+    @Log(title = "鑽搧鍓傞噺淇℃伅", businessType = BusinessType.UPDATE)
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody MedicationDoseInfo medicationDoseInfo)
+    {
+        return toAjax(medicationDoseInfoService.updateMedicationDoseInfo(medicationDoseInfo));
+    }
+
+    /**
+     * 鍒犻櫎鑽搧鍓傞噺淇℃伅
+     */
+    @ApiOperation("鍒犻櫎鑽搧鍓傞噺淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:info:remove')")
+    @Log(title = "鑽搧鍓傞噺淇℃伅", businessType = BusinessType.DELETE)
+	@GetMapping("/remove/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(medicationDoseInfoService.deleteMedicationDoseInfoByIds(ids));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationItemController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationItemController.java
new file mode 100644
index 0000000..6d90b67
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationItemController.java
@@ -0,0 +1,103 @@
+package com.ruoyi.web.controller.smartor;
+
+import com.ruoyi.common.annotation.AddOrgId;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.smartor.domain.MedicationItem;
+import com.smartor.service.IMedicationItemService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鑽搧淇℃伅Controller
+ *
+ * @author lihu
+ * @date 2026-07-17
+ */
+@Api("鑽搧淇℃伅")
+@RestController
+@RequestMapping("/smartor/medicationitem")
+public class MedicationItemController extends BaseController {
+    @Autowired
+    private IMedicationItemService medicationItemService;
+
+    /**
+     * 鏌ヨ鑽搧淇℃伅鍒楄〃
+     */
+    @ApiOperation("鏌ヨ鑽搧淇℃伅鍒楄〃")
+    //@PreAuthorize("@ss.hasPermi('smartor:item:list')")
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/list")
+    public TableDataInfo list(@RequestBody MedicationItem medicationItem) {
+        startPage();
+        List<MedicationItem> list = medicationItemService.selectMedicationItemList(medicationItem);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鑽搧淇℃伅鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭鑽搧淇℃伅鍒楄〃")
+    //@PreAuthorize("@ss.hasPermi('smartor:item:export')")
+    @Log(title = "鑽搧淇℃伅", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, MedicationItem medicationItem) {
+        List<MedicationItem> list = medicationItemService.selectMedicationItemList(medicationItem);
+        ExcelUtil<MedicationItem> util = new ExcelUtil<MedicationItem>(MedicationItem.class);
+        util.exportExcel(response, list, "鑽搧淇℃伅鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇鑽搧淇℃伅璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇鑽搧淇℃伅璇︾粏淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:item:query')")
+    @GetMapping(value = "/getInfo/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(medicationItemService.selectMedicationItemById(id));
+    }
+
+    /**
+     * 鏂板鑽搧淇℃伅
+     */
+    @ApiOperation("鏂板鑽搧淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:item:add')")
+    @Log(title = "鑽搧淇℃伅", businessType = BusinessType.INSERT)
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody MedicationItem medicationItem) {
+        return toAjax(medicationItemService.insertMedicationItem(medicationItem));
+    }
+
+    /**
+     * 淇敼鑽搧淇℃伅
+     */
+    @ApiOperation("淇敼鑽搧淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:item:edit')")
+    @Log(title = "鑽搧淇℃伅", businessType = BusinessType.UPDATE)
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody MedicationItem medicationItem) {
+        return toAjax(medicationItemService.updateMedicationItem(medicationItem));
+    }
+
+    /**
+     * 鍒犻櫎鑽搧淇℃伅
+     */
+    @ApiOperation("鍒犻櫎鑽搧淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:item:remove')")
+    @Log(title = "鑽搧淇℃伅", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(medicationItemService.deleteMedicationItemByIds(ids));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java
index ef46ef6..95945b0 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java
@@ -1,10 +1,12 @@
 package com.ruoyi.web.controller.smartor;
 
 import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
 import com.google.zxing.WriterException;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
 import com.google.zxing.qrcode.QRCodeWriter;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
 import com.mchange.v2.uid.UidUtils;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.framework.config.ServerConfig;
@@ -21,10 +23,17 @@
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletRequest;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.StringWriter;
+import java.net.URI;
 import java.util.*;
 
 @Slf4j
@@ -41,6 +50,11 @@
 
     @Value("${ruoyi.profile}")
     private String profile;
+
+    /**
+     * 鍏徃logo鍦╟lasspath涓殑璺緞锛屾墦鍖呰繘jar鍚庝换浣曠幆澧冮兘鑳借鍙栧埌
+     */
+    private static final String LOGO_CLASSPATH = "/images/hrslogo.png";
 
     @Autowired
     private ServerConfig serverConfig;
@@ -122,24 +136,85 @@
     @PostMapping(value = "/getQRcode")
     public AjaxResult getQRcode(@RequestParam("url") String url) {
         log.info("鑾峰彇闂嵎浜岀淮鐮佺殑鍏ュ弬锛歿}", url);
-        String uuid = UUID.randomUUID().toString().replace("-", "");
-        String filePath = profile + "\\qrpath" + "\\" + uuid + ".png"; // 淇濆瓨浜岀淮鐮佸浘鍍忕殑鏂囦欢璺緞
+        // 灏濊瘯浠巙rl涓彁鍙杙鍙傛暟鐨勫�间綔涓哄浘鐗囧悕绉帮紝鍊间负绌哄垯鐢║UID
+        String fileName = UUID.randomUUID().toString().replace("-", "");
+        try {
+            URI uri = new URI(url);
+            String query = uri.getQuery();
+            if (query != null) {
+                for (String param : query.split("&")) {
+                    String[] pair = param.split("=", 2);
+                    if ("p".equals(pair[0]) && pair.length > 1 && !pair[1].isEmpty()) {
+                        fileName = pair[1] + "-" + System.currentTimeMillis();
+                        break;
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.warn("瑙f瀽url涓殑p鍙傛暟澶辫触锛屼娇鐢║UID浣滀负鏂囦欢鍚�");
+        }
+        String filePath = profile + "\\qrpath" + "\\" + fileName + ".png"; // 淇濆瓨浜岀淮鐮佸浘鍍忕殑鏂囦欢璺緞
         //鍒ゆ柇鏂囦欢澶规槸鍚﹀瓨鍦�
         File file = new File(profile + "\\qrpath");
         if (!file.exists()) {
             file.mkdirs();
         }
         generateQRCode(url, filePath);
-        return AjaxResult.success(serverConfig.getUrl() + "/profile/qrpath/" + uuid + ".png");
+        return AjaxResult.success(serverConfig.getUrl() + "/profile/qrpath/" + fileName + ".png");
     }
 
     private void generateQRCode(String url, String filePath) {
         QRCodeWriter qrCodeWriter = new QRCodeWriter();
         try {
-            BitMatrix bitMatrix = qrCodeWriter.encode(url, BarcodeFormat.QR_CODE, 500, 500);
+            // 浣跨敤楂樺閿欑骇鍒紙H绾э紝30%瀹归敊锛夛紝纭繚浜岀淮鐮佷腑闂村祵鍏ogo鍚庝粛鍙甯告壂鎻�
+            Map<EncodeHintType, Object> hints = new HashMap<>();
+            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+            hints.put(EncodeHintType.MARGIN, 1);
 
+            BitMatrix bitMatrix = qrCodeWriter.encode(url, BarcodeFormat.QR_CODE, 500, 500, hints);
+
+            // 灏咮itMatrix杞负浜屽�糂ufferedImage锛堥粦鐧斤級
+            BufferedImage binaryImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
+
+            // 鍒涘缓RGB褰╄壊鍥惧儚锛屾妸浜岀淮鐮佺敾涓婂幓锛屽惁鍒欏悗缁粯鍒秎ogo浼氫涪澶遍鑹�
+            BufferedImage qrImage = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
+            Graphics2D graphics = qrImage.createGraphics();
+            graphics.setColor(Color.WHITE);
+            graphics.fillRect(0, 0, 500, 500);
+            graphics.drawImage(binaryImage, 0, 0, null);
+
+            // 浠巆lasspath璇诲彇logo骞剁粯鍒跺埌浜岀淮鐮佷腑闂�
+            try (InputStream logoStream = this.getClass().getResourceAsStream(LOGO_CLASSPATH)) {
+                if (logoStream != null) {
+                    BufferedImage logoImage = ImageIO.read(logoStream);
+
+                    // 璁$畻logo灏哄锛岃涓轰簩缁寸爜鐨�1/5
+                    int logoWidth = qrImage.getWidth() / 5;
+                    int logoHeight = qrImage.getHeight() / 5;
+
+                    // 璁$畻logo灞呬腑浣嶇疆
+                    int logoX = (qrImage.getWidth() - logoWidth) / 2;
+                    int logoY = (qrImage.getHeight() - logoHeight) / 2;
+
+                    // 缁樺埗鐧借壊鍦嗚鑳屾櫙锛岃logo鏇寸獊鍑�
+                    int padding = 6;
+                    graphics.setColor(Color.WHITE);
+                    graphics.fillRoundRect(logoX - padding, logoY - padding, logoWidth + padding * 2, logoHeight + padding * 2, 10, 10);
+
+                    // 缁樺埗logo
+                    graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+                    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+                    graphics.drawImage(logoImage, logoX, logoY, logoWidth, logoHeight, null);
+                } else {
+                    log.warn("classpath涓湭鎵惧埌浜岀淮鐮乴ogo: {}", LOGO_CLASSPATH);
+                }
+            }
+            graphics.dispose();
+
+            // 杈撳嚭鏈�缁堝浘鐗�
             File outputFile = new File(filePath);
-            MatrixToImageWriter.writeToPath(bitMatrix, "PNG", outputFile.toPath());
+            ImageIO.write(qrImage, "PNG", outputFile);
         } catch (WriterException | IOException e) {
             e.printStackTrace();
         }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceAppointRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceAppointRecordController.java
new file mode 100644
index 0000000..a0a49f1
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceAppointRecordController.java
@@ -0,0 +1,103 @@
+package com.ruoyi.web.controller.smartor;
+
+import com.ruoyi.common.annotation.AddOrgId;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.smartor.domain.ServiceAppointRecord;
+import com.smartor.service.IServiceAppointRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 棰勭害璁板綍Controller
+ *
+ * @author lihu
+ * @date 2026-07-06
+ */
+@Api("棰勭害璁板綍")
+@RestController
+@RequestMapping("/smartor/record")
+public class ServiceAppointRecordController extends BaseController {
+    @Autowired
+    private IServiceAppointRecordService serviceAppointRecordService;
+
+    /**
+     * 鏌ヨ棰勭害璁板綍鍒楄〃
+     */
+    @ApiOperation("鏌ヨ棰勭害璁板綍鍒楄〃")
+    //@PreAuthorize("@ss.hasPermi('smartor:record:list')")
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/list")
+    public TableDataInfo list(@RequestBody ServiceAppointRecord serviceAppointRecord) {
+        startPage();
+        List<ServiceAppointRecord> list = serviceAppointRecordService.selectServiceAppointRecordList(serviceAppointRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭棰勭害璁板綍鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭棰勭害璁板綍鍒楄〃")
+    //@PreAuthorize("@ss.hasPermi('smartor:record:export')")
+    @Log(title = "棰勭害璁板綍", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ServiceAppointRecord serviceAppointRecord) {
+        List<ServiceAppointRecord> list = serviceAppointRecordService.selectServiceAppointRecordList(serviceAppointRecord);
+        ExcelUtil<ServiceAppointRecord> util = new ExcelUtil<ServiceAppointRecord>(ServiceAppointRecord.class);
+        util.exportExcel(response, list, "棰勭害璁板綍鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇棰勭害璁板綍璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇棰勭害璁板綍璇︾粏淇℃伅")
+    //@PreAuthorize("@ss.hasPermi('smartor:record:query')")
+    @GetMapping(value = "/getInfo/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(serviceAppointRecordService.selectServiceAppointRecordById(id));
+    }
+
+    /**
+     * 鏂板棰勭害璁板綍
+     */
+    @ApiOperation("鏂板棰勭害璁板綍")
+    //@PreAuthorize("@ss.hasPermi('smartor:record:add')")
+    @Log(title = "棰勭害璁板綍", businessType = BusinessType.INSERT)
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody ServiceAppointRecord serviceAppointRecord) {
+        return toAjax(serviceAppointRecordService.insertServiceAppointRecord(serviceAppointRecord));
+    }
+
+    /**
+     * 淇敼棰勭害璁板綍
+     */
+    @ApiOperation("淇敼棰勭害璁板綍")
+    //@PreAuthorize("@ss.hasPermi('smartor:record:edit')")
+    @Log(title = "棰勭害璁板綍", businessType = BusinessType.UPDATE)
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody ServiceAppointRecord serviceAppointRecord) {
+        return toAjax(serviceAppointRecordService.updateServiceAppointRecord(serviceAppointRecord));
+    }
+
+    /**
+     * 鍒犻櫎棰勭害璁板綍
+     */
+    @ApiOperation("鍒犻櫎棰勭害璁板綍")
+    //@PreAuthorize("@ss.hasPermi('smartor:record:remove')")
+    @Log(title = "棰勭害璁板綍", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(serviceAppointRecordService.deleteServiceAppointRecordByIds(ids));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
index 2b6c7cf..1065ee7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
@@ -142,6 +142,17 @@
         return toAjax(serviceOutPathService.insertServiceOutPath(serviceOutPath));
     }
 
+
+    /**
+     * 鏂板涓婚敭
+     */
+    @ApiOperation("鏂板涓婚敭")
+    @Log(title = "涓婚敭", businessType = BusinessType.INSERT)
+    @PostMapping("/addOutPath")
+    public AjaxResult addOutPath(@RequestBody ServiceOutPath serviceOutPath) {
+        return success(serviceOutPathService.addOutPath(serviceOutPath));
+    }
+
     /**
      * 淇敼涓婚敭
      */
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java
index 661753f..f384ec7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java
@@ -164,8 +164,8 @@
     @PostMapping("/getQuestionCache")
     public AjaxResult getQuestionCache(@RequestBody ServiceSubTaskCacheReq serviceSubTaskCacheReq) {
         log.info("銆恠aveQuestionCache-----getQuestionCache銆戠殑鍏ュ弬涓猴細{}", serviceSubTaskCacheReq);
-        if (StringUtils.isEmpty(serviceSubTaskCacheReq.getParam1()) || StringUtils.isEmpty(serviceSubTaskCacheReq.getParam2()))
-            throw new BaseException("璇锋鏌aram1鎴杙aram2鐨勫��");
+//        if (StringUtils.isEmpty(serviceSubTaskCacheReq.getParam1()) || StringUtils.isEmpty(serviceSubTaskCacheReq.getParam2()))
+//            throw new BaseException("璇锋鏌aram1鎴杙aram2鐨勫��");
         return AjaxResult.success(serviceSubtaskAnswerService.getQuestionCache(serviceSubTaskCacheReq, 0L));
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index caa866b..73b9e8b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -1,11 +1,7 @@
 package com.ruoyi.web.controller.smartor;
 
 import com.alibaba.fastjson.JSON;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.pagehelper.ISelect;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
 import com.ruoyi.common.annotation.AddOrgId;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.constant.HttpStatus;
@@ -16,9 +12,7 @@
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.redis.RedisCache;
-import com.ruoyi.common.dx.MessageSend;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.enums.MsgLSEnum;
 import com.ruoyi.common.enums.PreachFormEnum;
 import com.ruoyi.common.enums.SendStateEnum;
 import com.ruoyi.common.exception.base.BaseException;
@@ -27,11 +21,8 @@
 import com.ruoyi.common.utils.reflect.ReflectUtils;
 import com.ruoyi.quartz.service.ICollectHISService;
 import com.ruoyi.quartz.task.RyTask;
-import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserDeptService;
-import com.smartor.common.LSHospTokenUtil;
-import com.smartor.common.QwenLLMUtil;
 import com.smartor.domain.*;
 import com.smartor.domain.VO.HeLibraryCountVO;
 import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
@@ -53,8 +44,6 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -111,7 +100,6 @@
     @ApiOperation("鏌ヨ鎮h�呴殢璁夸俊鎭�")
     @PostMapping("/patItem")
     public Map<String, Object> patItem(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
-
         serviceSubtaskVO.setPageNum(PageUtils.getOffset(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()));
         List<ServiceSubtaskRes> serviceSubtaskList = null;
         LoginUser loginUser = getLoginUser();
@@ -189,6 +177,15 @@
         if (ObjectUtils.isNotEmpty(loginUser) && ObjectUtils.isNotEmpty(loginUser.getUser())) {
             userId = loginUser.getUser().getUserId();
         }
+        if (serviceSubtaskEntity.getSendstateView() != null) {
+            //            1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��5 鍙戦�佸け璐ャ��7銆佽秴鏃讹級锛�2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
+            if (serviceSubtaskEntity.getSendstateView() == 1)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
+            if (serviceSubtaskEntity.getSendstateView() == 2)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
+            if (serviceSubtaskEntity.getSendstateView() == 3)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(4L)));
+        }
         if (ObjectUtils.isNotEmpty(userId)) {
             Map<String, Object> redisMap = redisCache.getCacheObject(userId + "patItemCount");
             Boolean redisFlag = false;
@@ -258,14 +255,13 @@
 
             //鑾峰彇serviceSubtaskList涓殑鎵�鏈塼askid
             List<Long> taskIds = serviceSubtaskList.stream().map(ServiceSubtaskRes::getTaskid).filter(ObjectUtils::isNotEmpty).distinct().collect(Collectors.toList());
-            serviceSubtaskDetailRatioExports = serviceSubtaskService.statQuestionOption(taskIds);
+            serviceSubtaskDetailRatioExports = serviceSubtaskService.statQuestionOption(taskIds, serviceSubtaskVO.getStartOutHospTime(), serviceSubtaskVO.getEndOutHospTime());
 
         }
 
 
         ExcelUtil<ServiceSubtaskExport> util = new ExcelUtil<ServiceSubtaskExport>(ServiceSubtaskExport.class);
-        util.exportExcelTwoSheet(response, serviceSubtaskExports, "鎮h�呴殢璁夸俊鎭〃鍗�",
-                serviceSubtaskDetailRatioExports, "闂璇︽儏鍗犳瘮", ServiceSubtaskDetailRatioExport.class);
+        util.exportExcelTwoSheet(response, serviceSubtaskExports, "鎮h�呴殢璁夸俊鎭〃鍗�", serviceSubtaskDetailRatioExports, "闂璇︽儏鍗犳瘮", ServiceSubtaskDetailRatioExport.class);
     }
 
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
index 801edca..f8fa458 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
@@ -222,14 +222,15 @@
         log.info("getScriptInfoByCondition鍏ュ弬涓猴細{}", serviceTaskScriptQues);
         try {
             tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceTaskScriptQues.getParam1(), pri_key));
-            pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceTaskScriptQues.getParam2(), pri_key));
+            if (StringUtils.isNotEmpty(serviceTaskScriptQues.getParam2()))
+                pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceTaskScriptQues.getParam2(), pri_key));
         } catch (Exception e) {
             log.error("getScriptInfoByCondition鎶ラ敊浜嗭細{}", e.getMessage());
         }
 
         log.info("tid鍜宲id鐨勫�间负锛歿},{}", tid, pid);
         if (StringUtils.isEmpty(serviceTaskScriptQues.getPatfrom())) serviceTaskScriptQues.setPatfrom("0");
-        return success(serviceTaskService.getScriptInfoByCondition(tid, pid, true, serviceTaskScriptQues.getPatfrom(),null));
+        return success(serviceTaskService.getScriptInfoByCondition(tid, pid, true, serviceTaskScriptQues.getPatfrom(), null));
     }
 
 
@@ -253,7 +254,7 @@
 
         log.info("tid鍜宲id鐨勫�间负锛歿},{}", tid, pid);
         if (StringUtils.isEmpty(serviceTaskScriptQues.getPatfrom())) serviceTaskScriptQues.setPatfrom("0");
-        return success(serviceTaskService.getScriptInfoByCondition(tid, pid, true, serviceTaskScriptQues.getPatfrom(),null));
+        return success(serviceTaskService.getScriptInfoByCondition(tid, pid, true, serviceTaskScriptQues.getPatfrom(), null));
     }
 
 
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
index 8f21b07..0310368 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
@@ -95,7 +95,7 @@
         return httpClient;
     }
 
-    public static String postJsonRequest(String url, String request) throws HttpRequestException {
+    public static Boolean postJsonRequest(String url, String request) throws HttpRequestException {
         Assert.hasLength(url, "璇锋眰url涓嶈兘涓虹┖瀛楃涓层��");
         EntityEnclosingMethod httpMethod = new PostMethod(url);
 
@@ -122,7 +122,7 @@
             if (inputStream == null) {
                 throw new HttpRequestException(RESPONSE_NULL_ERROR_CODE, "鍝嶅簲涓簄ull");
             }
-            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,charset));
+            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset));
             StringBuffer stringBuffer = new StringBuffer();
             String str = "";
             while ((str = reader.readLine()) != null) {
@@ -132,7 +132,7 @@
             String respJson = stringBuffer.toString();
             // String respJson = httpMethod.getResponseBodyAsString();
             if (resultCode == OK) {
-                return respJson;
+                return true;
             } else {
                 throw new HttpRequestException(resultCode, respJson);
             }
@@ -153,8 +153,6 @@
      * json鐨刾ost璇锋眰
      *
      * @param url           璇锋眰url
-     * @param reqEntity     璇锋眰澶翠笌璇锋眰浣撶殑灏佽
-     * @param respBodyClass 鍝嶅簲浣撶被鍨�
      * @return 杩斿洖鐨勫搷搴旂粨鏋�
      */
     public static String postXmlRequest(String url, String request) throws HttpRequestException {
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
index 8d6aff4..3de259b 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
@@ -108,10 +108,11 @@
      * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
      * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
      */
-    public static String sendPost(String url, String param) {
+    public static Boolean sendPost(String url, String param) {
         PrintWriter out = null;
         BufferedReader in = null;
         StringBuilder result = new StringBuilder();
+        boolean success = false;
         try {
             log.info("sendPost - {}", url);
             URL realUrl = new URL(url);
@@ -135,6 +136,7 @@
                 result.append(line);
             }
             log.info("recv - {}", result);
+            success = true;
         } catch (ConnectException e) {
             log.error("璋冪敤HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
         } catch (SocketTimeoutException e) {
@@ -155,7 +157,7 @@
                 log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex);
             }
         }
-        return result.toString();
+        return success;
     }
 
     public static String sendPostByHeaderOld(String url, String param, Map<String, String> headers) {
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sms/smsUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sms/smsUtils.java
index 181ebdc..d650902 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sms/smsUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sms/smsUtils.java
@@ -39,8 +39,8 @@
                 "\"timestamp\": " + timestamp + "," +
                 "\"sign\": \"" + sign + "\"" +
                 "}";
-        String sendMsg=HttpUtil.postJsonRequest(url, jsonMsg);
-        return sendMsg;
+        Boolean sendMsg=HttpUtil.postJsonRequest(url, jsonMsg);
+        return sendMsg.toString();
 
     }
 
@@ -66,8 +66,8 @@
                 "\"timestamp\": " + timestamp + "," +
                 "\"sign\": \"" + sign + "\"" +
                 "}";
-        String sendMsg=HttpUtil.postJsonRequest(url, jsonMsg);
-        return sendMsg;
+        Boolean sendMsg=HttpUtil.postJsonRequest(url, jsonMsg);
+        return sendMsg.toString();
 
     }
 
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index db1afbc..0422675 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -12,7 +12,6 @@
 import com.ruoyi.common.enums.MsgLSEnum;
 import com.ruoyi.common.enums.ServiceFromEnum;
 import com.ruoyi.common.enums.WxGZHEnum;
-import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.*;
 import com.ruoyi.common.utils.http.HttpUtils;
 import com.ruoyi.common.utils.sms.smsUtils;
@@ -35,7 +34,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.io.IOException;
 import java.net.URLEncoder;
@@ -49,6 +47,7 @@
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static cn.hutool.core.convert.Convert.toHex;
@@ -115,6 +114,9 @@
 
     @Value("${xhsmsPwd}")
     private String xhsmsPwd;
+    // 铏氭嫙鎺ュ叆鐮�
+    @Value("${xhsmsjrm}")
+    private String xhsmsjrm;
 
     @Value("${pub_key}")
     private String pub_key;
@@ -235,6 +237,15 @@
         serviceSubtaskAnswerService.saveQuestionAnswer(null, 0L);
     }
 
+    /**
+     * 鑾峰彇棰勭害鍋滆瘖璁板綍淇℃伅
+     *
+     */
+    public void getAppointRecordInfo() {
+        LocalDateTime tomorrowStart = LocalDate.now().plusDays(1).atStartOfDay(); // 鏄庡ぉ 00:00:00
+        LocalDateTime tomorrowEnd = tomorrowStart.plusDays(1).minusSeconds(1);     // 鏄庡ぉ 23:59:59
+        ixhGatherPatArchiveService.getAppointRecordInfo("2", tomorrowStart, tomorrowEnd);
+    }
 
     /**
      * HIS鏁版嵁閲囬泦
@@ -328,78 +339,159 @@
                         aBoolean = serviceSLTDHealthcareRecordService.queryHospUserInfoList(reqVO);
                     }
                     log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滅敤鎴蜂俊鎭�濈粨鏉熼噰闆嗘暟鎹細{}", aBoolean);
+                    //鐤剧梾瀛楀吀閲囬泦
+                    iIcd10Service.queryAddIcd10();
                 }
-                //鐤剧梾瀛楀吀閲囬泦
-                iIcd10Service.queryAddIcd10();
 
-                // 鐪佺珛鍚屽痉鏁版嵁閲囬泦
-                for (Long cid : campusidList) {
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濆紑濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
-                    String nowTime = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                    ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO();
-                    serviceSLTDInhospReqVO.setOrgId("20001001");
-                    serviceSLTDInhospReqVO.setCampusId(cid);
-                    serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime);
-                    serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime);
-                    if (active.trim().equals("nhfy")) {
-                        serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-                        serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                // nhfy/sltd鍥炴函30澶╁垎娈甸噰闆嗗垽鏂紙姣忔鏈�澶�7澶╋級
+                boolean isBackfill = (active.trim().equals("nhfy") || active.trim().equals("sltd")) && StringUtils.isNotBlank(todayZeroStr);
+                if (isBackfill) {
+                    DateTimeFormatter dateFmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                    LocalDate segStart = todayZero.toLocalDate().minusDays(30);
+                    LocalDate segEndDate = todayZero.toLocalDate();
+                    int segCount = 0;
+                    while (!segStart.isAfter(segEndDate)) {
+                        LocalDate segEnd = segStart.plusDays(6);
+                        if (segEnd.isAfter(segEndDate)) {
+                            segEnd = segEndDate;
+                        }
+                        segCount++;
+                        log.info("銆恉ealHisData銆憑}鍥炴函绗瑊}娈甸噰闆嗭紝鏃ユ湡鑼冨洿锛歿} ~ {}", active.trim(), segCount, segStart.format(dateFmt), segEnd.format(dateFmt));
+                        for (Long cid : campusidList) {
+                            collectSegmentData(cid, segStart.format(dateFmt), segEnd.format(dateFmt));
+                        }
+                        segStart = segEnd.plusDays(1);
                     }
-                    List<String> list = new ArrayList<>();
-                    list.add("FH0109.22");
-                    list.add("FH0109.23");
-                    list.add("FH0109.53");
-                    serviceSLTDInhospReqVO.setStatusList(list);
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
-                    serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濈祼鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
+                    log.info("銆恉ealHisData銆憑}鍥炴函閲囬泦瀹屾垚锛屽叡{}娈�", active.trim(), segCount);
+                }
 
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濆紑濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
-                    serviceSLTDInhospReqVO.setOrgId("20001001");
-                    serviceSLTDInhospReqVO.setCampusId(cid);
-                    serviceSLTDInhospReqVO.setEncounterTimeStart(null);
-                    serviceSLTDInhospReqVO.setEncounterTimeEnd(null);
-                    serviceSLTDInhospReqVO.setStartHeadTime(nowTime);
-                    serviceSLTDInhospReqVO.setStartTailTime(nowTime);
-                    if (active.trim().equals("nhfy")) {
-                        serviceSLTDInhospReqVO.setStartHeadTime(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-                        serviceSLTDInhospReqVO.setStartTailTime(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-                    }
-                    List<String> listStr = new ArrayList<>();
-                    listStr.add("FH0109.24");
-                    serviceSLTDInhospReqVO.setStatusList(listStr);
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
-                    serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濈祼鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
+                // 鐪佺珛鍚屽痉鏁版嵁閲囬泦锛堥潪鍥炴函妯″紡鎵嶆墽琛岋級
+                if (!isBackfill) {
+                    for (Long cid : campusidList) {
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰烽鍏ラ櫌寮�濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
+                        String nowTime = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                        ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO();
+                        serviceSLTDInhospReqVO.setOrgId("20001001");
+                        serviceSLTDInhospReqVO.setCampusId(cid);
+                        serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime);
+                        serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime);
+                        if (active.trim().equals("nhfy")) {
+                            serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                            serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                        }
+                        List<String> list = new ArrayList<>();
+                        list.add("FH0109.22");
+                        list.add("FH0109.23");
+                        list.add("FH0109.53");
+                        serviceSLTDInhospReqVO.setStatusList(list);
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+                        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濈祼鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
 
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濆紑濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
-                    serviceSLTDInhospReqVO.setStartHeadTime(null);
-                    serviceSLTDInhospReqVO.setStartTailTime(null);
-                    serviceSLTDInhospReqVO.setEncounterTimeStart(null);
-                    serviceSLTDInhospReqVO.setEncounterTimeEnd(null);
-                    serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(nowTime);
-                    serviceSLTDInhospReqVO.setPreOutHospitalTailDate(nowTime);
-                    if (active.trim().equals("nhfy")) {
-                        serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-                        serviceSLTDInhospReqVO.setPreOutHospitalTailDate(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-                    }
-                    serviceSLTDInhospReqVO.setHealthcareRecordTypeList(null);
-                    List<String> list2 = new ArrayList<>();
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濆紑濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
+                        serviceSLTDInhospReqVO.setOrgId("20001001");
+                        serviceSLTDInhospReqVO.setCampusId(cid);
+                        serviceSLTDInhospReqVO.setEncounterTimeStart(null);
+                        serviceSLTDInhospReqVO.setEncounterTimeEnd(null);
+                        serviceSLTDInhospReqVO.setStartHeadTime(nowTime);
+                        serviceSLTDInhospReqVO.setStartTailTime(nowTime);
+                        if (active.trim().equals("nhfy")) {
+                            serviceSLTDInhospReqVO.setStartHeadTime(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                            serviceSLTDInhospReqVO.setStartTailTime(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                        }
+                        List<String> listStr = new ArrayList<>();
+                        listStr.add("FH0109.24");
+                        serviceSLTDInhospReqVO.setStatusList(listStr);
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+                        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濈祼鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
+
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濆紑濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
+                        serviceSLTDInhospReqVO.setStartHeadTime(null);
+                        serviceSLTDInhospReqVO.setStartTailTime(null);
+                        serviceSLTDInhospReqVO.setEncounterTimeStart(null);
+                        serviceSLTDInhospReqVO.setEncounterTimeEnd(null);
+                        serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(nowTime);
+                        serviceSLTDInhospReqVO.setPreOutHospitalTailDate(nowTime);
+                        if (active.trim().equals("nhfy")) {
+                            serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                            serviceSLTDInhospReqVO.setPreOutHospitalTailDate(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                        }
+                        serviceSLTDInhospReqVO.setHealthcareRecordTypeList(null);
+                        List<String> list2 = new ArrayList<>();
 //                    list2.add("FH0108.02");
-                    //鍑洪櫌
-                    list2.add("FH0109.27");
-                    //棰勫嚭闄�
-                    list2.add("FH0109.25");
-                    serviceSLTDInhospReqVO.setStatusList(list2);
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
-                    serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
-                    log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濇潫閲囬泦鏁版嵁锛岄櫌鍖猴細{}", cid);
+                        //鍑洪櫌
+                        list2.add("FH0109.27");
+                        //棰勫嚭闄�
+                        list2.add("FH0109.25");
+                        serviceSLTDInhospReqVO.setStatusList(list2);
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+                        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
+                        log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濇潫閲囬泦鏁版嵁锛岄櫌鍖猴細{}", cid);
+                    }
                 }
 
             } catch (Exception e) {
                 log.error("銆恉ealHisData銆戠渷绔嬪悓寰锋暟鎹噰闆嗗紓甯�", e);
             }
         }
+    }
+
+    /**
+     * 鍒嗘閲囬泦鏁版嵁锛堥鍏ラ櫌銆佸叆闄€�佸嚭闄級
+     * 鐢ㄤ簬nhfy/sltd鍥炴函閲囬泦锛屾瘡娆℃渶澶氭煡璇�7澶╂暟鎹�
+     *
+     * @param cid          闄㈠尯ID
+     * @param startDateStr 鏃ユ湡寮�濮� yyyy-MM-dd
+     * @param endDateStr   鏃ユ湡缁撴潫 yyyy-MM-dd
+     */
+    private void collectSegmentData(Long cid, String startDateStr, String endDateStr) {
+        // 棰勫叆闄�
+        log.info("銆恉ealHisData銆戦鍏ラ櫌寮�濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}锛屾椂闂存锛歿} ~ {}", cid, startDateStr, endDateStr);
+        ServiceSLTDInhospReqVO reqVO = new ServiceSLTDInhospReqVO();
+        reqVO.setOrgId("20001001");
+        reqVO.setCampusId(cid);
+        reqVO.setEncounterTimeStart(startDateStr);
+        reqVO.setEncounterTimeEnd(endDateStr);
+        List<String> preAdmitStatus = new ArrayList<>();
+        preAdmitStatus.add("FH0109.22");
+        preAdmitStatus.add("FH0109.23");
+        preAdmitStatus.add("FH0109.53");
+        reqVO.setStatusList(preAdmitStatus);
+        log.info("銆恉ealHisData銆戦鍏ラ櫌閲囬泦鏁版嵁鍏ュ弬锛歿}", reqVO);
+        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(reqVO);
+        log.info("銆恉ealHisData銆戦鍏ラ櫌绲備簡閲囬泦鏁版嵁锛岄櫌鍖猴細{}", cid);
+
+        // 鍏ラ櫌
+        log.info("銆恉ealHisData銆戝叆闄㈠紑濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}锛屾椂闂存锛歿} ~ {}", cid, startDateStr, endDateStr);
+        reqVO = new ServiceSLTDInhospReqVO();
+        reqVO.setOrgId("20001001");
+        reqVO.setCampusId(cid);
+        reqVO.setStartHeadTime(startDateStr);
+        reqVO.setStartTailTime(endDateStr);
+        List<String> admitStatus = new ArrayList<>();
+        admitStatus.add("FH0109.24");
+        reqVO.setStatusList(admitStatus);
+        log.info("銆恉ealHisData銆戝叆闄㈤噰闆嗘暟鎹叆鍙傦細{}", reqVO);
+        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(reqVO);
+        log.info("銆恉ealHisData銆戝叆闄㈢祩浜嗛噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
+
+        // 鍑洪櫌
+        log.info("銆恉ealHisData銆戝嚭闄㈠紑濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}锛屾椂闂存锛歿} ~ {}", cid, startDateStr, endDateStr);
+        reqVO = new ServiceSLTDInhospReqVO();
+        reqVO.setOrgId("20001001");
+        reqVO.setCampusId(cid);
+        reqVO.setPreOutHospitalHeadDate(startDateStr);
+        reqVO.setPreOutHospitalTailDate(endDateStr);
+        List<String> dischargeStatus = new ArrayList<>();
+        //鍑洪櫌
+        dischargeStatus.add("FH0109.27");
+        //棰勫嚭闄�
+        dischargeStatus.add("FH0109.25");
+        reqVO.setStatusList(dischargeStatus);
+        log.info("銆恉ealHisData銆戝嚭闄㈤噰闆嗘暟鎹叆鍙傦細{}", reqVO);
+        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(reqVO);
+        log.info("銆恉ealHisData銆戝嚭闄㈢粨鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
     }
 
     /**
@@ -415,7 +507,7 @@
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             todayZero = LocalDateTime.parse(todayZeroStr, formatter);
         }
-        LocalDateTime yesterdayZero = todayZero.minusDays(1);
+        LocalDateTime tomorrowdayZero = todayZero.plusDays(1);
 
         if (active.trim().equals("sltd") || active.trim().equals("nhfy")) {
             //鐪佺珛鍚屽痉涓庡崕鍗楅檮涓�鐢ㄥ悓涓�濂楅噰闆嗘柟娉曪紙閮芥槸鏉ユ湭鏉ユ彁渚涳級
@@ -436,6 +528,7 @@
                 }
 
                 // 鐪佺珛鍚屽痉鏁版嵁閲囬泦
+                log.info("--campusidList鐨勫�间负锛歿}", campusidList);
                 for (Long cid : campusidList) {
                     String nowTime = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                     ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO();
@@ -444,24 +537,26 @@
                     serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime);
                     serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime);
 
-                    // 闂ㄦ�ヨ瘖鍒嗛〉閲囬泦锛氭瘡椤�1000鏉★紝鐩村埌鏃犳暟鎹负姝�(鍗楀崕闄勪竴鐨勫厛涓嶉噰闂ㄦ�ヨ瘖鏁版嵁)
+                    // 闂ㄦ�ヨ瘖鍒嗛〉閲囬泦锛氭瘡椤�40鏉★紝鐩村埌鏃犳暟鎹负姝�(鍗楀崕闄勪竴鐨勫厛涓嶉噰闂ㄦ�ヨ瘖鏁版嵁)
                     if (active.trim().equals("sltd")) {
                         log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈棬鎬ヨ瘖鈥濆紑濮嬪垎椤甸噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
                         serviceSLTDInhospReqVO.setStartHeadTime(null);
                         serviceSLTDInhospReqVO.setStartTailTime(null);
-//                        serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime);
-//                        serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime);
-//                        if (yesterdayZero != null) {
-                        serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-                        serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-//                        }
+                        //鏌ヨ褰撳ぉ鐨勬暟鎹�
+                        serviceSLTDInhospReqVO.setEncounterTimeEnd(tomorrowdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                        serviceSLTDInhospReqVO.setEncounterTimeStart(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                         serviceSLTDInhospReqVO.setStatusList(null);
                         List<String> list1 = new ArrayList<>();
                         list1.add("FH0108.01");
                         list1.add("FH0108.03");
                         serviceSLTDInhospReqVO.setHealthcareRecordTypeList(list1);
-                        long outpPage = 1L;
-                        final long OUTP_PAGE_SIZE = 1000L;
+                        //浠庣紦瀛橀噷鑾峰彇璧峰椤碉紙闆剁偣鍓�10鍒嗛挓鍐呯敤鏄ㄥぉ鐨勬棩鏈燂紝閬垮厤璺ㄥぉ婕忛噰锛�
+                        LocalDateTime now = LocalDateTime.now();
+                        String mzCacheDate = (now.getHour() == 0 && now.getMinute() < 10) ? now.minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) : now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                        Long outpPage = redisCache.getCacheObject("mzCurrent" + cid + mzCacheDate);
+                        if (outpPage == null) outpPage = 1L;
+                        //閭h竟鏆傛椂鍙兘璁剧疆40
+                        final long OUTP_PAGE_SIZE = 500L;
                         while (true) {
                             serviceSLTDInhospReqVO.setCurrent(outpPage);
                             serviceSLTDInhospReqVO.setSize(OUTP_PAGE_SIZE);
@@ -473,6 +568,9 @@
                             }
                             log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈棬鎬ヨ瘖鈥濈{}椤甸噰闆唟}鏉★紝闄㈠尯锛歿}", outpPage, outpResult.size(), cid);
                             if (outpResult.size() < OUTP_PAGE_SIZE) {
+                                //璁剧疆涓�涓紦瀛橈紝鐢ㄦ潵瀛樺湪涓嬫鐨勮捣濮嬮〉
+                                redisCache.setCacheObject("mzCurrent" + cid + mzCacheDate, outpPage, 24, TimeUnit.HOURS);
+                                log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈棬鎬ヨ瘖鈥濈殑缂撳瓨key:{}涓嬫鐨勮捣濮嬮〉{}锛岄櫌鍖猴細{}", "mzCurrent" + cid + mzCacheDate, outpPage, cid);
                                 break;
                             }
                             outpPage++;
@@ -488,6 +586,26 @@
             }
         }
     }
+
+    /**
+     * 鍚屽痉鑽搧鏁版嵁閲囬泦
+     */
+
+    public void dealHisDataMedication() {
+        final long OUTP_PAGE_SIZE = 500L;
+        ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO();
+        serviceSLTDInhospReqVO.setOrgId("20001001");
+        Long outpPage = 1L;
+        while (true) {
+            serviceSLTDInhospReqVO.setCurrent(outpPage);
+            serviceSLTDInhospReqVO.setSize(OUTP_PAGE_SIZE);
+            log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滆嵂鍝佹暟鎹�濋噰闆嗙{}椤垫暟鎹�", outpPage);
+           Boolean b = serviceSLTDHealthcareRecordService.queryMedicationItemList(serviceSLTDInhospReqVO);
+            log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滆嵂鍝佹暟鎹�濋噰闆嗙粨鏋滐細{}", b);
+            outpPage++;
+        }
+    }
+
 
     public void dealHisDataSLTD() {
         log.info("銆恉ealHisData銆戝紑濮嬫墽琛孒IS鏁版嵁閲囬泦浠诲姟");
@@ -929,9 +1047,9 @@
                         SysConfig sysConfig = new SysConfig();
                         if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("6")) {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("zymyd.sms.template");
-                        }else if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("14")) {
+                        } else if (StringUtils.isNotEmpty(serviceSubtask.getServiceType()) && serviceSubtask.getServiceType().equals("14")) {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("mzmyd.sms.template");
-                        }else {
+                        } else {
                             sysConfig = sysConfigMapper.checkConfigKeyUnique("wj.sms.template");
                         }
                         if (!Objects.isNull(sysConfig)) {
@@ -965,9 +1083,29 @@
                     log.info("active鐨勫�间负锛歿}", active);
                     if (active.equals("xh")) {
                         Map<String, String> req = new HashMap<>();
-                        req.put("phone", sendMagParam.getPhone());
-                        req.put("content", sendMagParam.getContent());
-                        isSuccess = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
+//                        req.put("phone", sendMagParam.getPhone());
+//                        req.put("content", sendMagParam.getContent());
+                        Map<String, String> map2 = new HashMap<String, String>();
+                        map2.put("action", "send");
+                        map2.put("account", xhsmsAccount);
+                        map2.put("password", xhsmsPwd);
+                        map2.put("mobile", sendMagParam.getPhone());
+                        map2.put("content", sendMagParam.getContent());
+                        map2.put("extno", xhsmsjrm);
+                        map2.put("rt", "json");
+                        StringBuilder encodedParams = new StringBuilder();
+
+                        for (Map.Entry<String, String> entry : map2.entrySet()) {
+                            if (encodedParams.length() > 0) {
+                                encodedParams.append("&");
+                            }
+                            // 瀵归敭鍜屽�艰繘琛孶RL缂栫爜
+                            String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
+                            String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8");
+                            encodedParams.append(encodedKey).append("=").append(encodedValue);
+                        }
+                        Boolean result = HttpUtils.sendPost(xhsmsPath, new Gson().toJson(req));
+                        if (result) isSuccess = "true";
                     } else if (active.equals("ls")) {
 //                        String url = configService.selectConfigByKey("token.360", serviceSubtask.getOrgid());
 //                        //涓芥按鐨勭煭淇″彂閫佹柟寮�
@@ -1511,7 +1649,7 @@
         return serviceTaskMap;
     }
 
-    public int qwenLLMTest(String questionText, String voiceText,String value,String regexText) {
+    public int qwenLLMTest(String questionText, String voiceText, String value, String regexText) {
         int result = QwenLLMUtil.matchRegex(questionText, voiceText, value, regexText);
         return result;
     }
diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
index 13d62a8..2617f5d 100644
--- a/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
+++ b/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
@@ -221,6 +221,7 @@
         <result property="futypedesc" column="futypedesc"/>
         <result property="fuadvice" column="fuadvice"/>
         <result property="fuspecialadvice" column="fuspecialadvice"/>
+        <result property="inhospMydFlag" column="inhosp_myd_flag"/>
     </resultMap>
 
     <resultMap type="com.smartor.domain.PatMedOuthosp" id="PatMedOuthospResult">
@@ -654,6 +655,7 @@
         b.leavehospitaldistrictname,
         b.leavehospitaldistrictid,
         b.deptid,
+        b.inhosp_myd_flag,
         b.leaveldeptid
         FROM
         healthy_inhosp b
diff --git a/smartor/src/main/java/com/smartor/domain/MedicationDoseInfo.java b/smartor/src/main/java/com/smartor/domain/MedicationDoseInfo.java
new file mode 100644
index 0000000..1375e96
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/MedicationDoseInfo.java
@@ -0,0 +1,59 @@
+package com.smartor.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 鑽搧鍓傞噺淇℃伅瀵硅薄 medication_dose_info
+ *
+ * @author lihu
+ * @date 2026-07-17
+ */
+@Data
+@ApiModel("鑽搧鍓傞噺淇℃伅")
+public class MedicationDoseInfo extends BaseEntity
+        {
+private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭ID */
+    @ApiModelProperty("涓婚敭ID")
+        //鏁版嵁搴撹嚜澧炴敼鎴怈TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 鑽搧ID锛堝叧鑱攎edication_item.id锛� */
+    @ApiModelProperty("鑽搧ID锛堝叧鑱攎edication_item.id锛�")
+     @Excel(name = "鑽搧ID", readConverterExp = "鍏�=鑱攎edication_item.id")
+    private Long medicationItemId;
+
+    /** 鍓傞噺灏忓寘瑁呰浆鎹㈡瘮 */
+    @ApiModelProperty("鍓傞噺灏忓寘瑁呰浆鎹㈡瘮")
+     @Excel(name = "鍓傞噺灏忓寘瑁呰浆鎹㈡瘮")
+    private BigDecimal doseSmallPackageRation;
+
+    /** 鍓傞噺 */
+    @ApiModelProperty("鍓傞噺")
+     @Excel(name = "鍓傞噺")
+    private Long dose;
+
+    /** 鍓傞噺灏忓寘瑁呮暟閲� */
+    @ApiModelProperty("鍓傞噺灏忓寘瑁呮暟閲�")
+     @Excel(name = "鍓傞噺灏忓寘瑁呮暟閲�")
+    private Long doseSmallPackageNum;
+
+    /** 鍓傞噺鍗曚綅 */
+    @ApiModelProperty("鍓傞噺鍗曚綅")
+     @Excel(name = "鍓傞噺鍗曚綅")
+    private String doseUnit;
+
+    /** 鍓傞噺鍗曚綅绫诲瀷 */
+    @ApiModelProperty("鍓傞噺鍗曚綅绫诲瀷")
+     @Excel(name = "鍓傞噺鍗曚綅绫诲瀷")
+    private Long doseUnitType;
+
+        }
+
diff --git a/smartor/src/main/java/com/smartor/domain/MedicationItem.java b/smartor/src/main/java/com/smartor/domain/MedicationItem.java
new file mode 100644
index 0000000..6274553
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/MedicationItem.java
@@ -0,0 +1,168 @@
+package com.smartor.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 鑽搧淇℃伅瀵硅薄 medication_item
+ *
+ * @author lihu
+ * @date 2026-07-17
+ */
+@Data
+@ApiModel("鑽搧淇℃伅")
+public class MedicationItem extends BaseEntity
+        {
+private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭ID */
+    @ApiModelProperty("涓婚敭ID")
+        //鏁版嵁搴撹嚜澧炴敼鎴怈TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 鑽搧璇嗗埆鐮� */
+    @ApiModelProperty("鑽搧璇嗗埆鐮�")
+     @Excel(name = "鑽搧璇嗗埆鐮�")
+    private String identificationCode;
+
+    /** 浜旂瑪鐮� */
+    @ApiModelProperty("浜旂瑪鐮�")
+     @Excel(name = "浜旂瑪鐮�")
+    private String wbm;
+
+    /** 鑽搧閫氱敤鍚� */
+    @ApiModelProperty("鑽搧閫氱敤鍚�")
+     @Excel(name = "鑽搧閫氱敤鍚�")
+    private String medicationCommonName;
+
+    /** 鐢熶骇鍘傚鍚嶇О */
+    @ApiModelProperty("鐢熶骇鍘傚鍚嶇О")
+     @Excel(name = "鐢熶骇鍘傚鍚嶇О")
+    private String manufacturerName;
+
+    /** 鑽搧缂栫爜 */
+    @ApiModelProperty("鑽搧缂栫爜")
+     @Excel(name = "鑽搧缂栫爜")
+    private String itemCode;
+
+    /** 澶у皬鍖呰杞崲姣� */
+    @ApiModelProperty("澶у皬鍖呰杞崲姣�")
+     @Excel(name = "澶у皬鍖呰杞崲姣�")
+    private Long smallLargePackageRatio;
+
+    /** 鏈烘瀯ID */
+    @ApiModelProperty("鏈烘瀯ID")
+     @Excel(name = "鏈烘瀯ID")
+    private Long orgId;
+
+    /** 鑽搧鍚嶇О */
+    @ApiModelProperty("鑽搧鍚嶇О")
+     @Excel(name = "鑽搧鍚嶇О")
+    private String itemName;
+
+    /** 鑽搧绫诲瀷 */
+    @ApiModelProperty("鑽搧绫诲瀷")
+     @Excel(name = "鑽搧绫诲瀷")
+    private String medicationType;
+
+    /** 鎶楄弻鑽墿绛夌骇缂栫爜 */
+    @ApiModelProperty("鎶楄弻鑽墿绛夌骇缂栫爜")
+     @Excel(name = "鎶楄弻鑽墿绛夌骇缂栫爜")
+    private String antimicrobialGradeCode;
+
+    /** 鎵瑰噯鏂囧彿 */
+    @ApiModelProperty("鎵瑰噯鏂囧彿")
+     @Excel(name = "鎵瑰噯鏂囧彿")
+    private String licenseNumber;
+
+    /** 榛樿鐢ㄦ硶鍚嶇О */
+    @ApiModelProperty("榛樿鐢ㄦ硶鍚嶇О")
+     @Excel(name = "榛樿鐢ㄦ硶鍚嶇О")
+    private String defaultUsageName;
+
+    /** 鐗规畩鑽搧鍚嶇О */
+    @ApiModelProperty("鐗规畩鑽搧鍚嶇О")
+     @Excel(name = "鐗规畩鑽搧鍚嶇О")
+    private String specialDrugsName;
+
+    /** 鎶楄弻鑽墿绛夌骇鍚嶇О */
+    @ApiModelProperty("鎶楄弻鑽墿绛夌骇鍚嶇О")
+     @Excel(name = "鎶楄弻鑽墿绛夌骇鍚嶇О")
+    private String antimicrobialGradeName;
+
+    /** 閫氱敤鍚嶆嫾闊� */
+    @ApiModelProperty("閫氱敤鍚嶆嫾闊�")
+     @Excel(name = "閫氱敤鍚嶆嫾闊�")
+    private String commonPinyin;
+
+    /** 閫氱敤鍚嶄簲绗旂爜 */
+    @ApiModelProperty("閫氱敤鍚嶄簲绗旂爜")
+     @Excel(name = "閫氱敤鍚嶄簲绗旂爜")
+    private String commonWbm;
+
+    /** 鐢熶骇鍘傚ID */
+    @ApiModelProperty("鐢熶骇鍘傚ID")
+     @Excel(name = "鐢熶骇鍘傚ID")
+    private Long manufacturerId;
+
+    /** 榛樿鐢ㄦ硶ID */
+    @ApiModelProperty("榛樿鐢ㄦ硶ID")
+     @Excel(name = "榛樿鐢ㄦ硶ID")
+    private Long defaultUsageId;
+
+    /** 瑙勬牸 */
+    @ApiModelProperty("瑙勬牸")
+     @Excel(name = "瑙勬牸")
+    private String specification;
+
+    /** 灏忓寘瑁呭崟浣� */
+    @ApiModelProperty("灏忓寘瑁呭崟浣�")
+     @Excel(name = "灏忓寘瑁呭崟浣�")
+    private String smallPackageUnit;
+
+    /** 鑽搧ID锛堜笟鍔′富閿級 */
+    @ApiModelProperty("鑽搧ID锛堜笟鍔′富閿級")
+     @Excel(name = "鑽搧ID", readConverterExp = "涓�=鍔′富閿�")
+    private Long itemId;
+
+    /** 鐗规畩鑽搧缂栫爜 */
+    @ApiModelProperty("鐗规畩鑽搧缂栫爜")
+     @Excel(name = "鐗规畩鑽搧缂栫爜")
+    private String specialDrugsCode;
+
+    /** 鎷奸煶 */
+    @ApiModelProperty("鎷奸煶")
+     @Excel(name = "鎷奸煶")
+    private String pinyin;
+
+    /** 鍓傚瀷鍚嶇О */
+    @ApiModelProperty("鍓傚瀷鍚嶇О")
+     @Excel(name = "鍓傚瀷鍚嶇О")
+    private String doseFormName;
+
+    /** 澶у寘瑁呭崟浣� */
+    @ApiModelProperty("澶у寘瑁呭崟浣�")
+     @Excel(name = "澶у寘瑁呭崟浣�")
+    private String largePackageUnit;
+
+    /** 闆跺敭浠� */
+    @ApiModelProperty("闆跺敭浠�")
+     @Excel(name = "闆跺敭浠�")
+    private BigDecimal retailPrice;
+
+    /** 鐘舵�� */
+    @ApiModelProperty("鐘舵��")
+     @Excel(name = "鐘舵��")
+    private Long status;
+
+    @ApiModelProperty("鍓傞噺淇℃伅鍒楄〃")
+    private List<MedicationDoseInfo> doseInfoList;
+
+        }
+
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java b/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
index fb3bbf7..8dbfa4d 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -296,7 +296,7 @@
      * 绉戝闀挎湡浠诲姟锛屾槸鍚﹀鐞嗭細0鏈鐞�   1澶勭悊
      */
     @ApiModelProperty(value = "闀挎湡浠诲姟锛屾槸鍚﹀鐞嗭細0鏈鐞�   1澶勭悊鎴愬姛    2澶勭悊澶辫触 ")
-    private String  deptcheckFlag;
+    private String deptcheckFlag;
     /**
      * 鐥呭尯闀挎湡浠诲姟锛屾槸鍚﹀鐞嗭細0鏈鐞�   1澶勭悊
      */
@@ -312,7 +312,7 @@
      * 鍏ラ櫌绉戝闀挎湡浠诲姟锛屾槸鍚﹀鐞嗭細0鏈鐞�   1澶勭悊
      */
     @ApiModelProperty(value = "鍏ラ櫌绉戝闀挎湡浠诲姟锛屾槸鍚﹀鐞嗭細0鏈鐞�   1澶勭悊鎴愬姛    2澶勭悊澶辫触 ")
-    private String  inDeptcheckFlag;
+    private String inDeptcheckFlag;
 
     /**
      * 鍏ラ櫌鐥呭尯闀挎湡浠诲姟锛屾槸鍚﹀鐞嗭細0鏈鐞�   1澶勭悊
@@ -499,4 +499,11 @@
     @ApiModelProperty("闄㈠尯")
     @Excel(name = " 闄㈠尯 ")
     private String campusid;
+
+    /**
+     * '婊℃剰搴︽爣璇嗭細0鏈仛婊″害   1浣忛櫌婊″害搴�  2鍑洪櫌婊℃剰搴�  锛堝鏋滄棦瑕佸仛浣忛櫌锛屽張瑕佸仛鍑洪櫌锛屽垯鐢ㄢ��,鈥濆垎鍓诧紝渚嬪1,2锛�
+     */
+    @ApiModelProperty("'婊℃剰搴︽爣璇嗭細0鏈仛婊″害   1浣忛櫌婊″害搴�  2鍑洪櫌婊℃剰搴�  锛堝鏋滄棦瑕佸仛浣忛櫌锛屽張瑕佸仛鍑洪櫌锛屽垯鐢ㄢ��,鈥濆垎鍓诧紝渚嬪1,2锛�")
+    @Excel(name = " '婊℃剰搴︽爣璇嗭細0鏈仛婊″害   1浣忛櫌婊″害搴�  2鍑洪櫌婊℃剰搴�  锛堝鏋滄棦瑕佸仛浣忛櫌锛屽張瑕佸仛鍑洪櫌锛屽垯鐢ㄢ��,鈥濆垎鍓诧紝渚嬪1,2锛� ")
+    private String inhospMydFlag;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceAppointRecord.java b/smartor/src/main/java/com/smartor/domain/ServiceAppointRecord.java
new file mode 100644
index 0000000..399b276
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/ServiceAppointRecord.java
@@ -0,0 +1,453 @@
+package com.smartor.domain;
+
+import com.google.gson.annotations.SerializedName;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 棰勭害璁板綍瀵硅薄 service_appoint_record
+ *
+ * @author lihu
+ * @date 2026-07-06
+ */
+@Data
+@ApiModel("棰勭害璁板綍")
+public class ServiceAppointRecord extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭ID
+     */
+    @ApiModelProperty("涓婚敭ID")
+    //鏁版嵁搴撹嚜澧炴敼鎴怈TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 棰勭害璁板綍搴忓彿
+     */
+    @ApiModelProperty("棰勭害璁板綍搴忓彿")
+    @Excel(name = "棰勭害璁板綍搴忓彿")
+    private String appointRecSn;
+
+    /**
+     * 鎹㈣瘖棰勭害璁板綍搴忓彿
+     */
+    @ApiModelProperty("鎹㈣瘖棰勭害璁板綍搴忓彿")
+    @Excel(name = "鎹㈣瘖棰勭害璁板綍搴忓彿")
+    private String changeAppointRecSn;
+
+    /**
+     * 缁勭粐绉戝浠g爜
+     */
+    @ApiModelProperty("缁勭粐绉戝浠g爜")
+    @Excel(name = "缁勭粐绉戝浠g爜")
+    private String orgCode;
+
+    /**
+     * 鐥呬汉妗f搴忓彿
+     */
+    @ApiModelProperty("鐥呬汉妗f搴忓彿")
+    @Excel(name = "鐥呬汉妗f搴忓彿")
+    private String patFileSn;
+
+    /**
+     * 鐥呬汉浠嬭川搴忓彿
+     */
+    @ApiModelProperty("鐥呬汉浠嬭川搴忓彿")
+    @Excel(name = "鐥呬汉浠嬭川搴忓彿")
+    private String patMediaSn;
+
+    /**
+     * 鐥呬汉浠嬭川鍙风爜
+     */
+    @ApiModelProperty("鐥呬汉浠嬭川鍙风爜")
+    @Excel(name = "鐥呬汉浠嬭川鍙风爜")
+    private String patMediaNum;
+
+    /**
+     * 鐥呬汉绫诲埆搴忓彿
+     */
+    @ApiModelProperty("鐥呬汉绫诲埆搴忓彿")
+    @Excel(name = "鐥呬汉绫诲埆搴忓彿")
+    private String patCateSn;
+
+    /**
+     * 鐥呬汉鎬ц川搴忓彿
+     */
+    @ApiModelProperty("鐥呬汉鎬ц川搴忓彿")
+    @Excel(name = "鐥呬汉鎬ц川搴忓彿")
+    private String patNatureSn;
+
+    /**
+     * 鐥呬汉妗f濮撳悕
+     */
+    @ApiModelProperty("鐥呬汉妗f濮撳悕")
+    @Excel(name = "鐥呬汉妗f濮撳悕")
+    private String patFileName;
+
+    /**
+     * 鐥呬汉妗f鎬у埆
+     */
+    @ApiModelProperty("鐥呬汉妗f鎬у埆")
+    @Excel(name = "鐥呬汉妗f鎬у埆")
+    private String patFileGender;
+
+    /**
+     * 鐥呬汉棰勭害骞撮緞
+     */
+    @ApiModelProperty("鐥呬汉棰勭害骞撮緞")
+    @Excel(name = "鐥呬汉棰勭害骞撮緞")
+    private String patAge;
+
+    /**
+     * 鐥呬汉鍑虹敓鏃ユ湡
+     */
+    @ApiModelProperty("鐥呬汉鍑虹敓鏃ユ湡")
+    @Excel(name = "鐥呬汉鍑虹敓鏃ユ湡")
+    private String patBirthday;
+
+    /**
+     * 鐥呬汉璇佷欢绫诲瀷缂栫爜
+     */
+    @ApiModelProperty("鐥呬汉璇佷欢绫诲瀷缂栫爜")
+    @Excel(name = "鐥呬汉璇佷欢绫诲瀷缂栫爜")
+    private String patCardTypeCode;
+
+    /**
+     * 鐥呬汉璇佷欢绫诲瀷
+     */
+    @ApiModelProperty("鐥呬汉璇佷欢绫诲瀷")
+    @Excel(name = "鐥呬汉璇佷欢绫诲瀷")
+    private String patCardType;
+
+    /**
+     * 鐥呬汉璇佷欢鍙风爜
+     */
+    @ApiModelProperty("鐥呬汉璇佷欢鍙风爜")
+    @Excel(name = "鐥呬汉璇佷欢鍙风爜")
+    private String patIdCardNum;
+
+    /**
+     * 鐥呬汉鑱旂郴鍦板潃
+     */
+    @ApiModelProperty("鐥呬汉鑱旂郴鍦板潃")
+    @Excel(name = "鐥呬汉鑱旂郴鍦板潃")
+    private String patAddr;
+
+    /**
+     * 鐥呬汉鑱旂郴鐢佃瘽
+     */
+    @ApiModelProperty("鐥呬汉鑱旂郴鐢佃瘽")
+    @Excel(name = "鐥呬汉鑱旂郴鐢佃瘽")
+    private String patTel;
+
+    /**
+     * 鐥呬汉鏉ユ簮缂栫爜
+     */
+    @ApiModelProperty("鐥呬汉鏉ユ簮缂栫爜")
+    @Excel(name = "鐥呬汉鏉ユ簮缂栫爜")
+    private String patWayCode;
+
+    /**
+     * 鐥呬汉鏉ユ簮
+     */
+    @ApiModelProperty("鐥呬汉鏉ユ簮")
+    @Excel(name = "鐥呬汉鏉ユ簮")
+    private String patWay;
+
+    /**
+     * 棰勭害绫诲瀷搴忓彿
+     */
+    @ApiModelProperty("棰勭害绫诲瀷搴忓彿")
+    @Excel(name = "棰勭害绫诲瀷搴忓彿")
+    private String appointTypeSn;
+
+    /**
+     * 棰勭害鎿嶄綔鏃ユ湡
+     */
+    @ApiModelProperty("棰勭害鎿嶄綔鏃ユ湡")
+    @Excel(name = "棰勭害鎿嶄綔鏃ユ湡")
+    private Date appointDate;
+
+    /**
+     * 棰勭害鎿嶄綔浜篿d
+     */
+    @ApiModelProperty("棰勭害鎿嶄綔浜篿d")
+    @Excel(name = "棰勭害鎿嶄綔浜篿d")
+    private String appointOperatorId;
+
+    /**
+     * 棰勭害鎿嶄綔浜哄鍚�
+     */
+    @ApiModelProperty("棰勭害鎿嶄綔浜哄鍚�")
+    @Excel(name = "棰勭害鎿嶄綔浜哄鍚�")
+    private String appointOperatorName;
+
+    /**
+     * 棰勭害鎸傚彿鏃ユ湡
+     */
+    @ApiModelProperty("棰勭害鎸傚彿鏃ユ湡")
+    @Excel(name = "棰勭害鎸傚彿鏃ユ湡")
+    private Date appointRegistDate;
+
+    /**
+     * 鎸傚彿鎺掔彮搴忓彿
+     */
+    @ApiModelProperty("鎸傚彿鎺掔彮搴忓彿")
+    @Excel(name = "鎸傚彿鎺掔彮搴忓彿")
+    private String registerScheduleSn;
+
+    /**
+     * 闂ㄨ瘖绫诲埆搴忓彿
+     */
+    @ApiModelProperty("闂ㄨ瘖绫诲埆搴忓彿")
+    @Excel(name = "闂ㄨ瘖绫诲埆搴忓彿")
+    private String outpatCateSn;
+
+    /**
+     * 闂ㄨ瘖绫诲埆鍚嶇О
+     */
+    @ApiModelProperty("闂ㄨ瘖绫诲埆鍚嶇О")
+    @Excel(name = "闂ㄨ瘖绫诲埆鍚嶇О")
+    private String outpatCateName;
+
+    /**
+     * 鎸傚彿绉戝缂栫爜
+     */
+    @ApiModelProperty("鎸傚彿绉戝缂栫爜")
+    @Excel(name = "鎸傚彿绉戝缂栫爜")
+    private String registDeptCode;
+
+    /**
+     * 鎸傚彿绉戝鍚嶇О
+     */
+    @ApiModelProperty("鎸傚彿绉戝鍚嶇О")
+    @Excel(name = "鎸傚彿绉戝鍚嶇О")
+    private String registDeptName;
+
+    /**
+     * 绉戝鎷奸煶缂栫爜
+     */
+    @ApiModelProperty("绉戝鎷奸煶缂栫爜")
+    @Excel(name = "绉戝鎷奸煶缂栫爜")
+    private String deptPinyinCode;
+
+    /**
+     * 鎸傚彿鍖荤敓浠g爜
+     */
+    @ApiModelProperty("鎸傚彿鍖荤敓浠g爜")
+    @Excel(name = "鎸傚彿鍖荤敓浠g爜")
+    private String registDoctCode;
+
+    /**
+     * 鎸傚彿鍖荤敓濮撳悕
+     */
+    @ApiModelProperty("鎸傚彿鍖荤敓濮撳悕")
+    @Excel(name = "鎸傚彿鍖荤敓濮撳悕")
+    private String registDoctName;
+
+    /**
+     * 鑱屽伐鎷奸煶缂栫爜
+     */
+    @ApiModelProperty("鑱屽伐鎷奸煶缂栫爜")
+    @Excel(name = "鑱屽伐鎷奸煶缂栫爜")
+    private String staffPinyinCode;
+
+    /**
+     * 鎸傚彿鏃堕棿绫诲埆
+     */
+    @ApiModelProperty("鎸傚彿鏃堕棿绫诲埆")
+    @Excel(name = "鎸傚彿鏃堕棿绫诲埆")
+    private Long registTimeCate;
+
+    /**
+     * 鐥呬汉鎸傚彿搴忓彿
+     */
+    @ApiModelProperty("鐥呬汉鎸傚彿搴忓彿")
+    @Excel(name = "鐥呬汉鎸傚彿搴忓彿")
+    private Long patiRegistSn;
+
+    /**
+     * 棰勭害鎸傚彿璐圭敤
+     */
+    @ApiModelProperty("棰勭害鎸傚彿璐圭敤")
+    @Excel(name = "棰勭害鎸傚彿璐圭敤")
+    private BigDecimal scheduleRegistCharge;
+
+    /**
+     * 鎸傚彿璁板綍搴忓彿
+     */
+    @ApiModelProperty("鎸傚彿璁板綍搴忓彿")
+    @Excel(name = "鎸傚彿璁板綍搴忓彿")
+    private String registRecSn;
+
+    /**
+     * 鐧昏鐢ㄦ埛搴忓彿
+     */
+    @ApiModelProperty("鐧昏鐢ㄦ埛搴忓彿")
+    @Excel(name = "鐧昏鐢ㄦ埛搴忓彿")
+    private String regUserSn;
+
+    /**
+     * 鐧昏鐢ㄦ埛濮撳悕
+     */
+    @ApiModelProperty("鐧昏鐢ㄦ埛濮撳悕")
+    @Excel(name = "鐧昏鐢ㄦ埛濮撳悕")
+    private String regUserName;
+
+    /**
+     * 鐧昏鎿嶄綔鏃堕棿
+     */
+    @ApiModelProperty("鐧昏鎿嶄綔鏃堕棿")
+    @Excel(name = "鐧昏鎿嶄綔鏃堕棿")
+    private Date regOptTime;
+
+    /**
+     * 鎾ら攢鐢ㄦ埛搴忓彿
+     */
+    @ApiModelProperty("鎾ら攢鐢ㄦ埛搴忓彿")
+    @Excel(name = "鎾ら攢鐢ㄦ埛搴忓彿")
+    private String revokeUserSn;
+
+    /**
+     * 鎾ら攢浜哄鍚�
+     */
+    @ApiModelProperty("鎾ら攢浜哄鍚�")
+    @Excel(name = "鎾ら攢浜哄鍚�")
+    private String revokeUserName;
+
+    /**
+     * 鎾ら攢鎿嶄綔鏃堕棿
+     */
+    @ApiModelProperty("鎾ら攢鎿嶄綔鏃堕棿")
+    @Excel(name = "鎾ら攢鎿嶄綔鏃堕棿")
+    private Date revokeOptTime;
+
+    /**
+     * 閫�鍙锋椂闂�
+     */
+    @ApiModelProperty("閫�鍙锋椂闂�")
+    @Excel(name = "閫�鍙锋椂闂�")
+    private Date withdrawalTime;
+
+    /**
+     * 棰勭害鐘舵�佹爣蹇�(0:宸查绾� 1:宸叉寕鍙� 2:宸查��鍙� 3:宸插氨璇� -1:鐥呬汉鍙栨秷 -2:鍖婚櫌鍙栨秷 -3:鎺掔彮鍋滆瘖)
+     */
+    @ApiModelProperty("棰勭害鐘舵�佹爣蹇�(0:宸查绾� 1:宸叉寕鍙� 2:宸查��鍙� 3:宸插氨璇� -1:鐥呬汉鍙栨秷 -2:鍖婚櫌鍙栨秷 -3:鎺掔彮鍋滆瘖)")
+    @Excel(name = "棰勭害鐘舵�佹爣蹇�(0:宸查绾� 1:宸叉寕鍙� 2:宸查��鍙� 3:宸插氨璇� -1:鐥呬汉鍙栨秷 -2:鍖婚櫌鍙栨秷 -3:鎺掔彮鍋滆瘖)")
+    private Long scheduleStatusFlag;
+
+    /**
+     * 棰勭害澶囨敞璇存槑
+     */
+    @ApiModelProperty("棰勭害澶囨敞璇存槑")
+    @Excel(name = "棰勭害澶囨敞璇存槑")
+    private String scheduleMemoDesc;
+
+    /**
+     * 棰勭害鍑瘉鍙风爜
+     */
+    @ApiModelProperty("棰勭害鍑瘉鍙风爜")
+    @Excel(name = "棰勭害鍑瘉鍙风爜")
+    private String scheduleCredenceNum;
+
+    /**
+     * 棰勮灏辫瘖鏃堕棿
+     */
+    @ApiModelProperty("棰勮灏辫瘖鏃堕棿")
+    @Excel(name = "棰勮灏辫瘖鏃堕棿")
+    private String registTimeRange;
+
+    /**
+     * 鍏蜂綋鏄庣粏琛ㄦ槑缁嗗簭鍙�
+     */
+    @ApiModelProperty("鍏蜂綋鏄庣粏琛ㄦ槑缁嗗簭鍙�")
+    @Excel(name = "鍏蜂綋鏄庣粏琛ㄦ槑缁嗗簭鍙�")
+    private String scheduleDetailSn;
+
+    /**
+     * 灏辫瘖鏃堕棿
+     */
+    @ApiModelProperty("灏辫瘖鏃堕棿")
+    @Excel(name = "灏辫瘖鏃堕棿")
+    @SerializedName("treatDate")
+    private Date treatDate;
+
+    /**
+     * 灏辫瘖鍖荤敓缂栫爜
+     */
+    @ApiModelProperty("灏辫瘖鍖荤敓缂栫爜")
+    @Excel(name = "灏辫瘖鍖荤敓缂栫爜")
+    private String treatDoctCode;
+
+    /**
+     * 灏辫瘖鍖荤敓鍚嶇О
+     */
+    @ApiModelProperty("灏辫瘖鍖荤敓鍚嶇О")
+    @Excel(name = "灏辫瘖鍖荤敓鍚嶇О")
+    private String treatDoctName;
+
+    /**
+     * 棰勭害娓犻亾缂栫爜
+     */
+    @ApiModelProperty("棰勭害娓犻亾缂栫爜")
+    @Excel(name = "棰勭害娓犻亾缂栫爜")
+    private String regWayCode;
+
+    /**
+     * 棰勭害娓犻亾
+     */
+    @ApiModelProperty("棰勭害娓犻亾")
+    @Excel(name = "棰勭害娓犻亾")
+    private String regWay;
+
+    /**
+     * 棰勭害绯荤粺缂栫爜
+     */
+    @ApiModelProperty("棰勭害绯荤粺缂栫爜")
+    @Excel(name = "棰勭害绯荤粺缂栫爜")
+    private String regSystemWayCode;
+
+    /**
+     * 棰勭害绯荤粺
+     */
+    @ApiModelProperty("棰勭害绯荤粺")
+    @Excel(name = "棰勭害绯荤粺")
+    private String regSystemWay;
+
+    /**
+     * 鍒濊瘖澶嶈瘖鍒ゅ埆锛�0鍒濊瘖 1澶嶈瘖锛�
+     */
+    @ApiModelProperty("鍒濊瘖澶嶈瘖鍒ゅ埆锛�0鍒濊瘖 1澶嶈瘖锛�")
+    @Excel(name = "鍒濊瘖澶嶈瘖鍒ゅ埆", readConverterExp = "0=鍒濊瘖,1=澶嶈瘖")
+    private Long visitFlag;
+
+    /**
+     * 鐭俊鍙戦�佹搷浣滀汉id
+     */
+    @ApiModelProperty("鐭俊鍙戦�佹搷浣滀汉id")
+    @Excel(name = "鐭俊鍙戦�佹搷浣滀汉id")
+    private String senderId;
+
+    /**
+     * 鐭俊鍙戦�佹搷浣滀汉濮撳悕
+     */
+    @ApiModelProperty("鐭俊鍙戦�佹搷浣滀汉濮撳悕")
+    @Excel(name = "鐭俊鍙戦�佹搷浣滀汉濮撳悕")
+    private String senderName;
+
+    /**
+     * 鐭俊鍙戦�佹椂闂�
+     */
+    @ApiModelProperty("鐭俊鍙戦�佹椂闂�")
+    @Excel(name = "鐭俊鍙戦�佹椂闂�")
+    private Date sendTime;
+
+}
+
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceOutPath.java b/smartor/src/main/java/com/smartor/domain/ServiceOutPath.java
index 2764b85..bf18264 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceOutPath.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceOutPath.java
@@ -64,10 +64,24 @@
     @ApiModelProperty(value = "鍒犻櫎鏍囪")
     private String delFlag;
 
-
     @ApiModelProperty(value = "杩涘埗")
     private String radix;
 
+    @ApiModelProperty(value = "澶栭摼鍦板潃")
+    private String url;
+
+    @ApiModelProperty(value = "鐥呭尯缂栫爜")
+    private String wardCode;
+
+    @ApiModelProperty(value = "鐥呭尯鍚嶇О")
+    private String wardName;
+
+    @ApiModelProperty(value = "绉戝缂栫爜")
+    private String deptCode;
+
+    @ApiModelProperty(value = "绉戝鍚嶇О")
+    private String deptName;
+
     @ApiModelProperty(value = "鐥呬汉淇℃伅")
     private PatArchive patArchive;
 
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java b/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java
index 92c5897..5a19c92 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java
@@ -46,10 +46,16 @@
     private String param4;
 
     /**
-     * patfrom
+     * 鎮h�呮潵婧�
      */
     @Excel(name = "patfrom  ")
     @ApiModelProperty(value = "patfrom")
     private String patfrom = "0";
 
+    /**
+     * 绫诲瀷锛�0鍔犲瘑   1涓嶅姞瀵�
+     */
+    @ApiModelProperty(value = "绫诲瀷锛�0鍔犲瘑   1涓嶅姞瀵�")
+    private String type = "0";
+
 }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java b/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
index 12ca6d4..174128d 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
@@ -29,9 +29,9 @@
     private String taskDesc;
 
     /**
-     * pageSize
+     * 鏄惁鏄暱鏈熶换鍔� 0锛氫复鏃朵换鍔�    1锛氶暱鏈熶换鍔�   2鍥哄畾浠诲姟   3寰幆浠诲姟
      */
-    @ApiModelProperty("鏄惁鏄暱鏈熶换鍔� 0锛氫笉鏄�    1锛氭槸")
+    @ApiModelProperty("鏄惁鏄暱鏈熶换鍔� 0锛氫复鏃朵换鍔�    1锛氶暱鏈熶换鍔�   2鍥哄畾浠诲姟   3寰幆浠诲姟")
     private Integer longTask = 0;
 
     /**
diff --git a/smartor/src/main/java/com/smartor/mapper/MedicationDoseInfoMapper.java b/smartor/src/main/java/com/smartor/mapper/MedicationDoseInfoMapper.java
new file mode 100644
index 0000000..98f0b74
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/MedicationDoseInfoMapper.java
@@ -0,0 +1,63 @@
+package com.smartor.mapper;
+
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import com.smartor.domain.MedicationDoseInfo;
+
+/**
+ * 鑽搧鍓傞噺淇℃伅Mapper鎺ュ彛
+ *
+ * @author lihu
+ * @date 2026-07-17
+ */
+@Mapper
+public interface MedicationDoseInfoMapper
+{
+    /**
+     * 鏌ヨ鑽搧鍓傞噺淇℃伅
+     *
+     * @param id 鑽搧鍓傞噺淇℃伅涓婚敭
+     * @return 鑽搧鍓傞噺淇℃伅
+     */
+    public MedicationDoseInfo selectMedicationDoseInfoById(Long id);
+
+    /**
+     * 鏌ヨ鑽搧鍓傞噺淇℃伅鍒楄〃
+     *
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 鑽搧鍓傞噺淇℃伅闆嗗悎
+     */
+    public List<MedicationDoseInfo> selectMedicationDoseInfoList(MedicationDoseInfo medicationDoseInfo);
+
+    /**
+     * 鏂板鑽搧鍓傞噺淇℃伅
+     *
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertMedicationDoseInfo(MedicationDoseInfo medicationDoseInfo);
+
+    /**
+     * 淇敼鑽搧鍓傞噺淇℃伅
+     *
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateMedicationDoseInfo(MedicationDoseInfo medicationDoseInfo);
+
+    /**
+     * 鍒犻櫎鑽搧鍓傞噺淇℃伅
+     *
+     * @param id 鑽搧鍓傞噺淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteMedicationDoseInfoById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎鑽搧鍓傞噺淇℃伅
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteMedicationDoseInfoByIds(Long[] ids);
+}
diff --git a/smartor/src/main/java/com/smartor/mapper/MedicationItemMapper.java b/smartor/src/main/java/com/smartor/mapper/MedicationItemMapper.java
new file mode 100644
index 0000000..e09c3a9
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/MedicationItemMapper.java
@@ -0,0 +1,63 @@
+package com.smartor.mapper;
+
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import com.smartor.domain.MedicationItem;
+
+/**
+ * 鑽搧淇℃伅Mapper鎺ュ彛
+ *
+ * @author lihu
+ * @date 2026-07-17
+ */
+@Mapper
+public interface MedicationItemMapper
+{
+    /**
+     * 鏌ヨ鑽搧淇℃伅
+     *
+     * @param id 鑽搧淇℃伅涓婚敭
+     * @return 鑽搧淇℃伅
+     */
+    public MedicationItem selectMedicationItemById(Long id);
+
+    /**
+     * 鏌ヨ鑽搧淇℃伅鍒楄〃
+     *
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 鑽搧淇℃伅闆嗗悎
+     */
+    public List<MedicationItem> selectMedicationItemList(MedicationItem medicationItem);
+
+    /**
+     * 鏂板鑽搧淇℃伅
+     *
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertMedicationItem(MedicationItem medicationItem);
+
+    /**
+     * 淇敼鑽搧淇℃伅
+     *
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateMedicationItem(MedicationItem medicationItem);
+
+    /**
+     * 鍒犻櫎鑽搧淇℃伅
+     *
+     * @param id 鑽搧淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteMedicationItemById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎鑽搧淇℃伅
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteMedicationItemByIds(Long[] ids);
+}
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceAppointRecordMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceAppointRecordMapper.java
new file mode 100644
index 0000000..7d51d2c
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceAppointRecordMapper.java
@@ -0,0 +1,63 @@
+package com.smartor.mapper;
+
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import com.smartor.domain.ServiceAppointRecord;
+
+/**
+ * 棰勭害璁板綍Mapper鎺ュ彛
+ *
+ * @author lihu
+ * @date 2026-07-06
+ */
+@Mapper
+public interface ServiceAppointRecordMapper
+{
+    /**
+     * 鏌ヨ棰勭害璁板綍
+     *
+     * @param id 棰勭害璁板綍涓婚敭
+     * @return 棰勭害璁板綍
+     */
+    public ServiceAppointRecord selectServiceAppointRecordById(Long id);
+
+    /**
+     * 鏌ヨ棰勭害璁板綍鍒楄〃
+     *
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 棰勭害璁板綍闆嗗悎
+     */
+    public List<ServiceAppointRecord> selectServiceAppointRecordList(ServiceAppointRecord serviceAppointRecord);
+
+    /**
+     * 鏂板棰勭害璁板綍
+     *
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 缁撴灉
+     */
+    public int insertServiceAppointRecord(ServiceAppointRecord serviceAppointRecord);
+
+    /**
+     * 淇敼棰勭害璁板綍
+     *
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 缁撴灉
+     */
+    public int updateServiceAppointRecord(ServiceAppointRecord serviceAppointRecord);
+
+    /**
+     * 鍒犻櫎棰勭害璁板綍
+     *
+     * @param id 棰勭害璁板綍涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteServiceAppointRecordById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎棰勭害璁板綍
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteServiceAppointRecordByIds(Long[] ids);
+}
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
index aa5a813..8d6e806 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -10,6 +10,7 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -231,9 +232,10 @@
 
     /**
      * 缁熻闂鐨勯�夐」鐨勭櫨鍒嗘瘮
+     *
      * @param taskIds
      * @return
      */
-    List<ServiceSubtaskDetailRatioExport> statQuestionOption(@Param("taskIds") List<Long> taskIds);
+    List<ServiceSubtaskDetailRatioExport> statQuestionOption(@Param("taskIds") List<Long> taskIds, @Param("startOutHospTime") Date startOutHospTime, @Param("endOutHospTime") Date endOutHospTime);
 
 }
diff --git a/smartor/src/main/java/com/smartor/service/IMedicationDoseInfoService.java b/smartor/src/main/java/com/smartor/service/IMedicationDoseInfoService.java
new file mode 100644
index 0000000..df2d12c
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/IMedicationDoseInfoService.java
@@ -0,0 +1,61 @@
+package com.smartor.service;
+
+import java.util.List;
+import com.smartor.domain.MedicationDoseInfo;
+
+/**
+ * 鑽搧鍓傞噺淇℃伅Service鎺ュ彛
+ * 
+ * @author lihu
+ * @date 2026-07-17
+ */
+public interface IMedicationDoseInfoService 
+{
+    /**
+     * 鏌ヨ鑽搧鍓傞噺淇℃伅
+     * 
+     * @param id 鑽搧鍓傞噺淇℃伅涓婚敭
+     * @return 鑽搧鍓傞噺淇℃伅
+     */
+    public MedicationDoseInfo selectMedicationDoseInfoById(Long id);
+
+    /**
+     * 鏌ヨ鑽搧鍓傞噺淇℃伅鍒楄〃
+     * 
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 鑽搧鍓傞噺淇℃伅闆嗗悎
+     */
+    public List<MedicationDoseInfo> selectMedicationDoseInfoList(MedicationDoseInfo medicationDoseInfo);
+
+    /**
+     * 鏂板鑽搧鍓傞噺淇℃伅
+     * 
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertMedicationDoseInfo(MedicationDoseInfo medicationDoseInfo);
+
+    /**
+     * 淇敼鑽搧鍓傞噺淇℃伅
+     * 
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateMedicationDoseInfo(MedicationDoseInfo medicationDoseInfo);
+
+    /**
+     * 鎵归噺鍒犻櫎鑽搧鍓傞噺淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鑽搧鍓傞噺淇℃伅涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteMedicationDoseInfoByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎鑽搧鍓傞噺淇℃伅淇℃伅
+     * 
+     * @param id 鑽搧鍓傞噺淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteMedicationDoseInfoById(Long id);
+}
diff --git a/smartor/src/main/java/com/smartor/service/IMedicationItemService.java b/smartor/src/main/java/com/smartor/service/IMedicationItemService.java
new file mode 100644
index 0000000..b33da4d
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/IMedicationItemService.java
@@ -0,0 +1,61 @@
+package com.smartor.service;
+
+import java.util.List;
+import com.smartor.domain.MedicationItem;
+
+/**
+ * 鑽搧淇℃伅Service鎺ュ彛
+ * 
+ * @author lihu
+ * @date 2026-07-17
+ */
+public interface IMedicationItemService 
+{
+    /**
+     * 鏌ヨ鑽搧淇℃伅
+     * 
+     * @param id 鑽搧淇℃伅涓婚敭
+     * @return 鑽搧淇℃伅
+     */
+    public MedicationItem selectMedicationItemById(Long id);
+
+    /**
+     * 鏌ヨ鑽搧淇℃伅鍒楄〃
+     * 
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 鑽搧淇℃伅闆嗗悎
+     */
+    public List<MedicationItem> selectMedicationItemList(MedicationItem medicationItem);
+
+    /**
+     * 鏂板鑽搧淇℃伅
+     * 
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertMedicationItem(MedicationItem medicationItem);
+
+    /**
+     * 淇敼鑽搧淇℃伅
+     * 
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateMedicationItem(MedicationItem medicationItem);
+
+    /**
+     * 鎵归噺鍒犻櫎鑽搧淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鑽搧淇℃伅涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteMedicationItemByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎鑽搧淇℃伅淇℃伅
+     * 
+     * @param id 鑽搧淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteMedicationItemById(Long id);
+}
diff --git a/smartor/src/main/java/com/smartor/service/IServiceAppointRecordService.java b/smartor/src/main/java/com/smartor/service/IServiceAppointRecordService.java
new file mode 100644
index 0000000..c4c929f
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/IServiceAppointRecordService.java
@@ -0,0 +1,61 @@
+package com.smartor.service;
+
+import java.util.List;
+import com.smartor.domain.ServiceAppointRecord;
+
+/**
+ * 棰勭害璁板綍Service鎺ュ彛
+ * 
+ * @author lihu
+ * @date 2026-07-06
+ */
+public interface IServiceAppointRecordService 
+{
+    /**
+     * 鏌ヨ棰勭害璁板綍
+     * 
+     * @param id 棰勭害璁板綍涓婚敭
+     * @return 棰勭害璁板綍
+     */
+    public ServiceAppointRecord selectServiceAppointRecordById(Long id);
+
+    /**
+     * 鏌ヨ棰勭害璁板綍鍒楄〃
+     * 
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 棰勭害璁板綍闆嗗悎
+     */
+    public List<ServiceAppointRecord> selectServiceAppointRecordList(ServiceAppointRecord serviceAppointRecord);
+
+    /**
+     * 鏂板棰勭害璁板綍
+     * 
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 缁撴灉
+     */
+    public int insertServiceAppointRecord(ServiceAppointRecord serviceAppointRecord);
+
+    /**
+     * 淇敼棰勭害璁板綍
+     * 
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 缁撴灉
+     */
+    public int updateServiceAppointRecord(ServiceAppointRecord serviceAppointRecord);
+
+    /**
+     * 鎵归噺鍒犻櫎棰勭害璁板綍
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑棰勭害璁板綍涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteServiceAppointRecordByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎棰勭害璁板綍淇℃伅
+     * 
+     * @param id 棰勭害璁板綍涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteServiceAppointRecordById(Long id);
+}
diff --git a/smartor/src/main/java/com/smartor/service/IServiceOutPathService.java b/smartor/src/main/java/com/smartor/service/IServiceOutPathService.java
index f7efea9..fb50d31 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceOutPathService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceOutPathService.java
@@ -5,15 +5,15 @@
 
 /**
  * 涓婚敭Service鎺ュ彛
- * 
+ *
  * @author lihu
  * @date 2024-11-04
  */
-public interface IServiceOutPathService 
+public interface IServiceOutPathService
 {
     /**
      * 鏌ヨ涓婚敭
-     * 
+     *
      * @param id 涓婚敭涓婚敭
      * @return 涓婚敭
      */
@@ -21,7 +21,7 @@
 
     /**
      * 鏌ヨ涓婚敭鍒楄〃
-     * 
+     *
      * @param serviceOutPath 涓婚敭
      * @return 涓婚敭闆嗗悎
      */
@@ -29,15 +29,23 @@
 
     /**
      * 鏂板涓婚敭
-     * 
+     *
      * @param serviceOutPath 涓婚敭
      * @return 缁撴灉
      */
     public int insertServiceOutPath(ServiceOutPath serviceOutPath);
 
     /**
+     * 鏂板涓婚敭
+     *
+     * @param serviceOutPath 涓婚敭
+     * @return 缁撴灉
+     */
+    public String addOutPath(ServiceOutPath serviceOutPath);
+
+    /**
      * 淇敼涓婚敭
-     * 
+     *
      * @param serviceOutPath 涓婚敭
      * @return 缁撴灉
      */
@@ -45,7 +53,7 @@
 
     /**
      * 鎵归噺鍒犻櫎涓婚敭
-     * 
+     *
      * @param ids 闇�瑕佸垹闄ょ殑涓婚敭涓婚敭闆嗗悎
      * @return 缁撴灉
      */
@@ -53,7 +61,7 @@
 
     /**
      * 鍒犻櫎涓婚敭淇℃伅
-     * 
+     *
      * @param id 涓婚敭涓婚敭
      * @return 缁撴灉
      */
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java b/smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java
index cb822b1..666e059 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java
@@ -1,6 +1,7 @@
 package com.smartor.service;
 
 import afu.org.checkerframework.checker.oigj.qual.O;
+import com.smartor.domain.MedicationItem;
 import com.smartor.domain.ServiceSLTDDeptReqVO;
 import com.smartor.domain.ServiceSLTDInhospReqVO;
 import com.smartor.domain.ServiceSLTDInhospResDTO;
@@ -40,6 +41,14 @@
     List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO);
 
     /**
+     * 閲囬泦鍦ㄩ櫌鎮h�呯敤鑽俊鎭�
+     *
+     * @param reqVO 鏌ヨ璇锋眰鍙傛暟
+     * @return 鑽搧鍒楄〃
+     */
+    Boolean queryMedicationItemList(ServiceSLTDInhospReqVO reqVO);
+
+    /**
      * 閲囬泦鍖婚櫌鐢ㄦ埛淇℃伅
      *
      * @param reqVO
@@ -70,8 +79,6 @@
      * }
      */
     Boolean queryDeptWardAreaInfoList(ServiceSLTDDeptReqVO serviceSLTDDeptReqVO);
-
-    public void aa(Map<String, Object> map);
 
 
 }
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
index daa0128..7239987 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -8,6 +8,7 @@
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -196,5 +197,5 @@
      * @param taskIds
      * @return
      */
-    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds);
+    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds, Date startOutHospTime, Date endOutHospTime);
 }
diff --git a/smartor/src/main/java/com/smartor/service/IXHGatherPatArchiveService.java b/smartor/src/main/java/com/smartor/service/IXHGatherPatArchiveService.java
index f3dccd3..a901bd5 100644
--- a/smartor/src/main/java/com/smartor/service/IXHGatherPatArchiveService.java
+++ b/smartor/src/main/java/com/smartor/service/IXHGatherPatArchiveService.java
@@ -18,5 +18,14 @@
      */
     public void getInHospDataGather(String cry, LocalDateTime startTime, LocalDateTime endTime);
 
+    /**
+     * 鑾峰彇棰勭害鍋滆瘖璁板綍淇℃伅
+     *
+     * @param cry       鍑哄叆闄㈢被鍨嬶細0-鍏ラ櫌锛�1-鍑洪櫌 2,棰勭害璁板綍
+     * @param startTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     */
+    public void getAppointRecordInfo(String cry, LocalDateTime startTime, LocalDateTime endTime);
+
 
 }
diff --git a/smartor/src/main/java/com/smartor/service/impl/MedicationDoseInfoServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/MedicationDoseInfoServiceImpl.java
new file mode 100644
index 0000000..0f14ea0
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/impl/MedicationDoseInfoServiceImpl.java
@@ -0,0 +1,96 @@
+package com.smartor.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.smartor.mapper.MedicationDoseInfoMapper;
+import com.smartor.domain.MedicationDoseInfo;
+import com.smartor.service.IMedicationDoseInfoService;
+
+/**
+ * 鑽搧鍓傞噺淇℃伅Service涓氬姟灞傚鐞�
+ * 
+ * @author lihu
+ * @date 2026-07-17
+ */
+@Service
+public class MedicationDoseInfoServiceImpl implements IMedicationDoseInfoService 
+{
+    @Autowired
+    private MedicationDoseInfoMapper medicationDoseInfoMapper;
+
+    /**
+     * 鏌ヨ鑽搧鍓傞噺淇℃伅
+     * 
+     * @param id 鑽搧鍓傞噺淇℃伅涓婚敭
+     * @return 鑽搧鍓傞噺淇℃伅
+     */
+    @Override
+    public MedicationDoseInfo selectMedicationDoseInfoById(Long id)
+    {
+        return medicationDoseInfoMapper.selectMedicationDoseInfoById(id);
+    }
+
+    /**
+     * 鏌ヨ鑽搧鍓傞噺淇℃伅鍒楄〃
+     * 
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 鑽搧鍓傞噺淇℃伅
+     */
+    @Override
+    public List<MedicationDoseInfo> selectMedicationDoseInfoList(MedicationDoseInfo medicationDoseInfo)
+    {
+        return medicationDoseInfoMapper.selectMedicationDoseInfoList(medicationDoseInfo);
+    }
+
+    /**
+     * 鏂板鑽搧鍓傞噺淇℃伅
+     * 
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertMedicationDoseInfo(MedicationDoseInfo medicationDoseInfo)
+    {
+        medicationDoseInfo.setCreateTime(DateUtils.getNowDate());
+        return medicationDoseInfoMapper.insertMedicationDoseInfo(medicationDoseInfo);
+    }
+
+    /**
+     * 淇敼鑽搧鍓傞噺淇℃伅
+     * 
+     * @param medicationDoseInfo 鑽搧鍓傞噺淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateMedicationDoseInfo(MedicationDoseInfo medicationDoseInfo)
+    {
+        medicationDoseInfo.setUpdateTime(DateUtils.getNowDate());
+        return medicationDoseInfoMapper.updateMedicationDoseInfo(medicationDoseInfo);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鑽搧鍓傞噺淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鑽搧鍓傞噺淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMedicationDoseInfoByIds(Long[] ids)
+    {
+        return medicationDoseInfoMapper.deleteMedicationDoseInfoByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎鑽搧鍓傞噺淇℃伅淇℃伅
+     * 
+     * @param id 鑽搧鍓傞噺淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMedicationDoseInfoById(Long id)
+    {
+        return medicationDoseInfoMapper.deleteMedicationDoseInfoById(id);
+    }
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/MedicationItemServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/MedicationItemServiceImpl.java
new file mode 100644
index 0000000..bf1e1aa
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/impl/MedicationItemServiceImpl.java
@@ -0,0 +1,96 @@
+package com.smartor.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.smartor.mapper.MedicationItemMapper;
+import com.smartor.domain.MedicationItem;
+import com.smartor.service.IMedicationItemService;
+
+/**
+ * 鑽搧淇℃伅Service涓氬姟灞傚鐞�
+ * 
+ * @author lihu
+ * @date 2026-07-17
+ */
+@Service
+public class MedicationItemServiceImpl implements IMedicationItemService 
+{
+    @Autowired
+    private MedicationItemMapper medicationItemMapper;
+
+    /**
+     * 鏌ヨ鑽搧淇℃伅
+     * 
+     * @param id 鑽搧淇℃伅涓婚敭
+     * @return 鑽搧淇℃伅
+     */
+    @Override
+    public MedicationItem selectMedicationItemById(Long id)
+    {
+        return medicationItemMapper.selectMedicationItemById(id);
+    }
+
+    /**
+     * 鏌ヨ鑽搧淇℃伅鍒楄〃
+     * 
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 鑽搧淇℃伅
+     */
+    @Override
+    public List<MedicationItem> selectMedicationItemList(MedicationItem medicationItem)
+    {
+        return medicationItemMapper.selectMedicationItemList(medicationItem);
+    }
+
+    /**
+     * 鏂板鑽搧淇℃伅
+     * 
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertMedicationItem(MedicationItem medicationItem)
+    {
+        medicationItem.setCreateTime(DateUtils.getNowDate());
+        return medicationItemMapper.insertMedicationItem(medicationItem);
+    }
+
+    /**
+     * 淇敼鑽搧淇℃伅
+     * 
+     * @param medicationItem 鑽搧淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateMedicationItem(MedicationItem medicationItem)
+    {
+        medicationItem.setUpdateTime(DateUtils.getNowDate());
+        return medicationItemMapper.updateMedicationItem(medicationItem);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鑽搧淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鑽搧淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMedicationItemByIds(Long[] ids)
+    {
+        return medicationItemMapper.deleteMedicationItemByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎鑽搧淇℃伅淇℃伅
+     * 
+     * @param id 鑽搧淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteMedicationItemById(Long id)
+    {
+        return medicationItemMapper.deleteMedicationItemById(id);
+    }
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceAppointRecordServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceAppointRecordServiceImpl.java
new file mode 100644
index 0000000..081ed87
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceAppointRecordServiceImpl.java
@@ -0,0 +1,96 @@
+package com.smartor.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.smartor.mapper.ServiceAppointRecordMapper;
+import com.smartor.domain.ServiceAppointRecord;
+import com.smartor.service.IServiceAppointRecordService;
+
+/**
+ * 棰勭害璁板綍Service涓氬姟灞傚鐞�
+ * 
+ * @author lihu
+ * @date 2026-07-06
+ */
+@Service
+public class ServiceAppointRecordServiceImpl implements IServiceAppointRecordService 
+{
+    @Autowired
+    private ServiceAppointRecordMapper serviceAppointRecordMapper;
+
+    /**
+     * 鏌ヨ棰勭害璁板綍
+     * 
+     * @param id 棰勭害璁板綍涓婚敭
+     * @return 棰勭害璁板綍
+     */
+    @Override
+    public ServiceAppointRecord selectServiceAppointRecordById(Long id)
+    {
+        return serviceAppointRecordMapper.selectServiceAppointRecordById(id);
+    }
+
+    /**
+     * 鏌ヨ棰勭害璁板綍鍒楄〃
+     * 
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 棰勭害璁板綍
+     */
+    @Override
+    public List<ServiceAppointRecord> selectServiceAppointRecordList(ServiceAppointRecord serviceAppointRecord)
+    {
+        return serviceAppointRecordMapper.selectServiceAppointRecordList(serviceAppointRecord);
+    }
+
+    /**
+     * 鏂板棰勭害璁板綍
+     * 
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertServiceAppointRecord(ServiceAppointRecord serviceAppointRecord)
+    {
+        serviceAppointRecord.setCreateTime(DateUtils.getNowDate());
+        return serviceAppointRecordMapper.insertServiceAppointRecord(serviceAppointRecord);
+    }
+
+    /**
+     * 淇敼棰勭害璁板綍
+     * 
+     * @param serviceAppointRecord 棰勭害璁板綍
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateServiceAppointRecord(ServiceAppointRecord serviceAppointRecord)
+    {
+        serviceAppointRecord.setUpdateTime(DateUtils.getNowDate());
+        return serviceAppointRecordMapper.updateServiceAppointRecord(serviceAppointRecord);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎棰勭害璁板綍
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑棰勭害璁板綍涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteServiceAppointRecordByIds(Long[] ids)
+    {
+        return serviceAppointRecordMapper.deleteServiceAppointRecordByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎棰勭害璁板綍淇℃伅
+     * 
+     * @param id 棰勭害璁板綍涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteServiceAppointRecordById(Long id)
+    {
+        return serviceAppointRecordMapper.deleteServiceAppointRecordById(id);
+    }
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java
index feda3ae..dc3ff01 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java
@@ -1,11 +1,17 @@
 package com.smartor.service.impl;
 
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.RSAPublicKeyExample;
 import com.smartor.domain.ServiceOutPath;
+import com.smartor.domain.ServiceTask;
 import com.smartor.mapper.ServiceOutPathMapper;
+import com.smartor.mapper.ServiceTaskMapper;
 import com.smartor.service.IServiceOutPathService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -18,6 +24,14 @@
 public class ServiceOutPathServiceImpl implements IServiceOutPathService {
     @Autowired
     private ServiceOutPathMapper serviceOutPathMapper;
+    @Autowired
+    private ServiceTaskMapper serviceTaskMapper;
+    @Value("${localIP}")
+    private String localIP;
+    @Value("${req_path}")
+    private String req_path;
+    @Value("${pub_key}")
+    private String pub_key;
 
     /**
      * 鏌ヨ涓婚敭
@@ -53,6 +67,40 @@
     }
 
     /**
+     * 鏂板涓婚敭
+     *
+     * @param serviceOutPath 涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public String addOutPath(ServiceOutPath serviceOutPath) {
+        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(Long.valueOf(serviceOutPath.getParam1()));
+        RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+        String taskId = rsaPublicKeyExample.encryptedData(serviceOutPath.getParam1().toString(), pub_key);
+        String patid= rsaPublicKeyExample.encryptedData(serviceOutPath.getParam2().toString(), pub_key);
+        String subid= rsaPublicKeyExample.encryptedData(serviceOutPath.getParam6().toString(), pub_key);
+        Date now = DateUtils.getNowDate();
+        ServiceOutPath sop = new ServiceOutPath();
+        sop.setParam1(taskId);
+        sop.setParam2(patid);
+        sop.setParam3(serviceTask.getTaskName());
+        sop.setParam6(subid);
+        sop.setCreateTime(now);
+        sop.setUpdateTime(now);
+        sop.setOrgid(serviceTask.getOrgid());
+        sop.setDeptCode(serviceTask.getDeptcode());
+        sop.setWardCode(serviceTask.getLeavehospitaldistrictcode());
+        sop.setDeptName(serviceTask.getDeptname());
+        sop.setWardName(serviceTask.getLeavehospitaldistrictname());
+        serviceOutPathMapper.insertServiceOutPath(sop);
+        //杞垚16杩涘埗骞跺洖鍐檙adix鍜寀pdateTime
+        serviceOutPath.setRadix(String.format("%03X", sop.getId()));
+        serviceOutPath.setUrl(localIP + ":" + req_path + "/wt?p=" + sop.getRadix());
+        serviceOutPathMapper.updateServiceOutPath(serviceOutPath);
+        return serviceOutPath.getUrl();
+    }
+
+    /**
      * 淇敼涓婚敭
      *
      * @param serviceOutPath 涓婚敭
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
index fa8c0f0..2ada147 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -63,6 +63,12 @@
     private SysUserRole2Mapper sysUserRoleMapper;
 
     @Autowired
+    private MedicationItemMapper medicationItemMapper;
+
+    @Autowired
+    private MedicationDoseInfoMapper medicationDoseInfoMapper;
+
+    @Autowired
     private RedisTemplate<String, String> redisTemplate;
 
     @Value("${sltd_pub_path}")
@@ -84,7 +90,12 @@
             Map<String, Object> requestParams = buildRequestParams(reqVO);
             Map<String, String> headers = buildRequestHeaders();
             log.info("璇锋眰鍙傛暟鍑洪櫌鏁版嵁鍦板潃锛歿},appKey:{}", sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", APP_KEY);
-            String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
+            String result = null;
+            if (reqVO.getSize() == null && reqVO.getCurrent() == null)
+                result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
+            else
+                result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcPageHealthcareRecordList", new Gson().toJson(requestParams), headers);
+            log.info("queryHealthcareRecordList--result杩斿洖鐨勭粨鏋滃�硷細{}", result == null ? "绌哄��" : "鏈夊��");
 
             String cry = determineCry(reqVO);
             log.info("cry鐨勫�间负锛歿}", cry);
@@ -95,6 +106,31 @@
             log.error("銆恞ueryHealthcareRecordList銆戣皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙e紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
             throw new RuntimeException("璋冪敤鐪佺珛鍚屽痉鍋ュ悍璁板綍鏌ヨ鎺ュ彛澶辫触:" + e.getMessage());
         }
+    }
+
+    @Override
+    public Boolean queryMedicationItemList(ServiceSLTDInhospReqVO reqVO) {
+        try {
+            Map<String, Object> requestParams = buildRequestParams(reqVO);
+            Map<String, String> headers = buildRequestHeaders();
+            log.info("璇锋眰鍙傝嵂鍝佷俊鎭湴鍧�锛歿},appKey:{}", sltdPubPath + "/hbos-thirdparty-integration/standard/base/mc/service/medication/queryMedicationInfoPage", APP_KEY);
+            String result = HttpUtils.sendPostByHeader(sltdPubPath + "/hbos-thirdparty-integration/standard/base/mc/service/medication/queryMedicationInfoPage", new Gson().toJson(requestParams), headers);
+            List<Map<String, Object>> dataList = getDataList(result, 2);
+            for (Map<String, Object> dataItem : dataList) {
+                MedicationItem medicationItem = convertToMedication(dataItem);
+                log.info("medicationItem鐨勫�间负锛歿}", medicationItem);
+                medicationItemMapper.insertMedicationItem(medicationItem);
+                List<MedicationDoseInfo> doseInfoList = medicationItem.getDoseInfoList();
+                for (MedicationDoseInfo doseInfo : doseInfoList) {
+                    doseInfo.setMedicationItemId(medicationItem.getId());
+                    medicationDoseInfoMapper.insertMedicationDoseInfo(doseInfo);
+                }
+            }
+        } catch (Exception e) {
+            log.error("銆恞ueryMedicationItemList銆戣皟鐢ㄧ渷绔嬪悓寰疯嵂鍝佷俊鎭煡璇㈡帴鍙e紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
+            throw new RuntimeException(e);
+        }
+        return true;
     }
 
 
@@ -136,7 +172,7 @@
             Map<String, String> headers = buildRequestHeaders();
             String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/dept/queryDeptList", new Gson().toJson(params), headers);
             log.info("銆恞ueryDeptWardAreaInfoList銆戞帴鍙e搷搴旂粨鏋滐細{}", StringUtils.isEmpty(result) ? "绌虹殑" : "涓嶇┖");
-            List<Map<String, Object>> dataList = getDataList(result);
+            List<Map<String, Object>> dataList = getDataList(result, 1);
             log.info("-----------dataList鎺ュ彛鍝嶅簲缁撴灉锛歿}", dataList.size());
             for (Map<String, Object> dataItem : dataList) {
                 SysDept sysDept = new SysDept();
@@ -192,20 +228,6 @@
         return true;
     }
 
-    @Override
-    public void aa(Map<String, Object> map) {
-        List<String> types = new ArrayList<>();
-        types.add("FH0109.27");
-        ObjectMapper objectMapper = new ObjectMapper();
-        try {
-            String jsonString = objectMapper.writeValueAsString(map);
-            parseResponseData(jsonString, types, "1", "20001001");
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-        }
-
-    }
-
 
     /**
      * 閲囬泦鍖婚櫌鐢ㄦ埛淇℃伅
@@ -219,7 +241,7 @@
         Map<String, String> headers = buildRequestHeaders();
         String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/staff/queryStaffList", new Gson().toJson(requestParams), headers);
         log.info("銆恞ueryHealthcareRecordList銆戞帴鍙e搷搴旂粨鏋滄槸鍚︽湁鍊硷細{}", StringUtils.isEmpty(result) ? "娌″��" : "鏈夊��");
-        List<Map<String, Object>> dataList = getDataList(result);
+        List<Map<String, Object>> dataList = getDataList(result, 1);
         for (Map<String, Object> dataItem : dataList) {
             SysUser sysUser = new SysUser();
             if (StringUtils.isEmpty(getStringValue(dataItem, "accountNo"))) {
@@ -355,17 +377,25 @@
     }
 
     private String determineCry(ServiceSLTDInhospReqVO reqVO) {
-        if (CollectionUtils.isEmpty(reqVO.getStatusList())) return null;
-
-        if (reqVO.getStatusList().contains("FH0109.24")) {
-            //鍏ラ櫌
-            return "0";
-        } else if (reqVO.getStatusList().contains("FH0109.27")) {
-            //鍑洪櫌
-            return "1";
-        } else if (reqVO.getStatusList().contains("FH0109.22") || reqVO.getStatusList().contains("FH0109.23") || reqVO.getStatusList().contains("FH0109.53")) {
-            //棰勫叆闄�
-            return "3";
+        if (CollectionUtils.isEmpty(reqVO.getStatusList()) && CollectionUtils.isEmpty(reqVO.getHealthcareRecordTypeList()))
+            return null;
+        if (reqVO.getStatusList() != null) {
+            if (reqVO.getStatusList().contains("FH0109.24")) {
+                //鍏ラ櫌
+                return "0";
+            } else if (reqVO.getStatusList().contains("FH0109.27")) {
+                //鍑洪櫌
+                return "1";
+            } else if (reqVO.getStatusList().contains("FH0109.22") || reqVO.getStatusList().contains("FH0109.23") || reqVO.getStatusList().contains("FH0109.53")) {
+                //棰勫叆闄�
+                return "3";
+            }
+        }
+        if (reqVO.getHealthcareRecordTypeList() != null) {
+            if (reqVO.getHealthcareRecordTypeList().contains("FH0108.03") || reqVO.getHealthcareRecordTypeList().contains("FH0108.01")) {
+                //闂ㄦ�ヨ瘖
+                return "4";
+            }
         }
         return null;
     }
@@ -376,7 +406,7 @@
             params.put("orgId", Long.parseLong(reqVO.getOrgId()));
         }
         if (reqVO.getCampusId() != null) {
-            params.put("campusId", reqVO.getCampusId());
+            params.put("campusIds", reqVO.getCampusId());
         }
         if (reqVO.getStartHeadTime() != null) {
             params.put("startHeadTime", reqVO.getStartHeadTime());
@@ -431,12 +461,13 @@
 
     private List<ServiceSLTDInhospResDTO> parseResponseData(String result, List<String> types, String cry, String campusId) {
         try {
-            List<Map<String, Object>> dataList = getDataList(result);
+            List<Map<String, Object>> dataList = getDataList(result, cry.equals("4") ? 2 : 1);
+            log.info("銆恜arseResponseData銆戞垚鍔熻В鏋恉ataList:{}鏉″仴搴疯褰曟暟鎹�", dataList.size());
             List<ServiceSLTDInhospResDTO> resultList = new ArrayList<>();
             for (Map<String, Object> dataItem : dataList) {
                 resultList.add(convertToDTO(dataItem));
             }
-            log.info("銆恜arseResponseData銆戞垚鍔熻В鏋恵}鏉″仴搴疯褰曟暟鎹�", resultList.size());
+            log.info("銆恜arseResponseData銆戞垚鍔熻В鏋恟esultList:{}鏉″仴搴疯褰曟暟鎹�", resultList.size());
 
             processResultList(resultList, types, cry, campusId);
             return resultList;
@@ -446,11 +477,20 @@
         }
     }
 
-    public List<Map<String, Object>> getDataList(String result) {
+    /**
+     * 瑙f瀽鎺ュ彛杩斿洖鏁版嵁
+     *
+     * @param result 鎺ュ彛杩斿洖鏁版嵁
+     * @param flag   1浠h〃锛屾暟缁勫湪data閲岋紝2浠h〃鏁扮粍鍦╠ata/records閲�
+     * @return 瑙f瀽鍚庣殑鏁版嵁鍒楄〃
+     */
+
+    public List<Map<String, Object>> getDataList(String result, Integer flag) {
         Gson gson = new Gson();
         Type mapType = new TypeToken<Map<String, Object>>() {
         }.getType();
         Map<String, Object> responseMap = gson.fromJson(result, mapType);
+        log.info("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹殑responseMap锛歿}", Objects.isNull(responseMap) ? "绌虹殑" : "鏈夊��");
         Number codeNum = (Number) responseMap.get("code");
         String code = BigDecimal.valueOf(codeNum.longValue()).toPlainString();
         if (StringUtils.isEmpty(code) || !code.equals("200")) {
@@ -459,15 +499,30 @@
         }
 
         Object dataObj = responseMap.get("data");
+        if (flag == 1) {
+            dataObj = responseMap.get("data");
+        } else if (flag == 2) {
+            //闂ㄦ�ヨ瘖鐨勫垎椤垫暟鎹槸鍦╮ecords涓�
+            dataObj = ((Map<String, Object>) responseMap.get("data")).get("records");
+            log.info("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹殑dataObj锛歿}", Objects.isNull(dataObj) ? "绌虹殑" : "鏈夊��");
+        }
         if (dataObj == null) {
             log.info("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹负绌�");
             return new ArrayList<>();
         }
 
-        String dataJson = gson.toJson(dataObj);
-        Type listType = new TypeToken<List<Map<String, Object>>>() {
-        }.getType();
-        List<Map<String, Object>> dataList = gson.fromJson(dataJson, listType);
+        // 鍏煎data涓烘暟缁勬垨瀵硅薄涓ょ鎯呭喌锛氭帴鍙f甯告椂data涓篬{...}]鏁扮粍锛�
+        // 寮傚父鎴栫┖鏁版嵁鏃跺彲鑳借繑鍥瀧}瀵硅薄锛岀洿鎺ユ寜List瑙f瀽浼氭姏JsonSyntaxException
+        List<Map<String, Object>> dataList;
+        if (dataObj instanceof List) {
+            String dataJson = gson.toJson(dataObj);
+            Type listType = new TypeToken<List<Map<String, Object>>>() {
+            }.getType();
+            dataList = gson.fromJson(dataJson, listType);
+        } else {
+            log.info("銆恜arseResponseData銆戞帴鍙h繑鍥瀌ata涓嶆槸鏁扮粍锛岃�屾槸瀵硅薄绫诲瀷锛宒ata鍐呭锛歿}", gson.toJson(dataObj));
+            return new ArrayList<>();
+        }
 
         // 浣跨敤 Set 鍘婚噸锛岀‘淇濇病鏈夐噸澶嶇殑鏁版嵁
         Set<Map<String, Object>> uniqueDataSet = new HashSet<>(dataList);
@@ -699,6 +754,14 @@
                     List<PatMedInhosp> patMedInhospList3 = patMedInhospService.selectPatMedInhosp(queryInhosp);
                     if (CollectionUtils.isEmpty(patMedInhospList3)) {
                         try {
+                            //鑾峰彇涓�涓嬪叆闄㈢敵璇峰崟
+                            Map<String, String> headers = buildRequestHeaders();
+                            Map<String, Object> requestParams = new HashMap<>();
+                            requestParams.put("orgId", "20001001");
+                            requestParams.put("20001001", patArchive.getPatidHis());
+                            String result = HttpUtils.sendPostByHeader(sltdPubPath + "/hospitalizedApply/query", new Gson().toJson(requestParams), headers);
+
+
                             patMedInhospService.insertPatMedInhosp(patMedInhosp);
                             log.debug("鎴愬姛鎻掑叆棰勫叆闄㈣褰曪細serialnum={}", patMedInhosp.getSerialnum());
                         } catch (Exception e) {
@@ -1038,6 +1101,55 @@
         return dto;
     }
 
+    private MedicationItem convertToMedication(Map<String, Object> dataItem) {
+        MedicationItem dto = new MedicationItem();
+        dto.setOrgId(getLongValue(dataItem, "orgId"));
+        dto.setIdentificationCode(getStringValue(dataItem, "identificationCode"));
+        dto.setWbm(getStringValue(dataItem, "wbm"));
+        dto.setMedicationCommonName(getStringValue(dataItem, "medicationCommonName"));
+        dto.setManufacturerName(getStringValue(dataItem, "manufacturerName"));
+        dto.setItemCode(getStringValue(dataItem, "itemCode"));
+        dto.setSmallLargePackageRatio(getLongValue(dataItem, "smallLargePackageRatio"));
+        dto.setRemark(getStringValue(dataItem, "remark"));
+        dto.setItemName(getStringValue(dataItem, "itemName"));
+        dto.setMedicationType(getStringValue(dataItem, "medicationType"));
+        Object mainDiagObj = dataItem.get("doseInfoList");
+        List<MedicationDoseInfo> doseInfoList = new ArrayList<>();
+        if (mainDiagObj instanceof List) {
+            List<Map<String, Object>> mainDiagList = (List<Map<String, Object>>) mainDiagObj;
+            for (Map<String, Object> mainDiagMap : mainDiagList) {
+                MedicationDoseInfo medicationDoseInfo = new MedicationDoseInfo();
+                medicationDoseInfo.setDoseSmallPackageRation(getBigDecimalValue(mainDiagMap, "doseSmallPackageRation"));
+                medicationDoseInfo.setDose(getLongValue(mainDiagMap, "dose"));
+                medicationDoseInfo.setDoseSmallPackageNum(getLongValue(mainDiagMap, "doseSmallPackageNum"));
+                medicationDoseInfo.setDoseUnit(getStringValue(mainDiagMap, "doseUnit"));
+                medicationDoseInfo.setDoseUnitType(getLongValue(mainDiagMap, "doseUnitType"));
+                doseInfoList.add(medicationDoseInfo);
+            }
+        }
+        dto.setDoseInfoList(doseInfoList);
+        dto.setAntimicrobialGradeCode(getStringValue(dataItem, "antimicrobialGradeCode"));
+        dto.setLicenseNumber(getStringValue(dataItem, "licenseNumber"));
+        dto.setDefaultUsageName(getStringValue(dataItem, "defaultUsageName"));
+        dto.setSpecialDrugsName(getStringValue(dataItem, "specialDrugsName"));
+        dto.setAntimicrobialGradeName(getStringValue(dataItem, "antimicrobialGradeName"));
+        dto.setCommonPinyin(getStringValue(dataItem, "commonPinyin"));
+        dto.setCommonWbm(getStringValue(dataItem, "commonWbm"));
+        dto.setManufacturerId(getLongValue(dataItem, "manufacturerId"));
+        dto.setDefaultUsageId(getLongValue(dataItem, "defaultUsageId"));
+        dto.setSpecification(getStringValue(dataItem, "specification"));
+        dto.setSmallPackageUnit(getStringValue(dataItem, "smallPackageUnit"));
+        dto.setItemId(getLongValue(dataItem, "itemId"));
+        dto.setSpecialDrugsCode(getStringValue(dataItem, "specialDrugsCode"));
+        dto.setPinyin(getStringValue(dataItem, "pinyin"));
+        dto.setDoseFormName(getStringValue(dataItem, "doseFormName"));
+        dto.setLargePackageUnit(getStringValue(dataItem, "largePackageUnit"));
+        dto.setRetailPrice(getBigDecimalValue(dataItem, "retailPrice"));
+        dto.setStatus(getLongValue(dataItem, "status"));
+        return dto;
+    }
+
+
     private List<ServiceSLTDContactsResDTO> parseContacts(List<?> contactsList) {
         List<ServiceSLTDContactsResDTO> contacts = new ArrayList<>();
         for (Object contactObj : contactsList) {
@@ -1082,6 +1194,16 @@
         return value instanceof Number ? new BigDecimal(value.toString()).toPlainString() : value.toString();
     }
 
+    private BigDecimal getBigDecimalValue(Map<String, Object> map, String key) {
+        Object value = map.get(key);
+        if (value == null) {
+            return null;
+        }
+
+        // 鍙鐞嗘暟瀛楃被鍨嬶紝閬垮厤绉戝璁℃暟娉�
+        return new BigDecimal(value.toString());
+    }
+
     private Long getLongValue(Map<String, Object> map, String key) {
         Object value = map.get(key);
         if (value == null) return null;
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
index 07484ad..a5071d0 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -207,7 +207,7 @@
             if (key.contains("-WJscriptCache")) {
                 List<SvyTaskTemplateScriptVO> cacheList = redisCache.getCacheList(key);
                 cacheList.sort(Comparator.comparingLong(SvyTaskTemplateScriptVO::getSort));
-                log.info("闂嵎鍥炵瓟缁撴灉锛歿}", cacheList);
+                log.info("闂嵎鍥炵瓟缁撴灉锛歿}", CollectionUtils.isEmpty(cacheList) ? null : cacheList.size());
                 for (int i = 0; i < cacheList.size(); i++) {
                     if (i == 0) {
                         //杩欎釜鏃堕棿瑕佹壘鍒扮涓�棰�
@@ -231,13 +231,10 @@
                     } else {
                         SvyTaskTemplateScriptVO svyTaskTemplateScriptVO = cacheList.get(i);
                         log.info("svyTaskTemplateScriptVO鐨勪俊鎭负锛歿}锛宨鐨勫�间负锛歿}", svyTaskTemplateScriptVO.getScriptno(), i);
-//                        SvyTaskTemplateScriptVO svyTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(cacheList.get(i), SvyTaskTemplateScriptVO.class);
                         List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = cacheList.get(i).getSvyTaskTemplateTargetoptions();
-//                        List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(cacheList.get(i).getSvyTaskTemplateTargetoptions(), SvyTaskTemplateTargetoption.class);
                         svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
 
                         if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
-//                            log.error("svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
                             Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Objects.isNull(split[2]) ? null : Long.valueOf(split[2]));
                             log.error("nextScriptNo鐨勪俊鎭负锛歿}", map.get("nextScriptNo"));
                             if (!Objects.isNull(map.get("nextScriptNo")))
@@ -253,16 +250,14 @@
             } else if (key.contains("-SFscriptCache")) {
                 List<IvrTaskTemplateScriptVO> cacheList = redisCache.getCacheList(key);
                 cacheList.sort(Comparator.comparingLong(IvrTaskTemplateScriptVO::getSort));
-                log.error("鐢佃瘽闅忚闂嵎鍥炵瓟缁撴灉锛歿}", cacheList.size());
+                log.error("鐢佃瘽闅忚闂嵎鍥炵瓟缁撴灉锛歿}", CollectionUtils.isEmpty(cacheList) ? null : cacheList.size());
                 for (int i = 0; i < cacheList.size(); i++) {
                     if (i == 0) {
                         //杩欎釜鏃堕棿瑕佹壘鍒扮涓�棰�
                         for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : cacheList) {
                             if (ivrTaskTemplateScriptVO.getSort() == 1L) {
                                 //璇存槑鏄涓�棰�
-//                                IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(cacheList.get(0), IvrTaskTemplateScriptVO.class);
                                 List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = cacheList.get(0).getIvrTaskScriptTargetoptionList();
-//                                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(ivrLibaTemplateTargetoptions, IvrTaskTemplateTargetoption.class);
                                 ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
                                 Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid);
                                 if (!Objects.isNull(map.get("nextScriptNo")))
@@ -347,7 +342,7 @@
             if (serviceSubTaskCacheReq.getType() == 2) {
                 List<SvyTaskTemplateScriptVO> cacheList = serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS();
                 cacheList.sort(Comparator.comparingLong(SvyTaskTemplateScriptVO::getSort));
-                log.info("闂嵎鍥炵瓟缁撴灉锛歿}", cacheList);
+                log.info("闂嵎鍥炵瓟缁撴灉锛歿}", CollectionUtils.isEmpty(cacheList) ? null : cacheList.size());
                 // 棰勬煡璇㈠惊鐜腑涓嶅彉鐨勬暟鎹紝閬垮厤姣忛閲嶅鏌ユ暟鎹簱
                 ServiceSubtaskEntity preSubtaskVO = new ServiceSubtaskEntity();
                 preSubtaskVO.setTaskid(tid);
@@ -401,7 +396,7 @@
             } else if (serviceSubTaskCacheReq.getType() == 1) {
                 List<IvrTaskTemplateScriptVO> cacheList = serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList();
                 cacheList.sort(Comparator.comparingLong(vo -> Optional.ofNullable(vo.getSort()).orElse(0)));
-                log.error("鐢佃瘽闅忚闂嵎鍥炵瓟缁撴灉锛歿}", cacheList.size());
+                log.error("鐢佃瘽闅忚闂嵎鍥炵瓟缁撴灉锛歿}", CollectionUtils.isEmpty(cacheList) ? null : cacheList.size());
                 for (int i = 0; i < cacheList.size(); i++) {
                     if (i == 0) {
                         //杩欎釜鏃堕棿瑕佹壘鍒扮涓�棰�
@@ -650,7 +645,6 @@
         return true;
     }
 
-
     /**
      * 灏嗛棶棰樹繚瀛樺埌缂撳瓨涓�
      *
@@ -756,7 +750,7 @@
         map.put("templateName", serviceSubtask.getTemplatename());
         map.put("upTaskName", null);
         if (ObjectUtils.isNotEmpty(serviceSubtask) && serviceSubtask.getUpid() != null) {
-            Map<String, Object> scriptInfoByCondition2 = serviceTaskService.getScriptInfoByCondition(serviceSubTaskQueryReq.getTaskid(), serviceSubTaskQueryReq.getPatid(), serviceSubTaskQueryReq.getIsFinish(), serviceSubTaskQueryReq.getPatfrom(),serviceSubTaskQueryReq.getSubId());
+            Map<String, Object> scriptInfoByCondition2 = serviceTaskService.getScriptInfoByCondition(serviceSubTaskQueryReq.getTaskid(), serviceSubTaskQueryReq.getPatid(), serviceSubTaskQueryReq.getIsFinish(), serviceSubTaskQueryReq.getPatfrom(), serviceSubTaskQueryReq.getSubId());
             Map<String, Object> map1 = getMap(scriptInfoByCondition2, Long.valueOf(serviceSubtask.getUpid()), serviceSubTaskQueryReq.getPatid());
             if (!map1.isEmpty()) {
                 map.put("upScriptResult", map1.get("scriptResult"));
@@ -901,9 +895,7 @@
         return map;
     }
 
-    private Map<String, String> setWJInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, Long taskid, Long patid, Long subid,
-                                           List<ServiceSubtask> selectServiceSubtaskList, ServiceTask serviceTask,
-                                           Map<Long, Long> existingDetailIdMap, Map<Long, Long> existingTraceIdMap) {
+    private Map<String, String> setWJInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, Long taskid, Long patid, Long subid, List<ServiceSubtask> selectServiceSubtaskList, ServiceTask serviceTask, Map<Long, Long> existingDetailIdMap, Map<Long, Long> existingTraceIdMap) {
         log.error("-----svyTaskTemplateScriptVO鐨勫�间负锛歿}", svyTaskTemplateScriptVO);
         String score = "0";
         //涓嬮璺宠浆
@@ -931,6 +923,7 @@
             serviceSubtaskDetailVO.setAsrtext(StringUtils.isEmpty(svyTaskTemplateScriptVO.getScriptResult()) ? "" : svyTaskTemplateScriptVO.getScriptResult().replaceAll("^\"|\"$", ""));
             serviceSubtaskDetailVO.setMatchedtext(StringUtils.isEmpty(svyTaskTemplateScriptVO.getScriptResult()) ? "" : svyTaskTemplateScriptVO.getScriptResult().replaceAll("^\"|\"$", ""));
             serviceSubtaskDetailVO.setScore(svyTaskTemplateScriptVO.getScore() != null ? svyTaskTemplateScriptVO.getScore().toString() : "0");
+            serviceSubtaskDetailVO.setAnswerps(svyTaskTemplateScriptVO.getAnswerps());
         } else {
             //闈炲崟澶氶��
             if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getScriptResult())) {
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
index a6e4416..22812af 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -6,6 +6,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.dx.MessageSend;
 import com.ruoyi.common.exception.base.BaseException;
@@ -177,6 +178,8 @@
 
     @Autowired
     private IPatMedOuthospService patMedOuthospService;
+    @Autowired
+    private SysDept2Mapper sysDept2Mapper;
 
     @Value("${spring.profiles.active}")
     private String active;
@@ -404,8 +407,8 @@
             if (serviceSubtaskRes.getSendstate() == 6) serviceSubtaskRes.setSendstateView(2L);
             if (serviceSubtaskRes.getSendstate() == 4) serviceSubtaskRes.setSendstateView(3L);
             // 濉厖褰撳墠琛ュ伩
-            if (StringUtils.isEmpty(serviceSubtask.getCurrentPreachform())){
-                if(StringUtils.isNotEmpty(serviceSubtask.getPreachform())){
+            if (StringUtils.isEmpty(serviceSubtask.getCurrentPreachform())) {
+                if (StringUtils.isNotEmpty(serviceSubtask.getPreachform())) {
                     //榛樿鍙栫涓�涓�
                     serviceSubtaskRes.setCurrentPreachform(serviceSubtask.getPreachform().split(",")[0]);
                 }
@@ -685,7 +688,10 @@
                 serviceTask.setTemplatename(tempName);
             }
             serviceTask.setLeaveldeptcodes(serviceTaskVO.getLeaveldeptcodes());
-            serviceTask.setLeavehospitaldistrictcode(serviceTask.getLeavehospitaldistrictcode());
+            if (StringUtils.isEmpty(serviceTask.getLeavehospitaldistrictname()) && StringUtils.isNotEmpty(serviceTask.getLeavehospitaldistrictcode())) {
+                SysDept sysDept = sysDept2Mapper.selectDeptByCode(serviceTask.getLeavehospitaldistrictcode(), null);
+                serviceTask.setLeavehospitaldistrictname(sysDept.getDeptName());
+            }
             if (serviceTaskVO.getLongTask() == 1) serviceTask.setSendState(2L);
             serviceTask.setCreateTime(new Date());
             serviceTask.setUpdateTime(new Date());
@@ -711,8 +717,8 @@
                     //鍗楀崕闄勪竴鐨刬cd10code鏄湁閲嶅鐨勶紝鎵�浠ヤ笉鑳界敤鍗楀崕闄勪竴鐨刬cd10code鍘绘煡璇�
                     log.info("----serviceTaskdiag鐨勫�间负锛歿}", serviceTaskdiag);
                     if (!StringUtils.isEmpty(serviceTaskVO.getIcd10name())) {
-                        String[] Icd10Names = serviceTaskVO.getIcd10name().split("$");
-                        String[] Icd10codes = serviceTaskVO.getIcd10code().split("$");
+                        String[] Icd10Names = serviceTaskVO.getIcd10name().split(",");
+                        String[] Icd10codes = serviceTaskVO.getIcd10code().split(",");
                         for (int i = 0; i < Icd10Names.length; i++) {
                             serviceTaskdiag.setIcd10code(Icd10codes[i]);
                             serviceTaskdiag.setIcd10name(Icd10Names[i]);
@@ -2360,7 +2366,6 @@
             serviceSubtask.setRemark("鐢佃瘽鎺ラ�氭垚鍔燂紝鎮h�呮嫆缁濋殢璁�");
             serviceSubtask.setId(Long.valueOf(phoneCallRecordVO.getTaskid()));
             serviceSubtask.setSendstate(6L);
-            serviceSubtask.setFinishtime(new Date());
             serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
 //            int startIndex = phoneCallRecordVO.getRecord_path().indexOf("voice") + "voice".length() + 1;  // 鍔�1鏄烦杩�/绗﹀彿
 //            int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/");
@@ -3699,7 +3704,7 @@
         Map<String, String> map = new HashMap<>();
         map.put("phone", serviceSubtask.getPhone());
         map.put("content", sendMagParam.getContent());
-        String result = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(map));
+        HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(map));
         redisCache.setCacheObject(subTaskId + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES);
         if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
             serviceSubtask.setRemark("鐢佃瘽鍙戦�佹嫆鎺�,鐭俊琛ュ伩鍙戦�佹垚鍔�");
@@ -4613,8 +4618,8 @@
     }
 
     @Override
-    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds) {
-        return serviceSubtaskMapper.statQuestionOption(taskIds);
+    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds, Date startOutHospTime, Date endOutHospTime) {
+        return serviceSubtaskMapper.statQuestionOption(taskIds, startOutHospTime, endOutHospTime);
     }
 
     private Boolean saveServiceSubtaskDetail(ServiceSubtask serviceSubtask) {
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
index 531474a..44f8c04 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
@@ -4,12 +4,10 @@
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.Gson;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
-import com.ruoyi.common.utils.http.HttpUtils;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -18,7 +16,6 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.smartor.service.IServiceTaskService;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,49 +31,34 @@
 public class ServiceTaskServiceImpl implements IServiceTaskService {
     @Autowired
     private ServiceTaskMapper serviceTaskMapper;
-
     @Autowired
     private ServiceSubtaskMapper serviceSubtaskMapper;
-
     @Autowired
     private ServiceTaskdeptMapper serviceTaskdeptMapper;
-
     @Autowired
     private PatArchiveImportMapper patArchiveImportMapper;
-
-
     @Autowired
     private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
-
     @Autowired
     private HeLibraryMapper heLibraryMapper;
-
     @Autowired
     private SvyTaskTemplateScriptMapper svyTaskTemplateScriptMapper;
     @Autowired
     private IvrTaskTemplateScriptMapper ivrTaskTemplateScriptMapper;
-
     @Autowired
     private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
-
     @Autowired
     private PatArchiveMapper patArchiveMapper;
-
     @Autowired
     private PatMedInhospMapper patMedInhospMapper;
-
     @Autowired
     private PatMedOuthospMapper patMedOuthospMapper;
-
-
     @Autowired
     private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper;
     @Autowired
     private IvrTaskTemplateTargetoptionMapper ivrTaskTemplateTargetOptionMapper;
-
     @Autowired
     private SvyTaskTemplateTargetoptionMapper svyTaskTemplateTargetoptionMapper;
-
     @Autowired
     private RedisCache redisCache;
 
@@ -287,13 +269,14 @@
                 serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
             }
         }
-
-        if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
-        map.put("script", info);
-        if (StringUtils.isNotEmpty(serviceTask.getJsy())) map.put("jsy", serviceTask.getJsy());
-        map.put("type", serviceTask.getType());
-        map.put("taskName", serviceTask.getTaskName());
-        map.put("submit", "0");
+        if (serviceTask != null) {
+            if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
+            map.put("script", info);
+            if (StringUtils.isNotEmpty(serviceTask.getJsy())) map.put("jsy", serviceTask.getJsy());
+            map.put("type", serviceTask.getType());
+            map.put("taskName", serviceTask.getTaskName());
+            map.put("submit", "0");
+        }
         return map;
     }
 
@@ -435,7 +418,6 @@
             if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getScriptContent())) {
                 for (Map<String, String> map : mapList) {
                     for (String key : map.keySet()) {
-
                         ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
                     }
                 }
@@ -486,8 +468,7 @@
         //閫氳繃妯℃澘ID鑾峰彇闂淇℃伅
         SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript();
         svyTaskTemplateScript.setTemplateID(Long.valueOf(serviceTask.getTemplateid()));
-        if (CollectionUtils.isNotEmpty(serviceSubtaskList) && serviceSubtaskList.get(0).getTemplateid() != null)
-            svyTaskTemplateScript.setTemplateID(serviceSubtaskList.get(0).getTemplateid());
+        if (serviceTask.getTemplateid() != null) svyTaskTemplateScript.setTemplateID(serviceTask.getTemplateid());
         svyTaskTemplateScript.setDelFlag("0");
         List<SvyTaskTemplateScript> svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
         if (CollectionUtils.isEmpty(svyTaskTemplateScripts) || svyTaskTemplateScripts.size() == 0) {
diff --git a/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
index cb0961a..150769f 100644
--- a/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
@@ -3,19 +3,20 @@
 import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.SysUserDept;
 import com.ruoyi.common.core.domain.entity.SysUserRole;
+import com.ruoyi.common.utils.HttpUtil;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.mapper.SysConfigMapper;
 import com.smartor.domain.*;
 import com.smartor.mapper.*;
-import com.smartor.service.IHNGatherPatArchiveService;
-import com.smartor.service.IPatArchiveService;
-import com.smartor.service.IPatMedInhospService;
-import com.smartor.service.IXHGatherPatArchiveService;
+import com.smartor.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +28,7 @@
 import java.io.File;
 import java.io.FileWriter;
 import java.lang.reflect.Type;
+import java.net.URLEncoder;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -47,13 +49,26 @@
 
     @Value("${hosp_info_url}")
     private String hospInfoUrl;
-
-
     @Autowired
     IPatMedInhospService patMedInhospService;
-
     @Autowired
     IPatArchiveService patArchiveService;
+    @Autowired
+    IServiceAppointRecordService iServiceAppointRecordService;
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+    @Value("${xhsmsPath}")
+    private String xhsmsPath;
+    // 甯愬彿
+    @Value("${xhsmsAccount}")
+    private String xhsmsAccount;
+    //  鎺ュ彛瀵嗙爜
+    @Value("${xhsmsPwd}")
+    private String xhsmsPwd;
+    // 铏氭嫙鎺ュ叆鐮�
+    @Value("${xhsmsjrm}")
+    private String xhsmsjrm;
+
 
     /**
      * 鑾峰彇鎮h�呭嚭鍏ラ櫌淇℃伅
@@ -94,6 +109,72 @@
         }
     }
 
+    /**
+     * 鑾峰彇棰勭害鍋滆瘖璁板綍淇℃伅
+     *
+     * @param cry       鍑哄叆闄㈢被鍨嬶細0-鍏ラ櫌锛�1-鍑洪櫌 2,棰勭害璁板綍
+     * @param startTime 寮�濮嬫椂闂�
+     * @param endTime   缁撴潫鏃堕棿
+     */
+    public void getAppointRecordInfo(String cry, LocalDateTime startTime, LocalDateTime endTime) {
+        log.info("銆恎etAppointRecordInfo銆戝紑濮嬭幏鍙栧彇棰勭害鍋滆瘖璁板綍淇℃伅锛屾椂闂磋寖鍥达細{} ~ {}", startTime, endTime);
+        long startTimeMillis = System.currentTimeMillis();
+
+        try {
+            // 绗竴姝ワ細鏋勫缓璇锋眰鍙傛暟骞惰皟鐢℉IS鎺ュ彛
+            List<ServiceAppointRecord> appointRecordFromHIS = getAppointRecordFromHIS(cry, startTime, endTime);
+
+            if (CollectionUtils.isEmpty(appointRecordFromHIS)) {
+                log.info("銆恎etAppointRecordInfo銆戣幏鍙栭绾﹀仠璇婅褰曚俊鎭负绌猴紝璺宠繃澶勭悊");
+                return;
+            }
+            log.info("銆恎etAppointRecordInfo銆戣幏鍙栭绾﹀仠璇婅褰曚俊鎭瘂}鏉�", appointRecordFromHIS.size());
+            SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique("yytz.sms.template");
+            if (sysConfig != null) {
+                String smsContemt = sysConfig.getConfigValue();
+                // 绗簩姝ワ細澶勭悊鍋滆瘖璁板綍淇℃伅
+                for (ServiceAppointRecord serviceAppointRecord : appointRecordFromHIS) {
+                    String replace = smsContemt.replace("${patFileName}", StringUtils.defaultString(serviceAppointRecord.getPatFileName())).replace("${registTimeRange}", StringUtils.defaultString(serviceAppointRecord.getRegistTimeRange())).replace("${registDeptName}", StringUtils.defaultString(serviceAppointRecord.getRegistDeptName())).replace("${treatDoctName}", StringUtils.defaultString(serviceAppointRecord.getTreatDoctName()));
+                    Map<String, String> map2 = new HashMap<String, String>();
+                    map2.put("action", "send");
+                    map2.put("account", xhsmsAccount);
+                    map2.put("password", xhsmsPwd);
+                    map2.put("mobile", serviceAppointRecord.getPatTel());
+                    map2.put("content", replace);
+                    map2.put("extno", xhsmsjrm);
+                    map2.put("rt", "json");
+                    StringBuilder encodedParams = new StringBuilder();
+
+                    for (Map.Entry<String, String> entry : map2.entrySet()) {
+                        if (encodedParams.length() > 0) {
+                            encodedParams.append("&");
+                        }
+                        // 瀵归敭鍜屽�艰繘琛孶RL缂栫爜
+                        String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
+                        String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8");
+                        encodedParams.append(encodedKey).append("=").append(encodedValue);
+                    }
+                    Boolean isSuccess = HttpUtils.sendPost(xhsmsPath, encodedParams.toString());
+                    if (isSuccess) {
+                        log.info("---澶勭悊鍋滆瘖璁板綍淇℃伅鍙戦�佹垚鍔�,鍏ュ弬涓�:{}", encodedParams.toString());
+                        serviceAppointRecord.setSendTime(new Date());
+                        serviceAppointRecord.setSenderName("绯荤粺绠$悊鍛�");
+                        iServiceAppointRecordService.insertServiceAppointRecord(serviceAppointRecord);
+                    } else {
+                        log.info("澶勭悊鍋滆瘖璁板綍淇℃伅鍙戦�佸け璐�");
+                        iServiceAppointRecordService.insertServiceAppointRecord(serviceAppointRecord);
+                    }
+                }
+            }
+            long endTimeMillis = System.currentTimeMillis();
+            log.info("銆恎etAppointRecordInfo銆憑},棰勭害鍋滆瘖璁板綍淇℃伅澶勭悊瀹屾垚锛岃�楁椂锛歿}ms", endTimeMillis - startTimeMillis);
+
+        } catch (Exception e) {
+            log.error("銆恎etAppointRecordInfo銆戣幏鍙栭绾﹀仠璇婅褰曚俊鎭鐞嗗紓甯�", e);
+            throw new RuntimeException("鑾峰彇棰勭害鍋滆瘖璁板綍淇℃伅澶勭悊寮傚父", e);
+        }
+    }
+
 
     /**
      * 绗竴姝ワ細璋冪敤HIS鎺ュ彛鑾峰彇鏁版嵁
@@ -117,6 +198,29 @@
             throw e;
         }
     }
+
+
+    private List<ServiceAppointRecord> getAppointRecordFromHIS(String cry, LocalDateTime startTime, LocalDateTime endTime) {
+        try {
+            // 鏋勫缓璇锋眰鍙傛暟
+            Map<String, String> requestParams = buildRequestParams(cry, startTime, endTime);
+
+            // 鏋勫缓璇锋眰澶�
+            Map<String, String> headers = buildRequestHeaders(startTime);
+
+            // 鍙戦�丠TTP璇锋眰
+            log.info("銆恎etAppointRecordFromHIS銆戝彂閫丠TTP璇锋眰锛岃姹傚弬鏁帮細{},璇锋眰鍦板潃锛歿}", new Gson().toJson(requestParams), hospInfoUrl);
+            String result = HttpUtils.sendPostByHeader(hospInfoUrl, new Gson().toJson(requestParams), headers);
+
+            // 瑙f瀽鍝嶅簲鏁版嵁
+            return parseResponseData2(result);
+
+        } catch (Exception e) {
+            log.error("銆恌etchHisData銆戣皟鐢℉IS鎺ュ彛寮傚父", e);
+            throw e;
+        }
+    }
+
 
     /**
      * 绗簩姝ワ細淇濆瓨鍘熷鏁版嵁鍒版枃浠�
@@ -180,7 +284,8 @@
     private Map<String, String> buildRequestHeaders(LocalDateTime startTime) {
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
         Map<String, String> header = new HashMap<>();
-        header.put("x-hcsb-serviceno", "IS002347");
+        header.put("x-hcsb-serviceno", "IS044056");
+//        header.put("x-hcsb-serviceno", "IS002347");
         header.put("x-hcsb-version", "2.0");
         header.put("x-hcsb-sourcesyscode", "14");
         header.put("x-hcsb-token", "ArGE2JnHtxG/Zx5nrnGY4eOfMUJGGJokAJHigG1BrCY=");
@@ -201,11 +306,17 @@
             req.put("cashStartDate", startTime.format(formatter));
             req.put("cashEndDate", endTime.format(formatter));
             req.put("currStatus", "4");
-        } else {
+        } else if ("0".equals(cry)) {
             // 鍏ラ櫌鍙傛暟
             req.put("admissStartDate", startTime.format(formatter));
             req.put("admissEndDate", endTime.format(formatter));
             req.put("currStatus", "2");
+        } else if ("2".equals(cry)) {
+            // 棰勭害璁板綍鏌ヨ
+            req.put("appointRegistDateBegin", startTime.format(formatter));
+            req.put("appointRegistDateEnd", endTime.format(formatter));
+            // 鎺掔彮鍋滆瘖 锛堥绾︾姸鎬佹爣蹇�(0:宸查绾�  1:宸叉寕鍙�  2:宸查��鍙�  3:宸插氨璇�  -1:鐥呬汉鍙栨秷  -2:鍖婚櫌鍙栨秷  -3:鎺掔彮鍋滆瘖)锛�
+            req.put("scheduleStatusFlag", "-3");
         }
 
         return req;
@@ -218,7 +329,22 @@
         try {
             Gson gson = new Gson();
             JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
-            JsonArray resultArray = jsonObject.getAsJsonObject("data").getAsJsonArray("result");
+
+            // 鏍¢獙data瀛楁鏄惁涓篔sonObject
+            JsonElement dataElement = jsonObject.get("data");
+            if (dataElement == null || !dataElement.isJsonObject()) {
+                log.warn("銆恜arseResponseData銆戝搷搴旀暟鎹腑data瀛楁涓虹┖鎴栭潪瀵硅薄绫诲瀷锛屽師濮嬫暟鎹細{}", result);
+                return new ArrayList<>();
+            }
+
+            JsonObject dataObject = dataElement.getAsJsonObject();
+            JsonElement resultElement = dataObject.get("result");
+            if (resultElement == null || !resultElement.isJsonArray()) {
+                log.warn("銆恜arseResponseData銆戝搷搴旀暟鎹腑result瀛楁涓虹┖鎴栭潪鏁扮粍绫诲瀷锛屽師濮嬫暟鎹細{}", result);
+                return new ArrayList<>();
+            }
+
+            JsonArray resultArray = resultElement.getAsJsonArray();
             Type resultType = new TypeToken<List<ThiedInhospInfo>>() {
             }.getType();
             return gson.fromJson(resultArray, resultType);
@@ -228,6 +354,38 @@
         }
     }
 
+    /**
+     * 瑙f瀽鍝嶅簲鏁版嵁
+     */
+    private List<ServiceAppointRecord> parseResponseData2(String result) {
+        try {
+            Gson gson = new Gson();
+            JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
+
+            // 鏍¢獙data瀛楁鏄惁涓篔sonObject
+            JsonElement dataElement = jsonObject.get("data");
+            if (dataElement == null || !dataElement.isJsonObject()) {
+                log.warn("銆恜arseResponseData2銆戝搷搴旀暟鎹腑data瀛楁涓虹┖鎴栭潪瀵硅薄绫诲瀷锛屽師濮嬫暟鎹細{}", result);
+                return new ArrayList<>();
+            }
+
+            JsonObject dataObject = dataElement.getAsJsonObject();
+            JsonElement resultElement = dataObject.get("result");
+            if (resultElement == null || !resultElement.isJsonArray()) {
+                log.warn("銆恜arseResponseData2銆戝搷搴旀暟鎹腑result瀛楁涓虹┖鎴栭潪鏁扮粍绫诲瀷锛屽師濮嬫暟鎹細{}", result);
+                return new ArrayList<>();
+            }
+
+            JsonArray resultArray = resultElement.getAsJsonArray();
+            Type resultType = new TypeToken<List<ServiceAppointRecord>>() {
+            }.getType();
+            return gson.fromJson(resultArray, resultType);
+        } catch (Exception e) {
+            log.error("銆恜arseResponseData2銆戣В鏋愬搷搴旀暟鎹紓甯革紝鍘熷鏁版嵁锛歿}", result, e);
+            throw e;
+        }
+    }
+
 
     /**
      * 澶勭悊鍗曚釜鎮h�呮暟鎹�
diff --git a/smartor/src/main/resources/mapper/smartor/MedicationDoseInfoMapper.xml b/smartor/src/main/resources/mapper/smartor/MedicationDoseInfoMapper.xml
new file mode 100644
index 0000000..b1d35d7
--- /dev/null
+++ b/smartor/src/main/resources/mapper/smartor/MedicationDoseInfoMapper.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.smartor.mapper.MedicationDoseInfoMapper">
+
+    <resultMap type="com.smartor.domain.MedicationDoseInfo" id="MedicationDoseInfoResult">
+            <result property="id" column="id"/>
+            <result property="medicationItemId" column="medication_item_id"/>
+            <result property="doseSmallPackageRation" column="dose_small_package_ration"/>
+            <result property="dose" column="dose"/>
+            <result property="doseSmallPackageNum" column="dose_small_package_num"/>
+            <result property="doseUnit" column="dose_unit"/>
+            <result property="doseUnitType" column="dose_unit_type"/>
+            <result property="remark" column="remark"/>
+            <result property="createBy" column="create_by"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateBy" column="update_by"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectMedicationDoseInfoVo">
+        select id, medication_item_id, dose_small_package_ration, dose, dose_small_package_num, dose_unit, dose_unit_type, remark, create_by, create_time, update_by, update_time
+        from medication_dose_info
+    </sql>
+
+    <select id="selectMedicationDoseInfoList" parameterType="com.smartor.domain.MedicationDoseInfo"
+            resultMap="MedicationDoseInfoResult">
+        <include refid="selectMedicationDoseInfoVo"/>
+        where 1=1
+            and del_flag=0
+                        <if test="medicationItemId != null ">
+                            and medication_item_id = #{medicationItemId}
+                        </if>
+                        <if test="doseSmallPackageRation != null ">
+                            and dose_small_package_ration = #{doseSmallPackageRation}
+                        </if>
+                        <if test="dose != null ">
+                            and dose = #{dose}
+                        </if>
+                        <if test="doseSmallPackageNum != null ">
+                            and dose_small_package_num = #{doseSmallPackageNum}
+                        </if>
+                        <if test="doseUnit != null  and doseUnit != ''">
+                            and dose_unit = #{doseUnit}
+                        </if>
+                        <if test="doseUnitType != null ">
+                            and dose_unit_type = #{doseUnitType}
+                        </if>
+    </select>
+
+    <select id="selectMedicationDoseInfoById" parameterType="Long"
+            resultMap="MedicationDoseInfoResult">
+            <include refid="selectMedicationDoseInfoVo"/>
+            where id = #{id}
+    </select>
+
+    <insert id="insertMedicationDoseInfo" parameterType="com.smartor.domain.MedicationDoseInfo"            useGeneratedKeys="true" keyProperty="id">
+        insert into medication_dose_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+                    <if test="medicationItemId != null">medication_item_id,
+                    </if>
+                    <if test="doseSmallPackageRation != null">dose_small_package_ration,
+                    </if>
+                    <if test="dose != null">dose,
+                    </if>
+                    <if test="doseSmallPackageNum != null">dose_small_package_num,
+                    </if>
+                    <if test="doseUnit != null">dose_unit,
+                    </if>
+                    <if test="doseUnitType != null">dose_unit_type,
+                    </if>
+                    <if test="remark != null">remark,
+                    </if>
+                    <if test="createBy != null">create_by,
+                    </if>
+                    <if test="createTime != null">create_time,
+                    </if>
+                    <if test="updateBy != null">update_by,
+                    </if>
+                    <if test="updateTime != null">update_time,
+                    </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+                    <if test="medicationItemId != null">#{medicationItemId},
+                    </if>
+                    <if test="doseSmallPackageRation != null">#{doseSmallPackageRation},
+                    </if>
+                    <if test="dose != null">#{dose},
+                    </if>
+                    <if test="doseSmallPackageNum != null">#{doseSmallPackageNum},
+                    </if>
+                    <if test="doseUnit != null">#{doseUnit},
+                    </if>
+                    <if test="doseUnitType != null">#{doseUnitType},
+                    </if>
+                    <if test="remark != null">#{remark},
+                    </if>
+                    <if test="createBy != null">#{createBy},
+                    </if>
+                    <if test="createTime != null">#{createTime},
+                    </if>
+                    <if test="updateBy != null">#{updateBy},
+                    </if>
+                    <if test="updateTime != null">#{updateTime},
+                    </if>
+        </trim>
+    </insert>
+
+    <update id="updateMedicationDoseInfo" parameterType="com.smartor.domain.MedicationDoseInfo">
+        update medication_dose_info
+        <trim prefix="SET" suffixOverrides=",">
+                    <if test="medicationItemId != null">medication_item_id =
+                        #{medicationItemId},
+                    </if>
+                    <if test="doseSmallPackageRation != null">dose_small_package_ration =
+                        #{doseSmallPackageRation},
+                    </if>
+                    <if test="dose != null">dose =
+                        #{dose},
+                    </if>
+                    <if test="doseSmallPackageNum != null">dose_small_package_num =
+                        #{doseSmallPackageNum},
+                    </if>
+                    <if test="doseUnit != null">dose_unit =
+                        #{doseUnit},
+                    </if>
+                    <if test="doseUnitType != null">dose_unit_type =
+                        #{doseUnitType},
+                    </if>
+                    <if test="remark != null">remark =
+                        #{remark},
+                    </if>
+                    <if test="createBy != null">create_by =
+                        #{createBy},
+                    </if>
+                    <if test="createTime != null">create_time =
+                        #{createTime},
+                    </if>
+                    <if test="updateBy != null">update_by =
+                        #{updateBy},
+                    </if>
+                    <if test="updateTime != null">update_time =
+                        #{updateTime},
+                    </if>
+        </trim>
+        where id = #{id}
+    </update>
+
+                <update id="deleteMedicationDoseInfoById" parameterType="Long">
+        update medication_dose_info
+        <trim prefix="SET" suffixOverrides=",">
+            del_flag =1
+        </trim>
+        where  id = #{id}
+    </update>
+
+                            <update id="deleteMedicationDoseInfoByIds" parameterType="String">
+        update  medication_dose_info
+        <trim prefix="SET" suffixOverrides=",">
+            del_flag =1
+        </trim>
+        where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+
+
+
+</mapper>
diff --git a/smartor/src/main/resources/mapper/smartor/MedicationItemMapper.xml b/smartor/src/main/resources/mapper/smartor/MedicationItemMapper.xml
new file mode 100644
index 0000000..e46d8ac
--- /dev/null
+++ b/smartor/src/main/resources/mapper/smartor/MedicationItemMapper.xml
@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.smartor.mapper.MedicationItemMapper">
+
+    <resultMap type="com.smartor.domain.MedicationItem" id="MedicationItemResult">
+        <result property="id" column="id"/>
+        <result property="identificationCode" column="identification_code"/>
+        <result property="wbm" column="wbm"/>
+        <result property="medicationCommonName" column="medication_common_name"/>
+        <result property="manufacturerName" column="manufacturer_name"/>
+        <result property="itemCode" column="item_code"/>
+        <result property="smallLargePackageRatio" column="small_large_package_ratio"/>
+        <result property="remark" column="remark"/>
+        <result property="orgId" column="org_id"/>
+        <result property="itemName" column="item_name"/>
+        <result property="medicationType" column="medication_type"/>
+        <result property="antimicrobialGradeCode" column="antimicrobial_grade_code"/>
+        <result property="licenseNumber" column="license_number"/>
+        <result property="defaultUsageName" column="default_usage_name"/>
+        <result property="specialDrugsName" column="special_drugs_name"/>
+        <result property="antimicrobialGradeName" column="antimicrobial_grade_name"/>
+        <result property="commonPinyin" column="common_pinyin"/>
+        <result property="commonWbm" column="common_wbm"/>
+        <result property="manufacturerId" column="manufacturer_id"/>
+        <result property="defaultUsageId" column="default_usage_id"/>
+        <result property="specification" column="specification"/>
+        <result property="smallPackageUnit" column="small_package_unit"/>
+        <result property="itemId" column="item_id"/>
+        <result property="specialDrugsCode" column="special_drugs_code"/>
+        <result property="pinyin" column="pinyin"/>
+        <result property="doseFormName" column="dose_form_name"/>
+        <result property="largePackageUnit" column="large_package_unit"/>
+        <result property="retailPrice" column="retail_price"/>
+        <result property="status" column="status"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectMedicationItemVo">
+        select id,
+               identification_code,
+               wbm,
+               medication_common_name,
+               manufacturer_name,
+               item_code,
+               small_large_package_ratio,
+               remark,
+               org_id,
+               item_name,
+               medication_type,
+               antimicrobial_grade_code,
+               license_number,
+               default_usage_name,
+               special_drugs_name,
+               antimicrobial_grade_name,
+               common_pinyin,
+               common_wbm,
+               manufacturer_id,
+               default_usage_id,
+               specification,
+               small_package_unit,
+               item_id,
+               special_drugs_code,
+               pinyin,
+               dose_form_name,
+               large_package_unit,
+               retail_price,
+               status,
+               create_by,
+               create_time,
+               update_by,
+               update_time
+        from medication_item
+    </sql>
+
+    <select id="selectMedicationItemList" parameterType="com.smartor.domain.MedicationItem"
+            resultMap="MedicationItemResult">
+        <include refid="selectMedicationItemVo"/>
+        where 1=1
+        and del_flag=0
+        <if test="identificationCode != null  and identificationCode != ''">
+            and identification_code = #{identificationCode}
+        </if>
+        <if test="wbm != null  and wbm != ''">
+            and wbm = #{wbm}
+        </if>
+        <if test="medicationCommonName != null  and medicationCommonName != ''">
+            and medication_common_name like concat('%', #{medicationCommonName}, '%')
+        </if>
+        <if test="manufacturerName != null  and manufacturerName != ''">
+            and manufacturer_name like concat('%', #{manufacturerName}, '%')
+        </if>
+        <if test="itemCode != null  and itemCode != ''">
+            and item_code = #{itemCode}
+        </if>
+        <if test="smallLargePackageRatio != null ">
+            and small_large_package_ratio = #{smallLargePackageRatio}
+        </if>
+        <if test="orgId != null ">
+            and org_id = #{orgId}
+        </if>
+        <if test="itemName != null  and itemName != ''">
+            and item_name like concat('%', #{itemName}, '%')
+        </if>
+        <if test="medicationType != null  and medicationType != ''">
+            and medication_type = #{medicationType}
+        </if>
+        <if test="antimicrobialGradeCode != null  and antimicrobialGradeCode != ''">
+            and antimicrobial_grade_code = #{antimicrobialGradeCode}
+        </if>
+        <if test="licenseNumber != null  and licenseNumber != ''">
+            and license_number = #{licenseNumber}
+        </if>
+        <if test="defaultUsageName != null  and defaultUsageName != ''">
+            and default_usage_name like concat('%', #{defaultUsageName}, '%')
+        </if>
+        <if test="specialDrugsName != null  and specialDrugsName != ''">
+            and special_drugs_name like concat('%', #{specialDrugsName}, '%')
+        </if>
+        <if test="antimicrobialGradeName != null  and antimicrobialGradeName != ''">
+            and antimicrobial_grade_name like concat('%', #{antimicrobialGradeName}, '%')
+        </if>
+        <if test="commonPinyin != null  and commonPinyin != ''">
+            and common_pinyin = #{commonPinyin}
+        </if>
+        <if test="commonWbm != null  and commonWbm != ''">
+            and common_wbm = #{commonWbm}
+        </if>
+        <if test="manufacturerId != null ">
+            and manufacturer_id = #{manufacturerId}
+        </if>
+        <if test="defaultUsageId != null ">
+            and default_usage_id = #{defaultUsageId}
+        </if>
+        <if test="specification != null  and specification != ''">
+            and specification = #{specification}
+        </if>
+        <if test="smallPackageUnit != null  and smallPackageUnit != ''">
+            and small_package_unit = #{smallPackageUnit}
+        </if>
+        <if test="itemId != null ">
+            and item_id = #{itemId}
+        </if>
+        <if test="specialDrugsCode != null  and specialDrugsCode != ''">
+            and special_drugs_code = #{specialDrugsCode}
+        </if>
+        <if test="pinyin != null  and pinyin != ''">
+            and pinyin = #{pinyin}
+        </if>
+        <if test="doseFormName != null  and doseFormName != ''">
+            and dose_form_name like concat('%', #{doseFormName}, '%')
+        </if>
+        <if test="largePackageUnit != null  and largePackageUnit != ''">
+            and large_package_unit = #{largePackageUnit}
+        </if>
+        <if test="retailPrice != null ">
+            and retail_price = #{retailPrice}
+        </if>
+        <if test="status != null ">
+            and status = #{status}
+        </if>
+    </select>
+
+    <select id="selectMedicationItemById" parameterType="Long"
+            resultMap="MedicationItemResult">
+        <include refid="selectMedicationItemVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertMedicationItem" parameterType="com.smartor.domain.MedicationItem" useGeneratedKeys="true"
+            keyProperty="id">
+        insert into medication_item
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="identificationCode != null">identification_code,
+            </if>
+            <if test="wbm != null">wbm,
+            </if>
+            <if test="medicationCommonName != null">medication_common_name,
+            </if>
+            <if test="manufacturerName != null">manufacturer_name,
+            </if>
+            <if test="itemCode != null">item_code,
+            </if>
+            <if test="smallLargePackageRatio != null">small_large_package_ratio,
+            </if>
+            <if test="remark != null">remark,
+            </if>
+            <if test="orgId != null">org_id,
+            </if>
+            <if test="itemName != null">item_name,
+            </if>
+            <if test="medicationType != null">medication_type,
+            </if>
+            <if test="antimicrobialGradeCode != null">antimicrobial_grade_code,
+            </if>
+            <if test="licenseNumber != null">license_number,
+            </if>
+            <if test="defaultUsageName != null">default_usage_name,
+            </if>
+            <if test="specialDrugsName != null">special_drugs_name,
+            </if>
+            <if test="antimicrobialGradeName != null">antimicrobial_grade_name,
+            </if>
+            <if test="commonPinyin != null">common_pinyin,
+            </if>
+            <if test="commonWbm != null">common_wbm,
+            </if>
+            <if test="manufacturerId != null">manufacturer_id,
+            </if>
+            <if test="defaultUsageId != null">default_usage_id,
+            </if>
+            <if test="specification != null">specification,
+            </if>
+            <if test="smallPackageUnit != null">small_package_unit,
+            </if>
+            <if test="itemId != null">item_id,
+            </if>
+            <if test="specialDrugsCode != null">special_drugs_code,
+            </if>
+            <if test="pinyin != null">pinyin,
+            </if>
+            <if test="doseFormName != null">dose_form_name,
+            </if>
+            <if test="largePackageUnit != null">large_package_unit,
+            </if>
+            <if test="retailPrice != null">retail_price,
+            </if>
+            <if test="status != null">status,
+            </if>
+            <if test="createBy != null">create_by,
+            </if>
+            <if test="createTime != null">create_time,
+            </if>
+            <if test="updateBy != null">update_by,
+            </if>
+            <if test="updateTime != null">update_time,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="identificationCode != null">#{identificationCode},
+            </if>
+            <if test="wbm != null">#{wbm},
+            </if>
+            <if test="medicationCommonName != null">#{medicationCommonName},
+            </if>
+            <if test="manufacturerName != null">#{manufacturerName},
+            </if>
+            <if test="itemCode != null">#{itemCode},
+            </if>
+            <if test="smallLargePackageRatio != null">#{smallLargePackageRatio},
+            </if>
+            <if test="remark != null">#{remark},
+            </if>
+            <if test="orgId != null">#{orgId},
+            </if>
+            <if test="itemName != null">#{itemName},
+            </if>
+            <if test="medicationType != null">#{medicationType},
+            </if>
+            <if test="antimicrobialGradeCode != null">#{antimicrobialGradeCode},
+            </if>
+            <if test="licenseNumber != null">#{licenseNumber},
+            </if>
+            <if test="defaultUsageName != null">#{defaultUsageName},
+            </if>
+            <if test="specialDrugsName != null">#{specialDrugsName},
+            </if>
+            <if test="antimicrobialGradeName != null">#{antimicrobialGradeName},
+            </if>
+            <if test="commonPinyin != null">#{commonPinyin},
+            </if>
+            <if test="commonWbm != null">#{commonWbm},
+            </if>
+            <if test="manufacturerId != null">#{manufacturerId},
+            </if>
+            <if test="defaultUsageId != null">#{defaultUsageId},
+            </if>
+            <if test="specification != null">#{specification},
+            </if>
+            <if test="smallPackageUnit != null">#{smallPackageUnit},
+            </if>
+            <if test="itemId != null">#{itemId},
+            </if>
+            <if test="specialDrugsCode != null">#{specialDrugsCode},
+            </if>
+            <if test="pinyin != null">#{pinyin},
+            </if>
+            <if test="doseFormName != null">#{doseFormName},
+            </if>
+            <if test="largePackageUnit != null">#{largePackageUnit},
+            </if>
+            <if test="retailPrice != null">#{retailPrice},
+            </if>
+            <if test="status != null">#{status},
+            </if>
+            <if test="createBy != null">#{createBy},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateBy != null">#{updateBy},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="updateMedicationItem" parameterType="com.smartor.domain.MedicationItem">
+        update medication_item
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="identificationCode != null">identification_code =
+                #{identificationCode},
+            </if>
+            <if test="wbm != null">wbm =
+                #{wbm},
+            </if>
+            <if test="medicationCommonName != null">medication_common_name =
+                #{medicationCommonName},
+            </if>
+            <if test="manufacturerName != null">manufacturer_name =
+                #{manufacturerName},
+            </if>
+            <if test="itemCode != null">item_code =
+                #{itemCode},
+            </if>
+            <if test="smallLargePackageRatio != null">small_large_package_ratio =
+                #{smallLargePackageRatio},
+            </if>
+            <if test="remark != null">remark =
+                #{remark},
+            </if>
+            <if test="orgId != null">org_id =
+                #{orgId},
+            </if>
+            <if test="itemName != null">item_name =
+                #{itemName},
+            </if>
+            <if test="medicationType != null">medication_type =
+                #{medicationType},
+            </if>
+            <if test="antimicrobialGradeCode != null">antimicrobial_grade_code =
+                #{antimicrobialGradeCode},
+            </if>
+            <if test="licenseNumber != null">license_number =
+                #{licenseNumber},
+            </if>
+            <if test="defaultUsageName != null">default_usage_name =
+                #{defaultUsageName},
+            </if>
+            <if test="specialDrugsName != null">special_drugs_name =
+                #{specialDrugsName},
+            </if>
+            <if test="antimicrobialGradeName != null">antimicrobial_grade_name =
+                #{antimicrobialGradeName},
+            </if>
+            <if test="commonPinyin != null">common_pinyin =
+                #{commonPinyin},
+            </if>
+            <if test="commonWbm != null">common_wbm =
+                #{commonWbm},
+            </if>
+            <if test="manufacturerId != null">manufacturer_id =
+                #{manufacturerId},
+            </if>
+            <if test="defaultUsageId != null">default_usage_id =
+                #{defaultUsageId},
+            </if>
+            <if test="specification != null">specification =
+                #{specification},
+            </if>
+            <if test="smallPackageUnit != null">small_package_unit =
+                #{smallPackageUnit},
+            </if>
+            <if test="itemId != null">item_id =
+                #{itemId},
+            </if>
+            <if test="specialDrugsCode != null">special_drugs_code =
+                #{specialDrugsCode},
+            </if>
+            <if test="pinyin != null">pinyin =
+                #{pinyin},
+            </if>
+            <if test="doseFormName != null">dose_form_name =
+                #{doseFormName},
+            </if>
+            <if test="largePackageUnit != null">large_package_unit =
+                #{largePackageUnit},
+            </if>
+            <if test="retailPrice != null">retail_price =
+                #{retailPrice},
+            </if>
+            <if test="status != null">status =
+                #{status},
+            </if>
+            <if test="createBy != null">create_by =
+                #{createBy},
+            </if>
+            <if test="createTime != null">create_time =
+                #{createTime},
+            </if>
+            <if test="updateBy != null">update_by =
+                #{updateBy},
+            </if>
+            <if test="updateTime != null">update_time =
+                #{updateTime},
+            </if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteMedicationItemById" parameterType="Long">
+        update medication_item
+        <trim prefix="SET" suffixOverrides=",">
+            del_flag =1
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteMedicationItemByIds" parameterType="String">
+        update medication_item
+        <trim prefix="SET" suffixOverrides=",">
+            del_flag =1
+        </trim>
+        where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+
+</mapper>
diff --git a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
index 28ae015..b176b00 100644
--- a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -75,11 +75,13 @@
         <result property="managementDoctor" column="management_doctor"/>
         <result property="managementDoctorCode" column="management_doctor_code"/>
         <result property="campusid" column="campusid"/>
+        <result property="inhospMydFlag" column="inhosp_myd_flag"/>
     </resultMap>
 
     <sql id="selectPatMedInhospVo">
         select inhospid,
                patname,
+               inhosp_myd_flag,
                campusid,
                fuflag,
                management_doctor,
@@ -213,6 +215,7 @@
         b.futypedesc,
         b.fuadvice,
         b.fuspecialadvice,
+        b.inhosp_myd_flag,
         a.idcardno
         FROM
         pat_med_inhosp b
@@ -242,6 +245,7 @@
             concat('%', #{hospitaldistrictname}, '%')
         </if>
         <if test="endtime != null ">and b.endtime = #{endtime}</if>
+        <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if>
         <if test="managementDoctor != null ">and b.management_doctor = #{managementDoctor}</if>
         <if test="managementDoctorCode != null ">and b.management_doctor_code = #{managementDoctorCode}</if>
         <if test="inhospno != null ">and b.inhospno = #{inhospno}</if>
@@ -397,10 +401,12 @@
         b.futypecode,
         b.futypedesc,
         b.fuadvice,
+        b.inhosp_myd_flag,
         b.fuspecialadvice
         FROM
         pat_med_inhosp b
         where 1=1
+        <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if>
         <if test="orgid != null and orgid != ''">
             and orgid = #{orgid}
         </if>
@@ -477,6 +483,7 @@
         b.futypedesc,
         b.fuadvice,
         b.fuspecialadvice,
+        b.inhosp_myd_flag,
         b.schemetime
         FROM
         pat_med_inhosp b,
@@ -486,6 +493,7 @@
         and b.del_flag=0
         and a.id = b.patid
         AND a.idcardno != ''
+        <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if>
         <if test="orgid != null and orgid != ''">
             and a.orgid = #{orgid}
         </if>
@@ -553,6 +561,7 @@
         <if test="cry != null and cry == 0 ">and inhospstate=0</if>
         <if test="cry != null and cry == 1 ">and inhospstate=1</if>
         <if test="cry != null and cry == 3 ">and inhospstate=3</if>
+        <if test="inhospMydFlag != null ">and inhosp_myd_flag = #{inhospMydFlag}</if>
         <if test="serialnum != null">and serialnum = #{serialnum}</if>
         <if test="hospitalname != null">and hospitalname = #{hospitalname}</if>
         <if test="hospitalcode != null">and hospitalcode = #{hospitalcode}</if>
@@ -689,6 +698,7 @@
             <if test="managementDoctor != null ">management_doctor,</if>
             <if test="managementDoctorCode != null ">management_doctor_code,</if>
             <if test="campusid != null ">campusid,</if>
+            <if test="inhospMydFlag != null ">inhosp_myd_flag,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="serialnum != null">#{serialnum},</if>
@@ -756,6 +766,7 @@
             <if test="managementDoctor != null ">#{managementDoctor},</if>
             <if test="managementDoctorCode != null ">#{managementDoctorCode},</if>
             <if test="campusid != null ">#{campusid},</if>
+            <if test="inhospMydFlag != null ">#{inhospMydFlag},</if>
         </trim>
     </insert>
 
@@ -774,7 +785,7 @@
         nurse_id, nurse_name, out_way_id, out_way_name, guid,
         operator, operator_id, inhospno, remark,
         fuflag, fudate, fuperiod, futypecode, futypedesc, fuadvice, fuspecialadvice, management_doctor,
-        management_doctor_doctor,campusid
+        management_doctor_doctor,campusid, inhosp_myd_flag
         )
         values
         <foreach collection="list" item="item" separator=",">
@@ -796,7 +807,7 @@
             #{item.nurseId}, #{item.nurseName}, #{item.outWayId}, #{item.outWayName}, #{item.guid},
             #{item.operator}, #{item.operatorId}, #{item.inhospno}, #{item.remark},
             #{item.fuflag}, #{item.fudate}, #{item.fuperiod}, #{item.futypecode}, #{item.futypedesc}, #{item.fuadvice},
-            #{item.fuspecialadvice}, #{item.managementDoctor}, #{item.managementDoctorCode}, #{item.campusid}
+            #{item.fuspecialadvice}, #{item.managementDoctor}, #{item.managementDoctorCode}, #{item.campusid}, #{item.inhospMydFlag}
             )
         </foreach>
     </insert>
@@ -868,8 +879,8 @@
             <if test="fuspecialadvice != null ">fuspecialadvice = #{fuspecialadvice},</if>
             <if test="managementDoctor != null ">management_doctor = #{managementDoctor},</if>
             <if test="managementDoctorCode != null ">management_doctor_code = #{managementDoctorCode},</if>
-            <if test="campusid != null ">campusid = #{campusid}</if>
-
+            <if test="campusid != null ">campusid = #{campusid},</if>
+            <if test="inhospMydFlag != null ">inhosp_myd_flag = #{inhospMydFlag},</if>
         </trim>
         where inhospid = #{inhospid}
     </update>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceAppointRecordMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceAppointRecordMapper.xml
new file mode 100644
index 0000000..c25e92e
--- /dev/null
+++ b/smartor/src/main/resources/mapper/smartor/ServiceAppointRecordMapper.xml
@@ -0,0 +1,803 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.smartor.mapper.ServiceAppointRecordMapper">
+
+    <resultMap type="com.smartor.domain.ServiceAppointRecord" id="ServiceAppointRecordResult">
+        <result property="id" column="id"/>
+        <result property="appointRecSn" column="appoint_rec_sn"/>
+        <result property="changeAppointRecSn" column="change_appoint_rec_sn"/>
+        <result property="orgCode" column="org_code"/>
+        <result property="patFileSn" column="pat_file_sn"/>
+        <result property="patMediaSn" column="pat_media_sn"/>
+        <result property="patMediaNum" column="pat_media_num"/>
+        <result property="patCateSn" column="pat_cate_sn"/>
+        <result property="patNatureSn" column="pat_nature_sn"/>
+        <result property="patFileName" column="pat_file_name"/>
+        <result property="patFileGender" column="pat_file_gender"/>
+        <result property="patAge" column="pat_age"/>
+        <result property="patBirthday" column="pat_birthday"/>
+        <result property="patCardTypeCode" column="pat_card_type_code"/>
+        <result property="patCardType" column="pat_card_type"/>
+        <result property="patIdCardNum" column="pat_id_card_num"/>
+        <result property="patAddr" column="pat_addr"/>
+        <result property="patTel" column="pat_tel"/>
+        <result property="patWayCode" column="pat_way_code"/>
+        <result property="patWay" column="pat_way"/>
+        <result property="appointTypeSn" column="appoint_type_sn"/>
+        <result property="appointDate" column="appoint_date"/>
+        <result property="appointOperatorId" column="appoint_operator_id"/>
+        <result property="appointOperatorName" column="appoint_operator_name"/>
+        <result property="appointRegistDate" column="appoint_regist_date"/>
+        <result property="registerScheduleSn" column="register_schedule_sn"/>
+        <result property="outpatCateSn" column="outpat_cate_sn"/>
+        <result property="outpatCateName" column="outpat_cate_name"/>
+        <result property="registDeptCode" column="regist_dept_code"/>
+        <result property="registDeptName" column="regist_dept_name"/>
+        <result property="deptPinyinCode" column="dept_pinyin_code"/>
+        <result property="registDoctCode" column="regist_doct_code"/>
+        <result property="registDoctName" column="regist_doct_name"/>
+        <result property="staffPinyinCode" column="staff_pinyin_code"/>
+        <result property="registTimeCate" column="regist_time_cate"/>
+        <result property="patiRegistSn" column="pati_regist_sn"/>
+        <result property="scheduleRegistCharge" column="schedule_regist_charge"/>
+        <result property="registRecSn" column="regist_rec_sn"/>
+        <result property="regUserSn" column="reg_user_sn"/>
+        <result property="regUserName" column="reg_user_name"/>
+        <result property="regOptTime" column="reg_opt_time"/>
+        <result property="revokeUserSn" column="revoke_user_sn"/>
+        <result property="revokeUserName" column="revoke_user_name"/>
+        <result property="revokeOptTime" column="revoke_opt_time"/>
+        <result property="withdrawalTime" column="withdrawal_time"/>
+        <result property="scheduleStatusFlag" column="schedule_status_flag"/>
+        <result property="scheduleMemoDesc" column="schedule_memo_desc"/>
+        <result property="scheduleCredenceNum" column="schedule_credence_num"/>
+        <result property="registTimeRange" column="regist_time_range"/>
+        <result property="scheduleDetailSn" column="schedule_detail_sn"/>
+        <result property="treatDate" column="treat_date"/>
+        <result property="treatDoctCode" column="treat_doct_code"/>
+        <result property="treatDoctName" column="treat_doct_name"/>
+        <result property="regWayCode" column="reg_way_code"/>
+        <result property="regWay" column="reg_way"/>
+        <result property="regSystemWayCode" column="reg_system_way_code"/>
+        <result property="regSystemWay" column="reg_system_way"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="visitFlag" column="visit_flag"/>
+        <result property="senderId" column="sender_id"/>
+        <result property="senderName" column="sender_name"/>
+        <result property="sendTime" column="send_time"/>
+    </resultMap>
+
+    <sql id="selectServiceAppointRecordVo">
+        select id,
+               appoint_rec_sn,
+               change_appoint_rec_sn,
+               org_code,
+               pat_file_sn,
+               pat_media_sn,
+               pat_media_num,
+               pat_cate_sn,
+               pat_nature_sn,
+               pat_file_name,
+               pat_file_gender,
+               pat_age,
+               pat_birthday,
+               pat_card_type_code,
+               pat_card_type,
+               pat_id_card_num,
+               pat_addr,
+               pat_tel,
+               pat_way_code,
+               pat_way,
+               appoint_type_sn,
+               appoint_date,
+               appoint_operator_id,
+               appoint_operator_name,
+               appoint_regist_date,
+               register_schedule_sn,
+               outpat_cate_sn,
+               outpat_cate_name,
+               regist_dept_code,
+               regist_dept_name,
+               dept_pinyin_code,
+               regist_doct_code,
+               regist_doct_name,
+               staff_pinyin_code,
+               regist_time_cate,
+               pati_regist_sn,
+               schedule_regist_charge,
+               regist_rec_sn,
+               reg_user_sn,
+               reg_user_name,
+               reg_opt_time,
+               revoke_user_sn,
+               revoke_user_name,
+               revoke_opt_time,
+               withdrawal_time,
+               schedule_status_flag,
+               schedule_memo_desc,
+               schedule_credence_num,
+               regist_time_range,
+               schedule_detail_sn,
+               treat_date,
+               treat_doct_code,
+               treat_doct_name,
+               reg_way_code,
+               reg_way,
+               reg_system_way_code,
+               reg_system_way,
+               create_time,
+               update_time,
+               visit_flag,
+               sender_id,
+               sender_name,
+               send_time
+        from service_appoint_record
+    </sql>
+
+    <select id="selectServiceAppointRecordList" parameterType="com.smartor.domain.ServiceAppointRecord"
+            resultMap="ServiceAppointRecordResult">
+        <include refid="selectServiceAppointRecordVo"/>
+        where 1=1
+        and del_flag=0
+        <if test="appointRecSn != null  and appointRecSn != ''">
+            and appoint_rec_sn = #{appointRecSn}
+        </if>
+        <if test="changeAppointRecSn != null  and changeAppointRecSn != ''">
+            and change_appoint_rec_sn = #{changeAppointRecSn}
+        </if>
+        <if test="orgCode != null  and orgCode != ''">
+            and org_code = #{orgCode}
+        </if>
+        <if test="patFileSn != null  and patFileSn != ''">
+            and pat_file_sn = #{patFileSn}
+        </if>
+        <if test="patMediaSn != null  and patMediaSn != ''">
+            and pat_media_sn = #{patMediaSn}
+        </if>
+        <if test="patMediaNum != null  and patMediaNum != ''">
+            and pat_media_num = #{patMediaNum}
+        </if>
+        <if test="patCateSn != null  and patCateSn != ''">
+            and pat_cate_sn = #{patCateSn}
+        </if>
+        <if test="patNatureSn != null  and patNatureSn != ''">
+            and pat_nature_sn = #{patNatureSn}
+        </if>
+        <if test="patFileName != null  and patFileName != ''">
+            and pat_file_name like concat('%', #{patFileName}, '%')
+        </if>
+        <if test="patFileGender != null  and patFileGender != ''">
+            and pat_file_gender = #{patFileGender}
+        </if>
+        <if test="patAge != null  and patAge != ''">
+            and pat_age = #{patAge}
+        </if>
+        <if test="patBirthday != null  and patBirthday != ''">
+            and pat_birthday = #{patBirthday}
+        </if>
+        <if test="patCardTypeCode != null  and patCardTypeCode != ''">
+            and pat_card_type_code = #{patCardTypeCode}
+        </if>
+        <if test="patCardType != null  and patCardType != ''">
+            and pat_card_type = #{patCardType}
+        </if>
+        <if test="patIdCardNum != null  and patIdCardNum != ''">
+            and pat_id_card_num = #{patIdCardNum}
+        </if>
+        <if test="patAddr != null  and patAddr != ''">
+            and pat_addr = #{patAddr}
+        </if>
+        <if test="patTel != null  and patTel != ''">
+            and pat_tel = #{patTel}
+        </if>
+        <if test="patWayCode != null  and patWayCode != ''">
+            and pat_way_code = #{patWayCode}
+        </if>
+        <if test="patWay != null  and patWay != ''">
+            and pat_way = #{patWay}
+        </if>
+        <if test="appointTypeSn != null  and appointTypeSn != ''">
+            and appoint_type_sn = #{appointTypeSn}
+        </if>
+        <if test="appointDate != null  and appointDate != ''">
+            and appoint_date = #{appointDate}
+        </if>
+        <if test="appointOperatorId != null  and appointOperatorId != ''">
+            and appoint_operator_id = #{appointOperatorId}
+        </if>
+        <if test="appointOperatorName != null  and appointOperatorName != ''">
+            and appoint_operator_name like concat('%', #{appointOperatorName}, '%')
+        </if>
+        <if test="appointRegistDate != null  and appointRegistDate != ''">
+            and appoint_regist_date = #{appointRegistDate}
+        </if>
+        <if test="registerScheduleSn != null  and registerScheduleSn != ''">
+            and register_schedule_sn = #{registerScheduleSn}
+        </if>
+        <if test="outpatCateSn != null  and outpatCateSn != ''">
+            and outpat_cate_sn = #{outpatCateSn}
+        </if>
+        <if test="outpatCateName != null  and outpatCateName != ''">
+            and outpat_cate_name like concat('%', #{outpatCateName}, '%')
+        </if>
+        <if test="registDeptCode != null  and registDeptCode != ''">
+            and regist_dept_code = #{registDeptCode}
+        </if>
+        <if test="registDeptName != null  and registDeptName != ''">
+            and regist_dept_name like concat('%', #{registDeptName}, '%')
+        </if>
+        <if test="deptPinyinCode != null  and deptPinyinCode != ''">
+            and dept_pinyin_code = #{deptPinyinCode}
+        </if>
+        <if test="registDoctCode != null  and registDoctCode != ''">
+            and regist_doct_code = #{registDoctCode}
+        </if>
+        <if test="registDoctName != null  and registDoctName != ''">
+            and regist_doct_name like concat('%', #{registDoctName}, '%')
+        </if>
+        <if test="staffPinyinCode != null  and staffPinyinCode != ''">
+            and staff_pinyin_code = #{staffPinyinCode}
+        </if>
+        <if test="registTimeCate != null ">
+            and regist_time_cate = #{registTimeCate}
+        </if>
+        <if test="patiRegistSn != null ">
+            and pati_regist_sn = #{patiRegistSn}
+        </if>
+        <if test="scheduleRegistCharge != null ">
+            and schedule_regist_charge = #{scheduleRegistCharge}
+        </if>
+        <if test="registRecSn != null  and registRecSn != ''">
+            and regist_rec_sn = #{registRecSn}
+        </if>
+        <if test="regUserSn != null  and regUserSn != ''">
+            and reg_user_sn = #{regUserSn}
+        </if>
+        <if test="regUserName != null  and regUserName != ''">
+            and reg_user_name like concat('%', #{regUserName}, '%')
+        </if>
+        <if test="regOptTime != null  and regOptTime != ''">
+            and reg_opt_time = #{regOptTime}
+        </if>
+        <if test="revokeUserSn != null  and revokeUserSn != ''">
+            and revoke_user_sn = #{revokeUserSn}
+        </if>
+        <if test="revokeUserName != null  and revokeUserName != ''">
+            and revoke_user_name like concat('%', #{revokeUserName}, '%')
+        </if>
+        <if test="revokeOptTime != null  and revokeOptTime != ''">
+            and revoke_opt_time = #{revokeOptTime}
+        </if>
+        <if test="withdrawalTime != null  and withdrawalTime != ''">
+            and withdrawal_time = #{withdrawalTime}
+        </if>
+        <if test="scheduleStatusFlag != null ">
+            and schedule_status_flag = #{scheduleStatusFlag}
+        </if>
+        <if test="scheduleMemoDesc != null  and scheduleMemoDesc != ''">
+            and schedule_memo_desc = #{scheduleMemoDesc}
+        </if>
+        <if test="scheduleCredenceNum != null  and scheduleCredenceNum != ''">
+            and schedule_credence_num = #{scheduleCredenceNum}
+        </if>
+        <if test="registTimeRange != null  and registTimeRange != ''">
+            and regist_time_range = #{registTimeRange}
+        </if>
+        <if test="scheduleDetailSn != null  and scheduleDetailSn != ''">
+            and schedule_detail_sn = #{scheduleDetailSn}
+        </if>
+        <if test="treatDate != null  and treatDate != ''">
+            and treat_date = #{treatDate}
+        </if>
+        <if test="treatDoctCode != null  and treatDoctCode != ''">
+            and treat_doct_code = #{treatDoctCode}
+        </if>
+        <if test="treatDoctName != null  and treatDoctName != ''">
+            and treat_doct_name like concat('%', #{treatDoctName}, '%')
+        </if>
+        <if test="regWayCode != null  and regWayCode != ''">
+            and reg_way_code = #{regWayCode}
+        </if>
+        <if test="regWay != null  and regWay != ''">
+            and reg_way = #{regWay}
+        </if>
+        <if test="regSystemWayCode != null  and regSystemWayCode != ''">
+            and reg_system_way_code = #{regSystemWayCode}
+        </if>
+        <if test="regSystemWay != null  and regSystemWay != ''">
+            and reg_system_way = #{regSystemWay}
+        </if>
+        <if test="visitFlag != null ">
+            and visit_flag = #{visitFlag}
+        </if>
+        <if test="senderId != null  and senderId != ''">
+            and sender_id = #{senderId}
+        </if>
+        <if test="senderName != null  and senderName != ''">
+            and sender_name like concat('%', #{senderName}, '%')
+        </if>
+        <if test="sendTime != null  and sendTime != ''">
+            and send_time = #{sendTime}
+        </if>
+    </select>
+
+    <select id="selectServiceAppointRecordById" parameterType="Long"
+            resultMap="ServiceAppointRecordResult">
+        <include refid="selectServiceAppointRecordVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertServiceAppointRecord" parameterType="com.smartor.domain.ServiceAppointRecord"
+            useGeneratedKeys="true" keyProperty="id">
+        insert into service_appoint_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="appointRecSn != null">appoint_rec_sn,
+            </if>
+            <if test="changeAppointRecSn != null">change_appoint_rec_sn,
+            </if>
+            <if test="orgCode != null">org_code,
+            </if>
+            <if test="patFileSn != null">pat_file_sn,
+            </if>
+            <if test="patMediaSn != null">pat_media_sn,
+            </if>
+            <if test="patMediaNum != null">pat_media_num,
+            </if>
+            <if test="patCateSn != null">pat_cate_sn,
+            </if>
+            <if test="patNatureSn != null">pat_nature_sn,
+            </if>
+            <if test="patFileName != null">pat_file_name,
+            </if>
+            <if test="patFileGender != null">pat_file_gender,
+            </if>
+            <if test="patAge != null">pat_age,
+            </if>
+            <if test="patBirthday != null">pat_birthday,
+            </if>
+            <if test="patCardTypeCode != null">pat_card_type_code,
+            </if>
+            <if test="patCardType != null">pat_card_type,
+            </if>
+            <if test="patIdCardNum != null">pat_id_card_num,
+            </if>
+            <if test="patAddr != null">pat_addr,
+            </if>
+            <if test="patTel != null">pat_tel,
+            </if>
+            <if test="patWayCode != null">pat_way_code,
+            </if>
+            <if test="patWay != null">pat_way,
+            </if>
+            <if test="appointTypeSn != null">appoint_type_sn,
+            </if>
+            <if test="appointDate != null">appoint_date,
+            </if>
+            <if test="appointOperatorId != null">appoint_operator_id,
+            </if>
+            <if test="appointOperatorName != null">appoint_operator_name,
+            </if>
+            <if test="appointRegistDate != null">appoint_regist_date,
+            </if>
+            <if test="registerScheduleSn != null">register_schedule_sn,
+            </if>
+            <if test="outpatCateSn != null">outpat_cate_sn,
+            </if>
+            <if test="outpatCateName != null">outpat_cate_name,
+            </if>
+            <if test="registDeptCode != null">regist_dept_code,
+            </if>
+            <if test="registDeptName != null">regist_dept_name,
+            </if>
+            <if test="deptPinyinCode != null">dept_pinyin_code,
+            </if>
+            <if test="registDoctCode != null">regist_doct_code,
+            </if>
+            <if test="registDoctName != null">regist_doct_name,
+            </if>
+            <if test="staffPinyinCode != null">staff_pinyin_code,
+            </if>
+            <if test="registTimeCate != null">regist_time_cate,
+            </if>
+            <if test="patiRegistSn != null">pati_regist_sn,
+            </if>
+            <if test="scheduleRegistCharge != null">schedule_regist_charge,
+            </if>
+            <if test="registRecSn != null">regist_rec_sn,
+            </if>
+            <if test="regUserSn != null">reg_user_sn,
+            </if>
+            <if test="regUserName != null">reg_user_name,
+            </if>
+            <if test="regOptTime != null">reg_opt_time,
+            </if>
+            <if test="revokeUserSn != null">revoke_user_sn,
+            </if>
+            <if test="revokeUserName != null">revoke_user_name,
+            </if>
+            <if test="revokeOptTime != null">revoke_opt_time,
+            </if>
+            <if test="withdrawalTime != null">withdrawal_time,
+            </if>
+            <if test="scheduleStatusFlag != null">schedule_status_flag,
+            </if>
+            <if test="scheduleMemoDesc != null">schedule_memo_desc,
+            </if>
+            <if test="scheduleCredenceNum != null">schedule_credence_num,
+            </if>
+            <if test="registTimeRange != null">regist_time_range,
+            </if>
+            <if test="scheduleDetailSn != null">schedule_detail_sn,
+            </if>
+            <if test="treatDate != null">treat_date,
+            </if>
+            <if test="treatDoctCode != null">treat_doct_code,
+            </if>
+            <if test="treatDoctName != null">treat_doct_name,
+            </if>
+            <if test="regWayCode != null">reg_way_code,
+            </if>
+            <if test="regWay != null">reg_way,
+            </if>
+            <if test="regSystemWayCode != null">reg_system_way_code,
+            </if>
+            <if test="regSystemWay != null">reg_system_way,
+            </if>
+            <if test="createTime != null">create_time,
+            </if>
+            <if test="updateTime != null">update_time,
+            </if>
+            <if test="visitFlag != null">visit_flag,
+            </if>
+            <if test="senderId != null">sender_id,
+            </if>
+            <if test="senderName != null">sender_name,
+            </if>
+            <if test="sendTime != null">send_time,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="appointRecSn != null">#{appointRecSn},
+            </if>
+            <if test="changeAppointRecSn != null">#{changeAppointRecSn},
+            </if>
+            <if test="orgCode != null">#{orgCode},
+            </if>
+            <if test="patFileSn != null">#{patFileSn},
+            </if>
+            <if test="patMediaSn != null">#{patMediaSn},
+            </if>
+            <if test="patMediaNum != null">#{patMediaNum},
+            </if>
+            <if test="patCateSn != null">#{patCateSn},
+            </if>
+            <if test="patNatureSn != null">#{patNatureSn},
+            </if>
+            <if test="patFileName != null">#{patFileName},
+            </if>
+            <if test="patFileGender != null">#{patFileGender},
+            </if>
+            <if test="patAge != null">#{patAge},
+            </if>
+            <if test="patBirthday != null">#{patBirthday},
+            </if>
+            <if test="patCardTypeCode != null">#{patCardTypeCode},
+            </if>
+            <if test="patCardType != null">#{patCardType},
+            </if>
+            <if test="patIdCardNum != null">#{patIdCardNum},
+            </if>
+            <if test="patAddr != null">#{patAddr},
+            </if>
+            <if test="patTel != null">#{patTel},
+            </if>
+            <if test="patWayCode != null">#{patWayCode},
+            </if>
+            <if test="patWay != null">#{patWay},
+            </if>
+            <if test="appointTypeSn != null">#{appointTypeSn},
+            </if>
+            <if test="appointDate != null">#{appointDate},
+            </if>
+            <if test="appointOperatorId != null">#{appointOperatorId},
+            </if>
+            <if test="appointOperatorName != null">#{appointOperatorName},
+            </if>
+            <if test="appointRegistDate != null">#{appointRegistDate},
+            </if>
+            <if test="registerScheduleSn != null">#{registerScheduleSn},
+            </if>
+            <if test="outpatCateSn != null">#{outpatCateSn},
+            </if>
+            <if test="outpatCateName != null">#{outpatCateName},
+            </if>
+            <if test="registDeptCode != null">#{registDeptCode},
+            </if>
+            <if test="registDeptName != null">#{registDeptName},
+            </if>
+            <if test="deptPinyinCode != null">#{deptPinyinCode},
+            </if>
+            <if test="registDoctCode != null">#{registDoctCode},
+            </if>
+            <if test="registDoctName != null">#{registDoctName},
+            </if>
+            <if test="staffPinyinCode != null">#{staffPinyinCode},
+            </if>
+            <if test="registTimeCate != null">#{registTimeCate},
+            </if>
+            <if test="patiRegistSn != null">#{patiRegistSn},
+            </if>
+            <if test="scheduleRegistCharge != null">#{scheduleRegistCharge},
+            </if>
+            <if test="registRecSn != null">#{registRecSn},
+            </if>
+            <if test="regUserSn != null">#{regUserSn},
+            </if>
+            <if test="regUserName != null">#{regUserName},
+            </if>
+            <if test="regOptTime != null">#{regOptTime},
+            </if>
+            <if test="revokeUserSn != null">#{revokeUserSn},
+            </if>
+            <if test="revokeUserName != null">#{revokeUserName},
+            </if>
+            <if test="revokeOptTime != null">#{revokeOptTime},
+            </if>
+            <if test="withdrawalTime != null">#{withdrawalTime},
+            </if>
+            <if test="scheduleStatusFlag != null">#{scheduleStatusFlag},
+            </if>
+            <if test="scheduleMemoDesc != null">#{scheduleMemoDesc},
+            </if>
+            <if test="scheduleCredenceNum != null">#{scheduleCredenceNum},
+            </if>
+            <if test="registTimeRange != null">#{registTimeRange},
+            </if>
+            <if test="scheduleDetailSn != null">#{scheduleDetailSn},
+            </if>
+            <if test="treatDate != null">#{treatDate},
+            </if>
+            <if test="treatDoctCode != null">#{treatDoctCode},
+            </if>
+            <if test="treatDoctName != null">#{treatDoctName},
+            </if>
+            <if test="regWayCode != null">#{regWayCode},
+            </if>
+            <if test="regWay != null">#{regWay},
+            </if>
+            <if test="regSystemWayCode != null">#{regSystemWayCode},
+            </if>
+            <if test="regSystemWay != null">#{regSystemWay},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+            <if test="visitFlag != null">#{visitFlag},
+            </if>
+            <if test="senderId != null">#{senderId},
+            </if>
+            <if test="senderName != null">#{senderName},
+            </if>
+            <if test="sendTime != null">#{sendTime},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="updateServiceAppointRecord" parameterType="com.smartor.domain.ServiceAppointRecord">
+        update service_appoint_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="appointRecSn != null">appoint_rec_sn =
+                #{appointRecSn},
+            </if>
+            <if test="changeAppointRecSn != null">change_appoint_rec_sn =
+                #{changeAppointRecSn},
+            </if>
+            <if test="orgCode != null">org_code =
+                #{orgCode},
+            </if>
+            <if test="patFileSn != null">pat_file_sn =
+                #{patFileSn},
+            </if>
+            <if test="patMediaSn != null">pat_media_sn =
+                #{patMediaSn},
+            </if>
+            <if test="patMediaNum != null">pat_media_num =
+                #{patMediaNum},
+            </if>
+            <if test="patCateSn != null">pat_cate_sn =
+                #{patCateSn},
+            </if>
+            <if test="patNatureSn != null">pat_nature_sn =
+                #{patNatureSn},
+            </if>
+            <if test="patFileName != null">pat_file_name =
+                #{patFileName},
+            </if>
+            <if test="patFileGender != null">pat_file_gender =
+                #{patFileGender},
+            </if>
+            <if test="patAge != null">pat_age =
+                #{patAge},
+            </if>
+            <if test="patBirthday != null">pat_birthday =
+                #{patBirthday},
+            </if>
+            <if test="patCardTypeCode != null">pat_card_type_code =
+                #{patCardTypeCode},
+            </if>
+            <if test="patCardType != null">pat_card_type =
+                #{patCardType},
+            </if>
+            <if test="patIdCardNum != null">pat_id_card_num =
+                #{patIdCardNum},
+            </if>
+            <if test="patAddr != null">pat_addr =
+                #{patAddr},
+            </if>
+            <if test="patTel != null">pat_tel =
+                #{patTel},
+            </if>
+            <if test="patWayCode != null">pat_way_code =
+                #{patWayCode},
+            </if>
+            <if test="patWay != null">pat_way =
+                #{patWay},
+            </if>
+            <if test="appointTypeSn != null">appoint_type_sn =
+                #{appointTypeSn},
+            </if>
+            <if test="appointDate != null">appoint_date =
+                #{appointDate},
+            </if>
+            <if test="appointOperatorId != null">appoint_operator_id =
+                #{appointOperatorId},
+            </if>
+            <if test="appointOperatorName != null">appoint_operator_name =
+                #{appointOperatorName},
+            </if>
+            <if test="appointRegistDate != null">appoint_regist_date =
+                #{appointRegistDate},
+            </if>
+            <if test="registerScheduleSn != null">register_schedule_sn =
+                #{registerScheduleSn},
+            </if>
+            <if test="outpatCateSn != null">outpat_cate_sn =
+                #{outpatCateSn},
+            </if>
+            <if test="outpatCateName != null">outpat_cate_name =
+                #{outpatCateName},
+            </if>
+            <if test="registDeptCode != null">regist_dept_code =
+                #{registDeptCode},
+            </if>
+            <if test="registDeptName != null">regist_dept_name =
+                #{registDeptName},
+            </if>
+            <if test="deptPinyinCode != null">dept_pinyin_code =
+                #{deptPinyinCode},
+            </if>
+            <if test="registDoctCode != null">regist_doct_code =
+                #{registDoctCode},
+            </if>
+            <if test="registDoctName != null">regist_doct_name =
+                #{registDoctName},
+            </if>
+            <if test="staffPinyinCode != null">staff_pinyin_code =
+                #{staffPinyinCode},
+            </if>
+            <if test="registTimeCate != null">regist_time_cate =
+                #{registTimeCate},
+            </if>
+            <if test="patiRegistSn != null">pati_regist_sn =
+                #{patiRegistSn},
+            </if>
+            <if test="scheduleRegistCharge != null">schedule_regist_charge =
+                #{scheduleRegistCharge},
+            </if>
+            <if test="registRecSn != null">regist_rec_sn =
+                #{registRecSn},
+            </if>
+            <if test="regUserSn != null">reg_user_sn =
+                #{regUserSn},
+            </if>
+            <if test="regUserName != null">reg_user_name =
+                #{regUserName},
+            </if>
+            <if test="regOptTime != null">reg_opt_time =
+                #{regOptTime},
+            </if>
+            <if test="revokeUserSn != null">revoke_user_sn =
+                #{revokeUserSn},
+            </if>
+            <if test="revokeUserName != null">revoke_user_name =
+                #{revokeUserName},
+            </if>
+            <if test="revokeOptTime != null">revoke_opt_time =
+                #{revokeOptTime},
+            </if>
+            <if test="withdrawalTime != null">withdrawal_time =
+                #{withdrawalTime},
+            </if>
+            <if test="scheduleStatusFlag != null">schedule_status_flag =
+                #{scheduleStatusFlag},
+            </if>
+            <if test="scheduleMemoDesc != null">schedule_memo_desc =
+                #{scheduleMemoDesc},
+            </if>
+            <if test="scheduleCredenceNum != null">schedule_credence_num =
+                #{scheduleCredenceNum},
+            </if>
+            <if test="registTimeRange != null">regist_time_range =
+                #{registTimeRange},
+            </if>
+            <if test="scheduleDetailSn != null">schedule_detail_sn =
+                #{schedDetailSn},
+            </if>
+            <if test="treatDate != null">treat_date =
+                #{treatDate},
+            </if>
+            <if test="treatDoctCode != null">treat_doct_code =
+                #{treatDoctCode},
+            </if>
+            <if test="treatDoctName != null">treat_doct_name =
+                #{treatDoctName},
+            </if>
+            <if test="regWayCode != null">reg_way_code =
+                #{regWayCode},
+            </if>
+            <if test="regWay != null">reg_way =
+                #{regWay},
+            </if>
+            <if test="regSystemWayCode != null">reg_system_way_code =
+                #{regSystemWayCode},
+            </if>
+            <if test="regSystemWay != null">reg_system_way =
+                #{regSystemWay},
+            </if>
+            <if test="createTime != null">create_time =
+                #{createTime},
+            </if>
+            <if test="updateTime != null">update_time =
+                #{updateTime},
+            </if>
+            <if test="visitFlag != null">visit_flag =
+                #{visitFlag},
+            </if>
+            <if test="senderId != null">sender_id =
+                #{senderId},
+            </if>
+            <if test="senderName != null">sender_name =
+                #{senderName},
+            </if>
+            <if test="sendTime != null">send_time =
+                #{sendTime},
+            </if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteServiceAppointRecordById" parameterType="Long">
+        update service_appoint_record
+        <trim prefix="SET" suffixOverrides=",">
+            del_flag =1
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteServiceAppointRecordByIds" parameterType="String">
+        update service_appoint_record
+        <trim prefix="SET" suffixOverrides=",">
+            del_flag =1
+        </trim>
+        where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+
+</mapper>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
index 19c62c2..1501541 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
@@ -17,6 +17,11 @@
         <result property="radix" column="radix"/>
         <result property="guid" column="guid"/>
         <result property="orgid" column="orgid"/>
+        <result property="url" column="url"/>
+        <result property="wardCode" column="ward_code"/>
+        <result property="wardName" column="ward_name"/>
+        <result property="deptCode" column="dept_code"/>
+        <result property="deptName" column="dept_name"/>
     </resultMap>
 
     <sql id="selectServiceOutPathVo">
@@ -31,6 +36,11 @@
                radix,
                guid,
                orgid,
+               url,
+               ward_code,
+               ward_name,
+               dept_code,
+               dept_name,
                del_flag
         from service_out_path
     </sql>
@@ -61,7 +71,22 @@
         <if test="radix != null  and radix != ''">
             and radix=#{radix}
         </if>
+        <if test="url != null  and url != ''">
+            and url=#{url}
+        </if>
+        <if test="wardCode != null  and wardCode != ''">
+            and ward_code=#{wardCode}
+        </if>
 
+        <if test="wardName != null  and wardName != ''">
+            and ward_name=#{wardName}
+        </if>
+        <if test="deptCode != null  and deptCode != ''">
+            and dept_code=#{deptCode}
+        </if>
+        <if test="deptName != null  and deptName != ''">
+            and dept_name=#{deptName}
+        </if>
     </select>
 
     <select id="selectServiceOutPathById" parameterType="Long"
@@ -90,6 +115,16 @@
             </if>
             <if test="createTime != null">create_time,
             </if>
+            <if test="url != null">url,
+            </if>
+            <if test="wardCode != null">ward_code,
+            </if>
+            <if test="wardName != null">ward_name,
+            </if>
+            <if test="deptCode != null">dept_code,
+            </if>
+            <if test="deptName != null">dept_name,
+            </if>
 
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -108,6 +143,16 @@
             <if test="orgid != null">#{orgid},
             </if>
             <if test="createTime != null">#{createTime},
+            </if>
+            <if test="url != null">#{url},
+            </if>
+            <if test="wardCode != null">#{wardCode},
+            </if>
+            <if test="wardName != null">#{wardName},
+            </if>
+            <if test="deptCode != null">#{deptCode},
+            </if>
+            <if test="deptName != null">#{deptName},
             </if>
         </trim>
     </insert>
@@ -139,6 +184,24 @@
             <if test="orgid != null">orgid =
                 #{orgid},
             </if>
+            <if test="updateTime != null">update_time =
+                #{updateTime},
+            </if>
+            <if test="url != null">url =
+                #{url},
+            </if>
+            <if test="wardCode != null">ward_code =
+                #{wardCode},
+            </if>
+            <if test="wardName != null">ward_name =
+                #{wardName},
+            </if>
+            <if test="deptCode != null">dept_code =
+                #{deptCode},
+            </if>
+            <if test="deptName != null">dept_name =
+                #{deptName},
+            </if>
         </trim>
         where id = #{id}
     </update>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 76e7d8d..a2c1e63 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -355,7 +355,7 @@
                 #{state}
             </foreach>
         </if>
-        <if test="subIdList != null  and sendstates.size() > 0">
+        <if test="subIdList != null  and subIdList.size() > 0">
             AND id IN
             <foreach collection="subIdList" item="subId" open="(" separator="," close=")">
                 #{subId}
@@ -385,7 +385,6 @@
         <if test="endSendDateTime != null">
             AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endSendDateTime},'%y%m%d')
         </if>
-
         <if test="longSendTime != null">
             AND date_format(long_send_time,'%y%m%d') &lt;= date_format(#{longSendTime},'%y%m%d')
         </if>
@@ -422,7 +421,8 @@
                          close=")">
                     #{leaveldeptcode}
                 </foreach>
-            </if>)
+            </if>
+            )
         </if>
         <if test="deptOrDistrict==3">
             AND (1=1
@@ -443,7 +443,6 @@
             </if>
             )
         </if>
-
         <if test="deptOrDistrict==4">
             AND (1=1
             <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
@@ -463,7 +462,6 @@
             </if>
             )
         </if>
-
         <if test="visitTime != null">
             AND date_format(visit_time,'%y%m%d') = date_format(#{visitTime},'%y%m%d')
         </if>
@@ -494,7 +492,6 @@
         <if test="libtemplateid != null ">and libtemplateid = #{libtemplateid}</if>
         <if test="libtemplatename != null ">and libtemplatename = #{libtemplatename}</if>
         <if test="openid != null ">and openid = #{openid}</if>
-        <if test="longSendTime != null ">and long_send_time = #{longSendTime}</if>
         <if test="sendstate != null ">and sendstate = #{sendstate}</if>
         <if test="drname != null  and drname != ''">and drname like concat('%', #{drname}, '%')</if>
         <if test="taskName != null  and taskName != ''">and task_name like concat('%', #{taskName}, '%')</if>
@@ -1352,7 +1349,13 @@
             <if test="continueTimeNext != null ">continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP},</if>
             <if test="continueContent != null ">continue_content = #{continueContent},</if>
         </trim>
-        where patid = #{patid} and taskid = #{taskid}
+        where
+        <if test="patid != null ">
+            patid = #{patid}
+        </if>
+        <if test="taskid != null ">
+            and taskid = #{taskid}
+        </if>
         <if test="id != null ">
             and id = #{id}
         </if>
@@ -2508,8 +2511,8 @@
         SUM(CASE WHEN excep IS NOT NULL AND excep = '2' THEN 1 ELSE 0 END) AS jg,
         COUNT(1) as total
         FROM service_subtask
-        where 1=1
-        and del_flag = 0
+        where del_flag = 0
+        <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
         <if test="sendname != null and sendname != ''">
             AND sendname LIKE CONCAT('%', #{sendname}, '%')
         </if>
@@ -3020,6 +3023,12 @@
             #{taskId}
         </foreach>
         AND s.sendstate = 6
+      <if test="startOutHospTime != null">
+        AND date_format(s.endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
+    </if>
+        <if test="endOutHospTime != null">
+            AND date_format(s.endtime,'%y%m%d') &lt;= date_format(#{endOutHospTime},'%y%m%d')
+        </if>
         GROUP BY
         t.taskid,
         d.questiontext,
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
index 2aa5822..ef03c5f 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
@@ -389,20 +389,34 @@
         <if test="leavehospitaldistrictname != null  ">and service_task.leavehospitaldistrictname =
             #{leavehospitaldistrictname}
         </if>
-        <if test="leavehospitaldistrictcodes!=null and leavehospitaldistrictcodes.size()>0">
-            AND service_task.leavehospitaldistrictcode IN
-            <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
-                     close=")">
-                #{leavehospitaldistrictcode}
-            </foreach>
-        </if>
-        <if test="leaveldeptcodes!=null and leaveldeptcodes.size()>0">
-            AND service_task.deptcode IN
-            <foreach collection="leaveldeptcodes" item="deptcode" open="(" separator=","
-                     close=")">
-                #{deptcode}
-            </foreach>
-        </if>
+        <choose>
+            <when test="(leavehospitaldistrictcodes!=null and leavehospitaldistrictcodes.size()>0) and (leaveldeptcodes!=null and leaveldeptcodes.size()>0)">
+                AND (
+                    service_task.leavehospitaldistrictcode IN
+                    <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator="," close=")">
+                        #{leavehospitaldistrictcode}
+                    </foreach>
+                    OR service_task.deptcode IN
+                    <foreach collection="leaveldeptcodes" item="deptcode" open="(" separator="," close=")">
+                        #{deptcode}
+                    </foreach>
+                )
+            </when>
+            <otherwise>
+                <if test="leavehospitaldistrictcodes!=null and leavehospitaldistrictcodes.size()>0">
+                    AND service_task.leavehospitaldistrictcode IN
+                    <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator="," close=")">
+                        #{leavehospitaldistrictcode}
+                    </foreach>
+                </if>
+                <if test="leaveldeptcodes!=null and leaveldeptcodes.size()>0">
+                    AND service_task.deptcode IN
+                    <foreach collection="leaveldeptcodes" item="deptcode" open="(" separator="," close=")">
+                        #{deptcode}
+                    </foreach>
+                </if>
+            </otherwise>
+        </choose>
         <if test="leavehospitaldistrictcode != null  ">and service_task.leavehospitaldistrictcode =
             #{leavehospitaldistrictcode}
         </if>

--
Gitblit v1.9.3