1
0
lsw 8 mesiacov pred
rodič
commit
62cd9b526f

+ 46 - 26
admin-ui/src/views/work/follow/record/edit.vue

@@ -1,32 +1,19 @@
 <template>
   <div class="cmain">
     <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-      <el-form-item label="问题模板id" prop="templateId">
-        <el-input v-model="form.templateId" placeholder="请输入问题模板id" clearable />
+      <el-form-item label="所属科室" prop="deptName">
+        <el-input v-model="form.deptName" placeholder="请输入标题" disabled />
       </el-form-item>
-      <el-form-item label="患者id" prop="userId">
-        <el-input v-model="form.userId" placeholder="请输入患者id" clearable />
+      <el-form-item label="回访模板" prop="templateName">
+        <el-select v-model="form.templateName" placeholder="请选择模板" @change="change">
+          <el-option v-for="item in templateList" :key="item.title" :label="item.title" :value="item.title" clearable></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="状态" prop="state">
-        <el-input v-model="form.state" placeholder="请输入状态" clearable />
-      </el-form-item>
-      <el-form-item label="医生id" prop="doctorId">
-        <el-input v-model="form.doctorId" placeholder="请输入医生id" clearable />
-      </el-form-item>
-      <el-form-item label="创建人" prop="createBy">
-        <el-input v-model="form.createBy" placeholder="请输入创建人" clearable />
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createTime">
-        <el-date-picker clearable v-model="form.createTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择创建时间"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="更新人" prop="updateBy">
-        <el-input v-model="form.updateBy" placeholder="请输入更新人" clearable />
-      </el-form-item>
-      <el-form-item label="更新时间" prop="updateTime">
-        <el-date-picker clearable v-model="form.updateTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择更新时间"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="部门ID" prop="deptId">
-        <el-input v-model="form.deptId" placeholder="请输入部门ID" clearable />
+      <el-form-item label="发送患者" prop="templateList">
+        <div class="patients">
+          <el-tag size="medium" class="patient" v-for="item in form.patientList" :key="item.name" closable @close="del(item)">{{ item.name }}</el-tag>
+          <el-button type="primary" icon="el-icon-search" @click="selectPatient()" class="btn">添加</el-button>
+        </div>
       </el-form-item>
     </el-form>
     <div class="mfooter">
@@ -37,14 +24,22 @@
 </template>
 
 <script>
+import selectPatient from './selectPatient';
 export default {
   data() {
     return {
-      form: {},
-      rules: {}
+      form: {
+        deptName: this.$store.state.user.deptNameStr,
+        patientList: []
+      },
+      templateList: [],
+      rules: {
+        templateName: [{ required: true, message: '不能为空', trigger: 'blur' }]
+      }
     };
   },
   mounted() {
+    this.getTemplate();
     if (this.param.id) {
       this.ajax({ url: '/work/record/detail/' + this.param.id }).then((response) => {
         this.form = response.data;
@@ -52,6 +47,21 @@ export default {
     }
   },
   methods: {
+    getTemplate() {
+      this.ajax({ url: '/work/record/template/list' }).then((response) => {
+        this.templateList = response.data;
+      });
+    },
+    change(e) {
+      let item = this.templateList.filter((item) => item.title == e)[0];
+      this.form.op = item.op;
+    },
+    selectPatient() {
+      this.iframe({ obj: selectPatient, param: {}, title: '选择推送患者', width: '60%', height: '75%' });
+    },
+    del(item) {
+      this.form.patientList.splice(this.form.patientList.indexOf(item), 1);
+    },
     submitForm() {
       this.$refs['form'].validate((valid) => {
         if (valid) {
@@ -74,3 +84,13 @@ export default {
   }
 };
 </script>
+<style lang="scss" scoped>
+.patients {
+  .patient {
+    margin-right: 10px;
+  }
+  .btn {
+    margin-left: 15px;
+  }
+}
+</style>

+ 11 - 8
admin-ui/src/views/work/follow/record/index.vue

@@ -17,21 +17,24 @@
     </el-form>
     <el-row :gutter="10" class="mb8">
       <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:record:add']">新增</el-button>
-      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:record:edit']">修改</el-button>
       <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:record:remove']">删除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}</el-button>
     </el-row>
 
     <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="寻访记录id" align="center" prop="id" />
-      <el-table-column label="问题模板id" align="center" prop="templateId" />
-      <el-table-column label="患者id" align="center" prop="userId" />
-      <el-table-column label="状态" align="center" prop="state" />
-      <el-table-column label="医生id" align="center" prop="doctorId" />
-      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="回访模板" align="center" prop="templateName" />
+      <el-table-column label="患者姓名" align="center" prop="patientName" />
+      <el-table-column label="状态" align="center" prop="state" width="140">
+        <template slot-scope="scope">
+          <el-tag type="danger" v-if="scope.row.state == 0">待回访</el-tag>
+          <el-tag type="success" v-if="scope.row.state == 1">已回访</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建人" align="center" prop="createBy" width="130" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="160" />
+      <el-table-column label="所属科室" align="center" prop="deptName" width="160" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:record:edit']">修改</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:record:remove']">删除</el-button>
         </template>
       </el-table-column>

+ 74 - 0
admin-ui/src/views/work/follow/record/selectPatient.vue

@@ -0,0 +1,74 @@
+<template>
+  <div class="cmain">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent>
+      <el-form-item label="患者姓名" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入患者姓名" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table :data="response.rows" border @selection-change="selects">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="电话" align="center" prop="phone" />
+      <el-table-column label="状态" align="center" prop="hospitalStatus">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.hospital_status" :value="scope.row.hospitalStatus"></dict-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="入院时间" align="center" prop="admissionTime" />
+      <el-table-column label="出院时间" align="center" prop="dischargeTime" />
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+    <div class="mfooter">
+      <el-button type="primary" @click="ok()" :disabled="rows.length == 0">选中 {{ rows.length > 0 ? rows.length + '人' : '' }}</el-button>
+      <el-button @click="$layer.close(layerid)">取 消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  dicts: ['hospital_status'],
+  data() {
+    return {
+      rows: [],
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/record/visit/list', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.handleQuery();
+    },
+    selects(rows) {
+      this.rows = rows;
+    },
+    ok() {
+      this.$parent.form.patientList = this.rows;
+      this.$layer.close(this.layerid);
+    }
+  }
+};
+</script>

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/work/api/Api_FollowController.java

@@ -29,7 +29,7 @@ public class Api_FollowController extends BaseController {
     public TableDataInfo list(FollowRecord followRecord) {
         followRecord.setPatientId(getUser().getId());
         startPage();
-        List<FollowRecord> list = followRecordService.selectList(followRecord);
+        List<FollowRecord> list = followRecordService.selectAppList(followRecord);
         return getDataTable(list);
     }
 

+ 6 - 8
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/FollowRecordController.java

@@ -7,10 +7,10 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.web.work.domain.FollowRecord;
 import com.ruoyi.web.work.domain.FollowTemplate;
-import com.ruoyi.web.work.domain.Visit;
+import com.ruoyi.web.work.domain.dto.VisitDto;
+import com.ruoyi.web.work.domain.vo.VisitVoList;
 import com.ruoyi.web.work.service.IFollowRecordService;
 import com.ruoyi.web.work.service.IFollowTemplateService;
-import com.ruoyi.web.work.service.IVisitService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -31,9 +31,6 @@ public class FollowRecordController extends BaseController {
     private IFollowRecordService followRecordService;
 
     @Autowired
-    private IVisitService visitService;
-
-    @Autowired
     private IFollowTemplateService followTemplateService;
 
     @PreAuthorize("@ss.hasPermi('work:record:list')")
@@ -52,9 +49,10 @@ public class FollowRecordController extends BaseController {
 
     @PreAuthorize("@ss.hasPermi('work:record:list')")
     @GetMapping("/visit/list")
-    public TableDataInfo visitList() {
+    public TableDataInfo visitList(VisitDto dto) {
+        dto.setDoctorCode(getLoginUser().getUsername());
         startPage();
-        List<Visit> list = visitService.selectList(new Visit().setDoctorCode(getLoginUser().getUsername()));
+        List<VisitVoList> list = followRecordService.selectVisitList(dto);
         return getDataTable(list);
     }
 
@@ -69,7 +67,7 @@ public class FollowRecordController extends BaseController {
     @Log(title = "回访记录", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     public AjaxResult add(@RequestBody FollowRecord followRecord) {
-        return toAjax(followRecordService.save(followRecord));
+        return followRecordService.add(followRecord);
     }
 
     @PreAuthorize("@ss.hasPermi('work:record:edit')")

+ 16 - 28
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/FollowRecord.java

@@ -1,14 +1,14 @@
 package com.ruoyi.web.work.domain;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseData;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
-import java.util.Date;
+import java.util.List;
+
 /**
  * @author lsw
  * @date 2024-07-18
@@ -16,11 +16,20 @@ import java.util.Date;
 @Data
 @TableName(value = "tb_follow_record")
 @Accessors(chain = true)
-public class FollowRecord{
+public class FollowRecord extends BaseData {
     private static final long serialVersionUID = 1L;
 
     private Long id;
 
+    @ApiModelProperty(value = "医生id")
+    private Long userId;
+
+    @ApiModelProperty(value = "患者id")
+    private Long patientId;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String patientName;
+
     @ApiModelProperty(value = "模板名称")
     private String templateName;
 
@@ -30,30 +39,9 @@ public class FollowRecord{
     @ApiModelProperty(value = "状态:0=未回访,1=已回访")
     private Integer state;
 
-    @TableField(fill = FieldFill.INSERT)
-    private String createBy;
-
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    @TableField(fill = FieldFill.UPDATE)
-    private String updateBy;
-
-    @TableField(fill = FieldFill.UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-    @ApiModelProperty(value = "患者id")
-    private Long patientId;
-
-    @ApiModelProperty(value = "患者id")
-    @TableField(fill = FieldFill.INSERT)
-    private Long userId;
-
-    @ApiModelProperty(value = "科室ID")
-    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "部门ID")
     private Long deptId;
 
-
+    @TableField(exist = false)
+    private List<Patient> patientList;
 }

+ 14 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/dto/VisitDto.java

@@ -0,0 +1,14 @@
+package com.ruoyi.web.work.domain.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class VisitDto {
+
+    private String doctorCode;
+
+    private String name;
+
+}

+ 41 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/vo/VisitVoList.java

@@ -0,0 +1,41 @@
+package com.ruoyi.web.work.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class VisitVoList {
+
+    @ApiModelProperty(value = "患者ID")
+    private Long id;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String name;
+
+    @ApiModelProperty(value = "性别")
+    private String sex;
+
+    @ApiModelProperty(value = "电话")
+    private String phone;
+
+    @ApiModelProperty(value = "主治医师")
+    private String physician;
+
+    @ApiModelProperty(value = "出院方式 1-治愈 2-好转 3 -稳定 4-恶化 5-死亡 9 -其他")
+    private String dischargeMethod;
+
+    @ApiModelProperty(value = " 在院状态 0 入院登记 1 病区分床 2 病人出区 3 病人出院 4 取消结算 5 进入 ICU 6 进入产房 7 转科状态 8 数据转出 9 入院作")
+    private String hospitalStatus;
+
+    @ApiModelProperty(value = "入院时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date admissionTime;
+
+    @ApiModelProperty(value = "出院时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date dischargeTime;
+
+}

+ 9 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/FollowRecordMapper.java

@@ -1,8 +1,11 @@
 package com.ruoyi.web.work.mapper;
 
-import java.util.List;
-import com.ruoyi.web.work.domain.FollowRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.web.work.domain.FollowRecord;
+import com.ruoyi.web.work.domain.dto.VisitDto;
+import com.ruoyi.web.work.domain.vo.VisitVoList;
+
+import java.util.List;
 
 /**
  * @author lsw
@@ -10,4 +13,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface FollowRecordMapper extends BaseMapper<FollowRecord> {
     List<FollowRecord> selectList(FollowRecord followRecord);
+
+    List<FollowRecord> selectAppList(FollowRecord followRecord);
+
+    List<VisitVoList> selectVisitList(VisitDto dto);
 }

+ 19 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IFollowRecordService.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.web.work.domain.FollowRecord;
 import com.ruoyi.web.work.domain.dto.FollowRecordDto;
+import com.ruoyi.web.work.domain.dto.VisitDto;
+import com.ruoyi.web.work.domain.vo.VisitVoList;
 
 import java.util.List;
 
@@ -29,4 +31,21 @@ public interface IFollowRecordService extends IService<FollowRecord> {
      * @return
      */
     AjaxResult push(FollowRecordDto dto);
+
+
+    /**
+     * 根据医生账户查询该医生的患者
+     * @param dto
+     * @return
+     */
+    List<VisitVoList> selectVisitList(VisitDto dto);
+
+    List<FollowRecord> selectAppList(FollowRecord followRecord);
+
+    /**
+     * 新增回访记录
+     * @param followRecord
+     * @return
+     */
+    AjaxResult add(FollowRecord followRecord);
 }

+ 33 - 5
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/FollowRecordServiceImpl.java

@@ -6,13 +6,14 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.web.work.api.util.AppUtil;
 import com.ruoyi.web.work.domain.FollowRecord;
 import com.ruoyi.web.work.domain.dto.FollowRecordDto;
+import com.ruoyi.web.work.domain.dto.VisitDto;
+import com.ruoyi.web.work.domain.vo.VisitVoList;
 import com.ruoyi.web.work.mapper.FollowRecordMapper;
-import com.ruoyi.web.work.mapper.FollowTemplateMapper;
 import com.ruoyi.web.work.service.IFollowRecordService;
-import com.sun.jna.platform.win32.ShellAPI;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -24,9 +25,6 @@ public class FollowRecordServiceImpl extends ServiceImpl<FollowRecordMapper, Fol
     @Autowired
     private FollowRecordMapper followRecordMapper;
 
-    @Autowired
-    private FollowTemplateMapper followTemplateMapper;
-
     @Override
     public List<FollowRecord> selectList(FollowRecord followRecord) {
         return followRecordMapper.selectList(followRecord);
@@ -54,4 +52,34 @@ public class FollowRecordServiceImpl extends ServiceImpl<FollowRecordMapper, Fol
         }
         return AjaxResult.success();
     }
+
+    @Override
+    public List<VisitVoList> selectVisitList(VisitDto dto) {
+        return followRecordMapper.selectVisitList(dto);
+    }
+
+    @Override
+    public List<FollowRecord> selectAppList(FollowRecord followRecord) {
+        return followRecordMapper.selectAppList(followRecord);
+    }
+
+    @Override
+    public AjaxResult add(FollowRecord followRecord) {
+        if (followRecord.getPatientList().size() == 0) {
+            return AjaxResult.error("请选择推送的患者");
+        }
+        List<FollowRecord> followRecordList = new ArrayList<>();
+        followRecord.getPatientList().forEach(e -> {
+            FollowRecord record = new FollowRecord();
+            record.setTemplateName(followRecord.getTemplateName());
+            record.setOp(followRecord.getOp());
+            record.setPatientId(e.getId());
+            record.setPatientName(e.getName());
+            followRecordList.add(record);
+        });
+        if (!saveBatch(followRecordList)) {
+            throw new ServiceException("新增回访记录失败");
+        }
+        return AjaxResult.success();
+    }
 }

+ 36 - 2
ruoyi-admin/src/main/resources/mapper/work/FollowRecordMapper.xml

@@ -5,13 +5,47 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 <mapper namespace="com.ruoyi.web.work.mapper.FollowRecordMapper">
     
     <select id="selectList" resultType="com.ruoyi.web.work.domain.FollowRecord">
+        SELECT
+        k.id,
+        k.template_name,
+        k.patient_name,
+        k.state,
+        k.create_time,
+        k.create_by,
+        d.dept_name AS deptName
+        FROM
+        tb_follow_record k
+        LEFT JOIN sys_dept d ON d.dept_id = k.dept_id
+        WHERE 1=1
+            <if test="patientId != null "> AND k.patient_id = #{patientId}</if>
+            <if test="userId != null "> and k.user_id = #{userId}</if>
+            <if test="state != null "> and k.state = #{state}</if>
+            <if test="deptId != null "> and k.dept_id = #{deptId}</if>
+    </select>
+
+    <select id="selectAppList" resultType="com.ruoyi.web.work.domain.FollowRecord">
         select id,template_name,state,create_time from tb_follow_record
         <where>
-            <if test="patientId != null "> and patient_id = #{patientId}</if>
             <if test="userId != null "> and user_id = #{userId}</if>
             <if test="state != null "> and state = #{state}</if>
-            <if test="deptId != null "> and dept_id = #{deptId}</if>
         </where>
     </select>
 
+    <select id="selectVisitList" resultType="com.ruoyi.web.work.domain.vo.VisitVoList">
+        SELECT
+            v.pat_id id,
+            v.hospital_status,
+            v.admission_time,
+            v.discharge_time,
+            p.name,
+            p.phone
+        FROM
+            tb_visit v
+                LEFT JOIN tb_patient p ON p.id = v.pat_id
+        WHERE
+            v.doctor_code =#{doctorCode}
+        <if test="name != null  and name != ''"> AND p.name like concat('%', #{name}, '%')</if>
+        ORDER BY v.id DESC
+    </select>
+
 </mapper>