liusheng
5 天以前 d7fd24cda7b8b5124fca826fa4301cdb3acdb6b5
代码提交
已添加5个文件
已删除1个文件
已修改13个文件
1251 ■■■■■ 文件已修改
mysql_fix_commands.sql 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDExternalController.java 373 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-ls.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/config/RobotPhoneUtils.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospReqVO.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospResDTO.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java 525 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/SysUserMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/test/java/com/smartor/service/ServiceSLTDHealthcareRecordServiceTest.java 补丁 | 查看 | 原始文档 | blame | 历史
mysql_fix_commands.sql
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java
@@ -351,7 +351,6 @@
    private Map<String, Object> returnParam(Boolean b, Map dataMap) {
        Map yeWuXX = (Map) dataMap.get("YeWuXX");
        String XiaoXiID = (String) yeWuXX.get("XiaoXiID");
@@ -372,4 +371,8 @@
        return map;
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDExternalController.java
ÎļþÒÑɾ³ý
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.ruoyi.web.controller.smartor;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.smartor.domain.ServiceSLTDInhospReqVO;
import com.smartor.domain.ServiceSLTDInhospResDTO;
import com.smartor.service.IServiceSLTDHealthcareRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * çœç«‹åŒå¾·å¥åº·è®°å½•查询Controller
 *
 * @author smartor
 * @date 2025-08-14
 */
@Slf4j
@Api(description = "省立同德健康记录查询接口")
@RestController
@RequestMapping("/smartor/sltdHealthcareRecord")
public class ServiceSLTDHealthcareRecordController extends BaseController {
    @Autowired
    private IServiceSLTDHealthcareRecordService serviceSLTDHealthcareRecordService;
    /**
     * æŸ¥è¯¢åœ¨é™¢æ‚£è€…健康记录列表
     */
    @ApiOperation("查询在院患者健康记录列表")
    @PostMapping("/queryHealthcareRecordList")
    public AjaxResult queryHealthcareRecordList(@RequestBody ServiceSLTDInhospReqVO reqVO) {
        try {
            log.info("【queryHealthcareRecordList】接收到查询请求,参数:{}", reqVO);
            List<ServiceSLTDInhospResDTO> resultList = serviceSLTDHealthcareRecordService.queryHealthcareRecordList(reqVO);
            log.info("【queryHealthcareRecordList】查询成功,返回{}条记录", resultList.size());
            return AjaxResult.success(resultList);
        } catch (Exception e) {
            log.error("【queryHealthcareRecordList】查询异常,请求参数:{}", reqVO, e);
            return AjaxResult.error("查询健康记录失败:" + e.getMessage());
        }
    }
    /**
     * é‡‡é›†åŒ»é™¢ç”¨æˆ·ä¿¡æ¯
     */
    @ApiOperation("采集医院用户信息")
    @PostMapping("/queryHospUserInfoList")
    public AjaxResult queryHospUserInfoList(@RequestBody ServiceSLTDInhospReqVO reqVO) {
        try {
            log.info("【queryHealthcareRecordList】接收到查询请求,参数:{}", reqVO);
            Boolean b = serviceSLTDHealthcareRecordService.queryHospUserInfoList(reqVO);
            log.info("【queryHospUserInfoList】查询成功,是否成功:{}", b);
            return AjaxResult.success(b);
        } catch (Exception e) {
            log.error("【queryHospUserInfoList】查询异常,请求参数:{}", reqVO, e);
            return AjaxResult.error("查询健康记录失败:" + e.getMessage());
        }
    }
}
ruoyi-admin/src/main/resources/application-ls.yml
@@ -177,7 +177,7 @@
req_path: 8093
#localIP: https://wx.lihusmart.com
#丽水外链请求IP和端口号
localIP: http://221.12.19.26
localIP: https://221.12.19.26
#获取患者信息URL(华卓提供)
hosp_info_url: http://esb-core-rest.wowjoy.cn/esb/exchange
ruoyi-admin/src/main/resources/application.yml
@@ -149,3 +149,6 @@
#不需要进行长期任务的机构
noLongTask: 47231022633110211A2101,
#省立同德取数据公共接口
sltd_pub_path: "http://open-tdyy.cfuture.shop/kapi/gw-api/"
ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
@@ -12,7 +12,7 @@
        <!-- é…ç½®é»˜è®¤çš„æ‰§è¡Œå™¨.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
        <setting name="defaultExecutorType"      value="SIMPLE" />
        <!-- æŒ‡å®š MyBatis æ‰€ç”¨æ—¥å¿—的具体实现 -->
        <setting name="logImpl"                  value="STDOUT_LOGGING"  />
<!--        <setting name="logImpl"                  value="STDOUT_LOGGING"  />-->
        <!-- ä½¿ç”¨é©¼å³°å‘½åæ³•转换字段 -->
        <!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
    </settings>
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -84,6 +84,20 @@
    private String title;
    /**
     * éƒ¨é—¨ç¼–码
     */
    @ApiModelProperty(value = "部门编码")
    @Excel(name = "部门编码")
    private String deptCode;
    /**
     * éƒ¨é—¨åç§°
     */
    @ApiModelProperty(value = "部门名称")
    @Excel(name = "部门名称")
    private String deptName;
    /**
     * ç”¨æˆ·é‚®ç®±
     */
    @ApiModelProperty(value = "用户邮箱")
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -108,7 +108,7 @@
                // è¿‡æ»¤è¯·æ±‚
                .authorizeRequests()
                // å¯¹äºŽç™»å½•login æ³¨å†Œregister éªŒè¯ç captchaImage å…è®¸åŒ¿åè®¿é—®
                .antMatchers("/login", "/register", "/captchaImage", "/qrcode/generateStaticHtml", "/qrcode/getQRcode", "/qrcode/getFormDate", "/chat", "/system/file/admin/uploadFile", "/smartor/dingtalk/sendNotification", "/patient/read/patientInfo", "/socket", "/API_ESB_Service", "/API_ESB_Service/Run", "/magic/web/**", "/smartor/serviceSubtask/phoneCallBack", "/smartor/serviceSubtask/taskPull", "/smartor/serviceSubtask/phoneCallBackYQ", "/smartor/robot/callstatus", "/smartor/robot/aidialog", "/smartor/robot/cdrinfo", "/getToken", "/smartor/subtaskAnswer/getQuestionCache", "/smartor/subtaskAnswer/saveQuestionCache", "/smartor/servicetask/getScriptInfoByCondition", "/smartor/subtaskAnswer/saveQuestionAnswer", "/smartor/import/download", "/smartor/serviceSubtask/recordAccept", "/smartor/outPath/getInfoByParam", "/smartor/serviceExternal/addDeptInfo", "/smartor/serviceExternal/**", "/sso/**").permitAll()
                .antMatchers("/login", "/register", "/captchaImage", "/qrcode/generateStaticHtml", "/qrcode/getQRcode", "/qrcode/getFormDate", "/chat", "/system/file/admin/uploadFile", "/smartor/dingtalk/sendNotification", "/patient/read/patientInfo", "/socket", "/API_ESB_Service", "/API_ESB_Service/Run", "/magic/web/**", "/smartor/serviceSubtask/phoneCallBack", "/smartor/serviceSubtask/taskPull", "/smartor/serviceSubtask/phoneCallBackYQ", "/smartor/robot/callstatus", "/smartor/robot/aidialog", "/smartor/robot/cdrinfo", "/getToken", "/smartor/subtaskAnswer/getQuestionCache", "/smartor/subtaskAnswer/saveQuestionCache", "/smartor/servicetask/getScriptInfoByCondition", "/smartor/subtaskAnswer/saveQuestionAnswer", "/smartor/import/download", "/smartor/serviceSubtask/recordAccept", "/smartor/outPath/getInfoByParam", "/smartor/serviceExternal/addDeptInfo", "/smartor/serviceExternal/**", "/sso/**","/smartor/sltdHealthcareRecord/**").permitAll()
                // é™æ€èµ„源,可匿名访问
                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll().antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                // é™¤ä¸Šé¢å¤–的所有请求全部需要鉴权认证
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -25,6 +25,8 @@
        <result property="idCard" column="id_card"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="deptCode" column="dept_code"/>
        <result property="deptName" column="dept_name"/>
        <result property="title" column="title"/>
        <result property="birthday" column="birthday"/>
        <result property="jobPhone" column="job_phone"/>
@@ -68,6 +70,8 @@
               u.user_name,
               u.user_type,
               u.nick_name,
               u.dept_code,
               u.dept_name,
               u.title,
               u.his_user_id,
               u.job_phone,
@@ -110,6 +114,8 @@
        u.nick_name, u.user_name,
        u.email,u.id_card,
        u.avatar,
        u.dept_name,
        u.dept_code,
        u.birthday,
        u.job_phone,
        u.phonenumber, u.sex, u.status,
@@ -141,6 +147,12 @@
        <if test="birthday != null and birthday != ''">
            AND u.birthday = #{birthday}
        </if>
        <if test="deptName != null and deptName != ''">
            AND u.dept_name = #{deptName}
        </if>
        <if test="deptCode != null and deptCode != ''">
            AND u.dept_code = #{deptCode}
        </if>
        <if test="hisUserId != null and hisUserId != ''">
            AND u.his_user_id = #{hisUserId}
        </if>
@@ -167,6 +179,8 @@
        u.user_type,
        u.nick_name,
        u.email,
        u.dept_code,
        u.dept_name,
        u.birthday,
        u.job_phone,
        u.phonenumber, u.status,u.id_card,
@@ -199,6 +213,8 @@
        u.email,
        u.his_user_id,
        u.title,
        u.dept_code,
        u.dept_name,
        u.job_phone,
        u.birthday,
        u.phonenumber, u.status,u.id_card,
@@ -293,6 +309,8 @@
        <if test="birthday != null ">birthday,</if>
        <if test="hisUserId != null and hisUserId != ''">his_user_id,</if>
        <if test="orgid != null and orgid != ''">orgid,</if>
        <if test="deptCode != null and deptCode != ''">dept_code,</if>
        <if test="deptName != null and deptName != ''">dept_name,</if>
        create_time
        )values(
        <if test="userId != null and userId != ''">#{userId},</if>
@@ -317,6 +335,8 @@
        <if test="birthday != null and birthday != ''">#{birthday},</if>
        <if test="hisUserId != null and hisUserId != ''">#{hisUserId},</if>
        <if test="orgid != null and orgid != ''">#{orgid},</if>
        <if test="deptCode != null and deptCode != ''">#{deptCode},</if>
        <if test="deptName != null and deptName != ''">#{deptName},</if>
        sysdate()
        )
    </insert>
@@ -351,6 +371,8 @@
            <if test="hisUserId != null and hisUserId != ''">
                his_user_id = #{hisUserId},
            </if>
            <if test="deptCode != null and deptCode != ''">dept_code=#{deptCode},</if>
            <if test="deptName != null and deptName != ''">dept_name=#{deptName},</if>
            update_time = sysdate()
        </set>
        where user_id = #{userId}
smartor/src/main/java/com/smartor/config/RobotPhoneUtils.java
@@ -4,23 +4,17 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.utils.HttpUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpEntity;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.smartor.domain.robot.RobotData;
import com.smartor.domain.robot.RobotDataConfig;
import com.smartor.domain.robot.RobotIdlenumVO;
import com.smartor.domain.robot.RobotScritpTemplateVO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import javax.mail.Multipart;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Configuration
public class RobotPhoneUtils {
smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospReqVO.java
@@ -13,14 +13,14 @@
    private String orgId;
    @ApiModelProperty(value = "院区ID")
    private Long campusId;
    private Long campusIds;
    @ApiModelProperty(value = "患者姓名   å¿…填一个")
    private String patientNamex0;
    private String patientName;
    @ApiModelProperty(value = "身份证号   å¿…填一个")
    private String idCardNox0;
    private String idCardNo;
    @ApiModelProperty(value = "病区id å¿…填一个")
    private Long areaId;
@@ -35,7 +35,7 @@
    private String healthcareRecordNo;
    @ApiModelProperty(value = "诊疗记录号集合")
    private List<String> healthcareRecordNoListx0;
    private List<String> healthcareRecordNoList;
    @ApiModelProperty(value = "病历号 å¿…填一个")
    private String medicalRecordNo;
@@ -53,13 +53,13 @@
    private String startHeadTime;
    @ApiModelProperty(value = "入院时间-结束时间 yyyy-MM-dd")
    private String startTailTimex0;
    private String startTailTime;
    @ApiModelProperty(value = "出院时间-开始时间 yyyy-MM-dd")
    private String preOutHospitalHeadDatex0;
    private String preOutHospitalHeadDate;
    @ApiModelProperty(value = "出院时间-结束时间 yyyy-MM-dd")
    private String preOutHospitalTailDatex0;
    private String preOutHospitalTailDate;
    @ApiModelProperty(value = "就诊时间-开始时间 :   é—¨è¯Šè¯Šç–—记录为号源时间  ä½é™¢è¯Šç–—记录为入院登记时间 yyyy-MM-dd")
    private String encounterTimeStart;
smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospResDTO.java
@@ -97,13 +97,13 @@
    private String encounterTime;
    @ApiModelProperty(value = "入院时间")
    private String startTimex0;
    private String startTime;
    @ApiModelProperty(value = "出院时间")
    private String preOutHospitalDatex0;
    private String preOutHospitalDate;
    @ApiModelProperty(value = "结算时间")
    private String outHospitalSettleDatex0;
    private String outHospitalSettleDate;
    @ApiModelProperty(value = "诊断编码:  æœ¬æ¬¡å°±è¯Šæ‚£è€…所有诊断对应的icd编码,通过“、”分隔")
    private String diagnosisCode;
@@ -132,8 +132,8 @@
    @ApiModelProperty(value = "诊疗周期ID")
    private Long healthcarePeriodId;
    @ApiModelProperty(value = "最新一次入院时间  ä¸Žåˆ›å»ºæ—¶é—´ä¸€è‡´x0")
    private String lastEncounterTimex0;
    @ApiModelProperty(value = "最新一次入院时间  ä¸Žåˆ›å»ºæ—¶é—´ä¸€è‡´")
    private String lastEncounterTime;
    @ApiModelProperty(value = "主管护士ID")
    private Long chiefNurseId;
@@ -204,18 +204,6 @@
    @ApiModelProperty(value = "费用金额")
    private Double billAmount;
    @ApiModelProperty(value = "入院时间")
    private String startTime;
    @ApiModelProperty(value = "最近一次就诊时间")
    private String lastEncounterTime;
    @ApiModelProperty(value = "预出院时间")
    private String preOutHospitalDate;
    @ApiModelProperty(value = "出院结算时间")
    private String outHospitalSettleDate;
    @ApiModelProperty(value = "病历文件状态")
    private Integer medicalRecordFileStatus;
smartor/src/main/java/com/smartor/service/IServiceSLTDHealthcareRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.smartor.service;
import com.smartor.domain.ServiceSLTDInhospReqVO;
import com.smartor.domain.ServiceSLTDInhospResDTO;
import java.util.List;
/**
 * çœç«‹åŒå¾·å¥åº·è®°å½•查询Service接口
 *
 * @author smartor
 * @date 2025-08-14
 */
public interface IServiceSLTDHealthcareRecordService {
    /**
     * é‡‡é›†åœ¨é™¢æ‚£è€…出入院、门急诊信息
     *
     * @param reqVO æŸ¥è¯¢è¯·æ±‚参数
     * @return å¥åº·è®°å½•列表
     * å‚考
     * {
     * "orgId": 20001001,
     * "campusIds": 30001002,
     * "startHeadTime":"2025-08-14",
     * "startTailTime":"2025-08-14",
     * "healthcareRecordTypeList":["FH0108.01"],
     * "subjectCode": null,
     * "healthcareRecordNo":null,
     * "orgSubjectCode": null,
     * "deptDimensions": null,
     * "serviceScopes": null,
     * "inpatientArea": null,
     * "status": null
     * }
     */
    List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO);
    /**
     * é‡‡é›†åŒ»é™¢ç”¨æˆ·ä¿¡æ¯
     *
     * @param reqVO
     * @return å‚考
     * {
     * "orgId": 20001001,
     * "campusIds": 30001002,
     * "unitIds": null,
     * "relationType": null,
     * "searchText": null,
     * "status": 1
     * }
     */
    Boolean queryHospUserInfoList(ServiceSLTDInhospReqVO reqVO);
}
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -682,6 +682,8 @@
        serviceSubtask.setSex(patArchive.getSex());
        serviceSubtask.setAge(patArchive.getAge());
        serviceSubtask.setSendstate(2L);
        serviceSubtask.setManagementDoctor(patMedInhosp1.getManagementDoctor());
        serviceSubtask.setManagementDoctorCode(patMedInhosp1.getManagementDoctorCode());
        serviceSubtask.setStarttime(patMedInhosp1.getStarttime());
        serviceSubtask.setEndtime(patMedInhosp1.getEndtime());
        serviceSubtask.setServiceType(serviceTask.getServiceType());
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,525 @@
package com.smartor.service.impl;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.smartor.domain.*;
import com.smartor.mapper.PatMedOuthospMapper;
import com.smartor.mapper.SysUser2Mapper;
import com.smartor.mapper.SysUserImportMapper;
import com.smartor.service.IPatArchiveService;
import com.smartor.service.IPatMedInhospService;
import com.smartor.service.IServiceSLTDHealthcareRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.lang.reflect.Array;
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
@Service
public class ServiceSLTDHealthcareRecordServiceImpl implements IServiceSLTDHealthcareRecordService {
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    private static final String APP_KEY = "ak-zUMiOWhqXiJQWPB1pCbz0pjr";
    @Autowired
    private IPatArchiveService patArchiveService;
    @Autowired
    private IPatMedInhospService patMedInhospService;
    @Autowired
    private PatMedOuthospMapper patMedOuthospMapper;
    @Autowired
    private SysUser2Mapper sysUser2Mapper;
    @Value("${sltd_pub_path}")
    private String sltdPubPath;
    @Override
    public List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO) {
        log.info("【queryHealthcareRecordList】开始调用省立同德健康记录查询接口,请求参数:{}", reqVO);
        try {
            Map<String, Object> requestParams = buildRequestParams(reqVO);
            Map<String, String> headers = buildRequestHeaders();
            String result = HttpUtils.sendPostByHeader(sltdPubPath + "osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
            log.info("【queryHealthcareRecordList】接口响应结果:{}", result);
            String cry = determineCry(reqVO);
            return parseResponseData(result, reqVO.getHealthcareRecordTypeList().get(0), cry);
        } catch (Exception e) {
            log.error("【queryHealthcareRecordList】调用省立同德健康记录查询接口异常,请求参数:{}", reqVO, e);
            throw new RuntimeException("调用省立同德健康记录查询接口失败", e);
        }
    }
    /**
     * é‡‡é›†åŒ»é™¢ç”¨æˆ·ä¿¡æ¯
     *
     * @param reqVO
     * @return
     */
    @Override
    public Boolean queryHospUserInfoList(ServiceSLTDInhospReqVO reqVO) {
        Map<String, Object> requestParams = buildRequestParams(reqVO);
        Map<String, String> headers = buildRequestHeaders();
        String result = HttpUtils.sendPostByHeader(sltdPubPath + "osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
        log.info("【queryHealthcareRecordList】接口响应结果:{}", result);
        List<Map<String, Object>> dataList = getDataList(result);
        for (Map<String, Object> dataItem : dataList) {
            SysUser sysUser = new SysUser();
            sysUser.setUserName(getStringValue(dataItem, "accountNo"));
            sysUser.setNickName(getStringValue(dataItem, "name"));
            List diagnosisObjList = (List<?>) dataItem.get("qualifications");
            if (CollectionUtils.isNotEmpty(diagnosisObjList)) {
                for (Object diagnosis : diagnosisObjList) {
                    if (diagnosis instanceof Map) {
                        Map<String, Object> diagnosisMap = (Map<String, Object>) diagnosis;
                        String professionalTitleName = getStringValue(diagnosisMap, "professionalTitleName");
                        if (professionalTitleName.contains("医师")) sysUser.setUserType("医生");
                        if (professionalTitleName.contains("护")) sysUser.setUserType("护士");
                        sysUser.setTitle(getStringValue(diagnosisMap, "professionalTitleName"));
                    }
                }
            }
            sysUser.setDeptCode(getStringValue(dataItem, "accountNo"));
            sysUser.setDeptName(getStringValue(dataItem, "personnelDeptName"));
            sysUser.setPhonenumber(getStringValue(dataItem, "telephone"));
            //设置性别
            String genderName = getStringValue(dataItem, "genderName");
            if ("男".equals(genderName)) sysUser.setSex("0");
            else if ("女".equals(genderName)) sysUser.setSex("1");
            else sysUser.setSex("2");
            sysUser.setCreateTime(new Date());
            sysUser.setUpdateTime(new Date());
            sysUser.setUpdateBy("admin");
            sysUser.setCreateBy("admin");
            sysUser2Mapper.insertUser(sysUser);
        }
        return true;
    }
    private String determineCry(ServiceSLTDInhospReqVO reqVO) {
        if (reqVO.getHealthcareRecordTypeList().contains("FH0108.02")) {
            if (reqVO.getStartHeadTime() != null && reqVO.getStartTailTime() != null) {
                return "0";
            } else if (reqVO.getPreOutHospitalHeadDate() != null && reqVO.getPreOutHospitalTailDate() != null) {
                return "1";
            }
        }
        return null;
    }
    private Map<String, Object> buildRequestParams(ServiceSLTDInhospReqVO reqVO) {
        Map<String, Object> params = new HashMap<>();
        if (reqVO.getOrgId() != null) {
            params.put("orgId", Long.parseLong(reqVO.getOrgId()));
        }
        if (reqVO.getCampusIds() != null) {
            params.put("campusIds", reqVO.getCampusIds());
        }
        if (reqVO.getStartHeadTime() != null) {
            params.put("startHeadTime", reqVO.getStartHeadTime());
        }
        if (reqVO.getStartTailTime() != null) {
            params.put("startTailTime", reqVO.getStartTailTime());
        }
        if (reqVO.getHealthcareRecordTypeList() != null && !reqVO.getHealthcareRecordTypeList().isEmpty()) {
            params.put("healthcareRecordTypeList", reqVO.getHealthcareRecordTypeList());
        }
        params.put("subjectCode", reqVO.getPatientName());
        params.put("healthcareRecordNo", reqVO.getHealthcareRecordNo());
        params.put("orgSubjectCode", reqVO.getIdCardNo());
        if (reqVO.getDeptIdList() != null && !reqVO.getDeptIdList().isEmpty()) {
            params.put("deptDimensions", reqVO.getDeptIdList());
        }
        params.put("serviceScopes", null);
        params.put("inpatientArea", null);
        params.put("status", reqVO.getStatusList() != null && !reqVO.getStatusList().isEmpty() ? reqVO.getStatusList() : null);
        return params;
    }
    private Map<String, String> buildRequestHeaders() {
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");
        headers.put("app-key", APP_KEY);
        return headers;
    }
    private List<ServiceSLTDInhospResDTO> parseResponseData(String result, String type, String cry) {
        try {
            List<Map<String, Object>> dataList = getDataList(result);
            List<ServiceSLTDInhospResDTO> resultList = new ArrayList<>();
            for (Map<String, Object> dataItem : dataList) {
                resultList.add(convertToDTO(dataItem));
            }
            log.info("【parseResponseData】成功解析{}条健康记录数据", resultList.size());
            processResultList(resultList, type, cry);
            return resultList;
        } catch (Exception e) {
            log.error("【parseResponseData】解析响应数据异常,响应内容:{}", result, e);
            throw new RuntimeException("解析响应数据失败", e);
        }
    }
    public List<Map<String, Object>> getDataList(String result) {
        Gson gson = new Gson();
        Type mapType = new TypeToken<Map<String, Object>>() {
        }.getType();
        Map<String, Object> responseMap = gson.fromJson(result, mapType);
        Number codeObj = (Number) responseMap.get("code");
        if (codeObj == null || codeObj.intValue() != 200) {
            log.error("【parseResponseData】接口返回失败,响应码:{},响应内容:{}", codeObj, result);
            throw new RuntimeException("接口调用失败,响应码:" + codeObj);
        }
        Object dataObj = responseMap.get("data");
        if (dataObj == null) {
            log.warn("【parseResponseData】接口返回数据为空");
            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);
        return dataList;
    }
    private void processResultList(List<ServiceSLTDInhospResDTO> resultList, String type, String cry) {
        switch (type) {
            case "FH0108.01":
                log.info("【parseResponseData】解析门诊数据");
                outHospitalDate(resultList);
                break;
            case "FH0108.02":
                log.info("【parseResponseData】解析住院数据");
                inHospitalDate(resultList, cry);
                break;
            case "FH0108.03":
                log.info("【parseResponseData】解析急诊数据");
                outHospitalDate(resultList);
                break;
            default:
                log.warn("【parseResponseData】未知的数据类型:{}", type);
                break;
        }
    }
    private Boolean outHospitalDate(List<ServiceSLTDInhospResDTO> resultList) {
        for (ServiceSLTDInhospResDTO dto : resultList) {
            PatArchive patArchive = processPatientArchive(dto);
            PatMedOuthosp patMedOuthosp = buildPatMedOuthosp(dto, patArchive);
            patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp);
        }
        return true;
    }
    private PatMedOuthosp buildPatMedOuthosp(ServiceSLTDInhospResDTO dto, PatArchive patArchive) {
        PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
        patMedOuthosp.setOuthospno(dto.getHealthcareRecordNo());
        patMedOuthosp.setSerialnum(dto.getHealthcareRecordNo());
        patMedOuthosp.setPatid(patArchive.getId());
        patMedOuthosp.setPatname(patArchive.getName());
        patMedOuthosp.setPatno(patArchive.getPatientno());
        patMedOuthosp.setDeptcode("" + dto.getDeptId());
        patMedOuthosp.setDeptname(dto.getDeptName());
        patMedOuthosp.setDiagname(dto.getDiagnosisName());
        patMedOuthosp.setIcd10code(dto.getDiagnosisCode());
        patMedOuthosp.setDrcode("" + dto.getDoctorId());
        patMedOuthosp.setDrname(dto.getDoctorName());
        patMedOuthosp.setAdmitdate(parseDate(dto.getLastEncounterTime()));
        patMedOuthosp.setSchemestatus(1L);
        patMedOuthosp.setMainsuit(dto.getDiagnosisName());
        patMedOuthosp.setHpi(null);
        patMedOuthosp.setCreateTime(new Date());
        return patMedOuthosp;
    }
    private Date parseDate(String dateStr) {
        try {
            return new SimpleDateFormat(DATE_FORMAT).parse(dateStr);
        } catch (ParseException e) {
            log.warn("【parseDate】解析日期失败:{}", dateStr, e);
            return null;
        }
    }
    private Boolean inHospitalDate(List<ServiceSLTDInhospResDTO> resultList, String cry) {
        for (ServiceSLTDInhospResDTO dto : resultList) {
            PatArchive patArchive = processPatientArchive(dto);
            processPatientInhospInfo(dto, patArchive, cry);
        }
        return true;
    }
    private void processPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry) {
        PatMedInhosp patMedInhosp = buildPatientInhospInfo(dto, patArchive, cry);
        PatMedInhosp queryInhosp = new PatMedInhosp();
        queryInhosp.setPatno(patArchive.getPatientno());
        queryInhosp.setSerialnum(patMedInhosp.getSerialnum());
        List<PatMedInhosp> existingInhosps = patMedInhospService.selectPatMedInhospList(queryInhosp);
        if (CollectionUtils.isNotEmpty(existingInhosps)) {
            patMedInhosp.setInhospid(existingInhosps.get(0).getInhospid());
            patMedInhospService.updatePatMedInhosp(patMedInhosp);
            log.debug("【processPatientInhospInfo】更新住院信息,患者编号:{},流水号:{}", patArchive.getPatientno(), patMedInhosp.getSerialnum());
        } else {
            patMedInhospService.insertPatMedInhosp(patMedInhosp);
            log.debug("【processPatientInhospInfo】新增住院信息,患者编号:{},流水号:{}", patArchive.getPatientno(), patMedInhosp.getSerialnum());
        }
    }
    private PatMedInhosp buildPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry) {
        PatMedInhosp patMedInhosp = new PatMedInhosp();
        patMedInhosp.setPatid(patArchive.getId());
        patMedInhosp.setPatno(patArchive.getPatientno());
        patMedInhosp.setPatname(patArchive.getName());
        patMedInhosp.setNurseId(dto.getChiefNurseId() == null ? "" : dto.getChiefNurseId().toString());
        patMedInhosp.setNurseName(dto.getChiefNurseName());
        patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
        patMedInhosp.setFuflag("1");
        patMedInhosp.setInhospstate("0".equals(cry) ? "0" : "1");
        patMedInhosp.setHospitalcode(dto.getOrgId());
        patMedInhosp.setBedNo(dto.getBedNumber());
        patMedInhosp.setStarttime(parseDate(dto.getStartTime()));
        patMedInhosp.setEndtime(parseDate(dto.getPreOutHospitalDate()));
        if ("1".equals(cry)) {
            setDischargeInfo(patMedInhosp, dto);
        } else {
            setAdmissionInfo(patMedInhosp, dto);
        }
        patMedInhosp.setDrname(dto.getDoctorName());
        patMedInhosp.setDrcode("" + dto.getDoctorId());
        patMedInhosp.setSchemestatus("0".equals(cry) ? 1L : 2L);
        patMedInhosp.setDelFlag("0");
        patMedInhosp.setOrgid("1");
        return patMedInhosp;
    }
    private void setDischargeInfo(PatMedInhosp patMedInhosp, ServiceSLTDInhospResDTO dto) {
        patMedInhosp.setLeaveldeptcode("" + dto.getDeptId());
        patMedInhosp.setLeaveldeptname(dto.getDeptName());
        patMedInhosp.setLeavediagname(dto.getMainDischargeDiagnosis() == null ? null : dto.getMainDischargeDiagnosis().getDiagnosisDictName());
        patMedInhosp.setLeaveicd10code(dto.getMainDischargeDiagnosis() == null ? null : dto.getMainDischargeDiagnosis().getDiagnosisDictCode());
        patMedInhosp.setOutWayId(null);
        patMedInhosp.setOutWayName(null);
        patMedInhosp.setLeavehospitaldistrictid("" + dto.getAreaId());
        patMedInhosp.setLeavehospitaldistrictcode("" + dto.getAreaId());
        patMedInhosp.setLeavehospitaldistrictname(dto.getAreaName());
        patMedInhosp.setLeaveldeptid("" + dto.getDeptId());
    }
    private void setAdmissionInfo(PatMedInhosp patMedInhosp, ServiceSLTDInhospResDTO dto) {
        patMedInhosp.setDeptcode("" + dto.getDeptId());
        patMedInhosp.setDeptname(dto.getDeptName());
        patMedInhosp.setDiagname(dto.getAdmissionDiagnosisName());
        patMedInhosp.setIcd10code(dto.getAdmissionDiagnosisCode());
        patMedInhosp.setHospitaldistrictid("" + dto.getAreaId());
        patMedInhosp.setHospitaldistrictcode("" + dto.getAreaId());
        patMedInhosp.setHospitaldistrictname(dto.getAreaName());
    }
    private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) {
        PatArchive queryArchive = new PatArchive();
        queryArchive.setIdcardno(dto.getIdCardNo().trim());
        List<PatArchive> existingArchives = patArchiveService.selectPatArchiveList(queryArchive);
        PatArchive patArchive = buildPatientArchive(dto);
        if (CollectionUtils.isEmpty(existingArchives)) {
            patArchiveService.insertPatArchive(patArchive);
            log.debug("【processPatientArchive】新增患者档案,患者编号:{}", patArchive.getPatientno());
        } else {
            patArchive.setId(existingArchives.get(0).getId());
            patArchiveService.updateArchive(patArchive);
            log.debug("【processPatientArchive】更新患者档案,患者编号:{}", patArchive.getPatientno());
        }
        return patArchive;
    }
    private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) {
        PatArchive patArchive = new PatArchive();
        patArchive.setPatientno(dto.getMedicalRecordNo());
        patArchive.setIdcardno(dto.getIdCardNo().trim());
        patArchive.setName(dto.getPatientName());
        patArchive.setSourcefrom(2);
        patArchive.setPattype("2");
        patArchive.setSex("男".equals(dto.getGender()) ? 1L : 2L);
        patArchive.setNation(dto.getNation());
        patArchive.setNativePlace(dto.getNativePlace());
        patArchive.setPlaceOfResidence(dto.getAddress());
        patArchive.setBirthdate(parseDate(dto.getBirthday()));
        patArchive.setTelcode(dto.getPhone());
        if (CollectionUtils.isNotEmpty(dto.getResidentContactInfos())) {
            patArchive.setRelativetelcode(dto.getResidentContactInfos().get(0).getTelecom());
        }
        patArchive.setDelFlag("0");
        patArchive.setCreateTime(new Date());
        patArchive.setUpdateTime(new Date());
        return patArchive;
    }
    private ServiceSLTDInhospResDTO convertToDTO(Map<String, Object> dataItem) {
        ServiceSLTDInhospResDTO dto = new ServiceSLTDInhospResDTO();
        dto.setOrgId(getStringValue(dataItem, "orgId"));
        dto.setHealthcareRecordId(getLongValue(dataItem, "healthcareRecordId"));
        dto.setHealthcareRecordNo(getStringValue(dataItem, "healthcareRecordNo"));
        dto.setPatientId(getLongValue(dataItem, "patientId"));
        dto.setPatientName(getStringValue(dataItem, "patientName"));
        dto.setPinyin(getStringValue(dataItem, "pinyin"));
        dto.setNation(getStringValue(dataItem, "nation"));
        dto.setIdCardNo(getStringValue(dataItem, "idCardNo"));
        dto.setHealthcareRecordTimes(getIntegerValue(dataItem, "healthcareRecordTimes"));
        dto.setHospitalizationNumber(getIntegerValue(dataItem, "hospitalizationNumber"));
        dto.setMedicalCardId(getLongValue(dataItem, "medicalCardId"));
        dto.setMedicalCardType(getStringValue(dataItem, "medicalCardType"));
        dto.setMedicalCardTypeName(getStringValue(dataItem, "medicalCardTypeName"));
        dto.setMedicalCardNo(getStringValue(dataItem, "medicalCardNo"));
        dto.setMedicalRecordNo(getStringValue(dataItem, "medicalRecordNo"));
        dto.setGender(getStringValue(dataItem, "gender"));
        dto.setGenderCode(getStringValue(dataItem, "genderCode"));
        dto.setAge(getStringValue(dataItem, "age"));
        dto.setBirthday(getStringValue(dataItem, "birthday"));
        dto.setPhone(getStringValue(dataItem, "phone"));
        dto.setEducation(getStringValue(dataItem, "education"));
        dto.setEducationCode(getStringValue(dataItem, "educationCode"));
        dto.setNeonatal(getBooleanValue(dataItem, "neonatal"));
        dto.setMarriage(getStringValue(dataItem, "marriage"));
        dto.setMarriageCode(getStringValue(dataItem, "marriageCode"));
        dto.setOccupationType(getStringValue(dataItem, "occupationType"));
        dto.setOccupationTypeCode(getStringValue(dataItem, "occupationTypeCode"));
        dto.setNativePlace(getStringValue(dataItem, "nativePlace"));
        dto.setAreaId(getLongValue(dataItem, "areaId"));
        dto.setAreaName(getStringValue(dataItem, "areaName"));
        dto.setRoomId(getLongValue(dataItem, "roomId"));
        dto.setRoomNumber(getStringValue(dataItem, "roomNumber"));
        dto.setBedId(getLongValue(dataItem, "bedId"));
        dto.setBedNumber(getStringValue(dataItem, "bedNumber"));
        dto.setEncounterTime(getStringValue(dataItem, "encounterTime"));
        dto.setStartTime(getStringValue(dataItem, "startTime"));
        dto.setPreOutHospitalDate(getStringValue(dataItem, "preOutHospitalDate"));
        dto.setLastEncounterTime(getStringValue(dataItem, "lastEncounterTime"));
        dto.setDiagnosisCode(getStringValue(dataItem, "diagnosisCode"));
        dto.setDiagnosisName(getStringValue(dataItem, "diagnosisName"));
        dto.setHealthcareRecordStatus(getStringValue(dataItem, "healthcareRecordStatus"));
        dto.setHealthcareType(getStringValue(dataItem, "healthcareType"));
        dto.setDeptId(getLongValue(dataItem, "deptId"));
        dto.setDeptName(getStringValue(dataItem, "deptName"));
        dto.setDoctorId(getLongValue(dataItem, "doctorId"));
        dto.setDoctorName(getStringValue(dataItem, "doctorName"));
        dto.setHealthcarePeriodId(getLongValue(dataItem, "healthcarePeriodId"));
        dto.setChiefNurseId(getLongValue(dataItem, "chiefNurseId"));
        dto.setChiefNurseName(getStringValue(dataItem, "chiefNurseName"));
        dto.setCostCategoryName(getStringValue(dataItem, "costCategoryName"));
        dto.setCostCategoryCode(getStringValue(dataItem, "costCategoryCode"));
        dto.setCostNatureName(getStringValue(dataItem, "costNatureName"));
        dto.setCostNatureCode(getStringValue(dataItem, "costNatureCode"));
        dto.setFurtherConsultationStatus(getIntegerValue(dataItem, "furtherConsultationStatus"));
        Object contactsObj = dataItem.get("residentContactInfos");
        if (contactsObj instanceof List) {
            dto.setResidentContactInfos(parseContacts((List<?>) contactsObj));
        }
        Object diagnosisObj = dataItem.get("diagnosisList");
        if (diagnosisObj instanceof List) {
            dto.setDiagnosisList(parseDiagnosis((List<?>) diagnosisObj));
        }
        return dto;
    }
    private List<ServiceSLTDContactsResDTO> parseContacts(List<?> contactsList) {
        List<ServiceSLTDContactsResDTO> contacts = new ArrayList<>();
        for (Object contactObj : contactsList) {
            if (contactObj instanceof Map) {
                Map<String, Object> contactMap = (Map<String, Object>) contactObj;
                ServiceSLTDContactsResDTO contact = new ServiceSLTDContactsResDTO();
                contact.setName(getStringValue(contactMap, "name"));
                contact.setRelationshipCode(getStringValue(contactMap, "relationshipCode"));
                contact.setRelationship(getStringValue(contactMap, "relationship"));
                contact.setTelecom(getStringValue(contactMap, "telecom"));
                contact.setCurrentAddress(getStringValue(contactMap, "currentAddress"));
                contacts.add(contact);
            }
        }
        return contacts;
    }
    private List<ServiceSLTDDiagnosisResDTO> parseDiagnosis(List<?> diagnosisList) {
        List<ServiceSLTDDiagnosisResDTO> diagnosis = new ArrayList<>();
        for (Object diagnosisObj : diagnosisList) {
            if (diagnosisObj instanceof Map) {
                Map<String, Object> diagnosisMap = (Map<String, Object>) diagnosisObj;
                ServiceSLTDDiagnosisResDTO diag = new ServiceSLTDDiagnosisResDTO();
                diag.setDiagnosisDictCode(getStringValue(diagnosisMap, "diagnosisDictCode"));
                diag.setDiagnosisDictName(getStringValue(diagnosisMap, "diagnosisDictName"));
                diag.setDiagnosisCategory(getStringValue(diagnosisMap, "diagnosisCategory"));
                diag.setRecordType(getIntegerValue(diagnosisMap, "recordType"));
                diag.setIsMainDiagnosis(getIntegerValue(diagnosisMap, "isMainDiagnosis"));
                diagnosis.add(diag);
            }
        }
        return diagnosis;
    }
    private String getStringValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        return value != null ? value.toString() : null;
    }
    private Long getLongValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        if (value == null) return null;
        if (value instanceof Number) {
            return ((Number) value).longValue();
        }
        try {
            return Long.parseLong(value.toString());
        } catch (NumberFormatException e) {
            return null;
        }
    }
    private Integer getIntegerValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        if (value == null) return null;
        if (value instanceof Number) {
            return ((Number) value).intValue();
        }
        try {
            return Integer.parseInt(value.toString());
        } catch (NumberFormatException e) {
            return null;
        }
    }
    private Boolean getBooleanValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        if (value == null) return null;
        if (value instanceof Boolean) {
            return (Boolean) value;
        }
        return Boolean.parseBoolean(value.toString());
    }
}
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -76,68 +76,68 @@
    <sql id="selectPatMedInhospVo">
        select inhospid,
        patname,
        fuflag,
        management_doctor,
        management_doctor_code,
        fudate,
        fuperiod,
        futypecode,
        futypedesc,
        fuadvice,
        fuspecialadvice,
        remark,
        guid,
        operator,
        operator_id,
        out_way_id,
        out_way_name,
        nurse_id,
        nurse_name,
        deptcheck_flag,
        wardcheck_flag,
        diagcheck_flag,
        inhospstate,
        patno,
        long_task_reason,
        inhospno,
        serialnum,
        hospitalname,
        hospitalcode,
        hospitaldistrictcode,
        hospitaldistrictname,
        icd10code,
        diagname,
        starttime,
        endtime,
        deptcode,
        deptname,
        roomno,
        bed_no,
        orgid,
        del_flag,
        update_by,
        update_time,
        create_by,
        create_time,
        isupload,
        upload_time,
        patid,
        leavediagname,
        leaveicd10code,
        drcode,
        drname,
        schemestatus,
        generalschemestatus,
        leaveldeptcode,
        leaveldeptname,
        hospitaldistrictid,
        leavehospitaldistrictcode,
        leavehospitaldistrictname,
        leavehospitaldistrictid,
        deptid,
        leaveldeptid,
        schemetime
               patname,
               fuflag,
               management_doctor,
               management_doctor_code,
               fudate,
               fuperiod,
               futypecode,
               futypedesc,
               fuadvice,
               fuspecialadvice,
               remark,
               guid,
               operator,
               operator_id,
               out_way_id,
               out_way_name,
               nurse_id,
               nurse_name,
               deptcheck_flag,
               wardcheck_flag,
               diagcheck_flag,
               inhospstate,
               patno,
               long_task_reason,
               inhospno,
               serialnum,
               hospitalname,
               hospitalcode,
               hospitaldistrictcode,
               hospitaldistrictname,
               icd10code,
               diagname,
               starttime,
               endtime,
               deptcode,
               deptname,
               roomno,
               bed_no,
               orgid,
               del_flag,
               update_by,
               update_time,
               create_by,
               create_time,
               isupload,
               upload_time,
               patid,
               leavediagname,
               leaveicd10code,
               drcode,
               drname,
               schemestatus,
               generalschemestatus,
               leaveldeptcode,
               leaveldeptname,
               hospitaldistrictid,
               leavehospitaldistrictcode,
               leavehospitaldistrictname,
               leavehospitaldistrictid,
               deptid,
               leaveldeptid,
               schemetime
        from pat_med_inhosp
    </sql>
@@ -419,7 +419,7 @@
        SELECT GROUP_CONCAT(d.tagname, ', ')
        FROM pat_archivetag d
        WHERE d.patid = #{patid}
        AND d.del_flag = 0
          AND d.del_flag = 0
    </select>
smartor/src/main/resources/mapper/smartor/SysUserMapper.xml
@@ -280,6 +280,8 @@
        <if test="hisUserId != null and hisUserId != ''">his_user_id,</if>
        <if test="guid != null and guid != ''">guid,</if>
        <if test="orgid != null and orgid != ''">orgid,</if>
        <if test="deptCode != null and deptCode != ''">dept_code,</if>
        <if test="deptName != null and deptName != ''">dept_name,</if>
        create_time
        )values(
        <if test="userId != null and userId != ''">#{userId},</if>
@@ -305,6 +307,8 @@
        <if test="hisUserId != null and hisUserId != ''">#{hisUserId},</if>
        <if test="guid != null and guid != ''">#{guid},</if>
        <if test="orgid != null and orgid != ''">#{orgid},</if>
        <if test="deptCode != null and deptCode != ''">#{deptCode},</if>
        <if test="deptName != null and deptName != ''">#{deptName},</if>
        sysdate()
        )
    </insert>
smartor/src/test/java/com/smartor/service/ServiceSLTDHealthcareRecordServiceTest.java