Переглянути джерело

add 设备查询
add 临床条件查询

A17404李放 3 роки тому
батько
коміт
9fff0e1b55

+ 0 - 5
coffee-system/src/main/java/com/coffee/bus/controller/BusClinicController.java

@@ -1,17 +1,12 @@
 package com.coffee.bus.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import com.baomidou.mybatisplus.core.mapper.Mapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.coffee.bus.controller.vo.ClinicStatsVo;
-import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.service.dto.ClinicQuery;
 import com.coffee.bus.service.dto.ClinicResult;
 import com.coffee.bus.service.dto.ClinicStatsReturnResult;
-import com.coffee.common.crud.BaseService;
-import com.coffee.common.crud.controller.BaseCrudController;
 import com.coffee.common.result.R;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 21 - 12
coffee-system/src/main/java/com/coffee/bus/controller/BusDeviceController.java

@@ -1,18 +1,26 @@
 package com.coffee.bus.controller;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.coffee.bus.controller.vo.DeviceBindVo;
 import com.coffee.bus.entity.BusDeviceEntity;
+import com.coffee.bus.entity.BusDeviceRunningEntity;
 import com.coffee.bus.entity.BusHospitalEntity;
 import com.coffee.bus.enums.DeviceAlarmEnum;
+import com.coffee.bus.enums.DeviceStatusEnum;
 import com.coffee.bus.exception.BusinessException;
 import com.coffee.bus.exception.ErrorStatus;
 import com.coffee.bus.registry.device.DeviceRegistry;
+import com.coffee.bus.service.LocalBusDeviceRunningService;
 import com.coffee.bus.service.LocalBusDeviceService;
+import com.coffee.bus.service.dto.DeviceQuery;
+import com.coffee.bus.service.dto.DeviceResult;
 import com.coffee.common.crud.BaseService;
 import com.coffee.common.crud.controller.BaseCrudController;
 import com.coffee.common.exception.CustomException;
@@ -27,6 +35,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.constraints.NotNull;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author lifang
@@ -43,28 +52,28 @@ import java.util.Objects;
 @Api(tags = "设备管理",description = "统一权限前缀(device:info),device:info:add")
 public class BusDeviceController extends BaseCrudController<BusDeviceEntity, String> {
     private final LocalBusDeviceService deviceService;
-
+    private final LocalBusDeviceRunningService runningService;
     @PostMapping("/shift/bind")
     @ApiOperation(value = "设备换绑",notes = "权限【device:info:shift】")
     public R shift(@RequestBody DeviceBindVo vo,@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId){
         if(StrUtil.isEmpty(vo.getBindTenantId())|| CollectionUtil.isEmpty(vo.getDeviceIds())){
             throw new CustomException("选择的医院、设备不能为空");
         }
-        deviceService.shift(tenantId,vo.getDeviceIds(),vo.getBindTenantId());
-        return R.success(DeviceAlarmEnum.values());
-    }
-
-    @PostMapping("/undo/bind")
-    @ApiOperation(value = "设备解绑",notes = "即自动将该设备绑定到默认医院上,权限【device:info:undo】")
-    public R undo(@RequestBody DeviceBindVo vo,@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId){
-        if( CollectionUtil.isEmpty(vo.getDeviceIds())){
-            throw new CustomException("选择的设备不能为空");
+         List<String> deviceIds = vo.getDeviceIds();
+        List<BusDeviceRunningEntity> deviceList = runningService.listByIds(deviceIds);
+        if(deviceList.stream().anyMatch(device -> !device.getRunState().equals(DeviceStatusEnum.Shutdown))){
+            throw new CustomException("所选设备中有设备未处于关机状态,此次操作无法进行");
         }
-        //1为默认医院id
-        deviceService.shift(tenantId,vo.getDeviceIds(),"1");
+        deviceService.shift(tenantId,vo.getDeviceIds(),vo.getBindTenantId());
         return R.success(DeviceAlarmEnum.values());
     }
 
+    @PostMapping("/query/page")
+    @SaCheckPermission("device:info:query")
+    @ApiOperation(value = "设备管理分页查询",notes = "权限【device:info:query】")
+    public R<IPage<DeviceResult>> pageQuery(@RequestBody DeviceQuery query){
+        return R.success(deviceService.pageQuery(query.getPage(),query));
+   }
     /**
      * 权限控制前缀
      * @return

+ 0 - 1
coffee-system/src/main/java/com/coffee/bus/entity/BusClinicEntity.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.coffee.bus.bean.HisInfo;
 import com.coffee.bus.service.dto.UndoDeviceConfig;
 import com.coffee.common.entity.TenantGenericEntity;

+ 1 - 2
coffee-system/src/main/java/com/coffee/bus/enums/DeviceAlarmEnum.java

@@ -31,8 +31,7 @@ public enum DeviceAlarmEnum  implements IEnum<Integer> {
     Finished(6,"输液结束"),
     LowBattery(7,"电量耗尽报警"),
     OutOfControl(8,"电机失控报警"),
-    Machine(9,"机械故障"),
-    NoSignal(10,"不在服务区");
+    Machine(9,"机械故障"),;
 
 
     @Getter

+ 2 - 1
coffee-system/src/main/java/com/coffee/bus/enums/DeviceStatusEnum.java

@@ -27,7 +27,8 @@ public enum DeviceStatusEnum  implements IEnum<Integer> {
     StartUp(1,"开机"),
     Running(2,"运行"),
     Pause(3,"暂停"),
-    Waiting(4,"待机")
+    Waiting(4,"待机"),
+    NoSignal(5,"不在服务区")
     ;
 
 

+ 2 - 1
coffee-system/src/main/java/com/coffee/bus/mapper/BusClinicMapper.java

@@ -7,6 +7,7 @@ import com.coffee.bus.controller.vo.ClinicStatsVo;
 import com.coffee.bus.entity.BusClinicEntity;
 import java.util.*;
 
+import com.coffee.bus.service.dto.ClinicQuery;
 import com.coffee.bus.service.dto.ClinicResult;
 import com.coffee.bus.service.dto.ClinicStatsQueryResult;
 import org.apache.ibatis.annotations.Mapper;
@@ -42,5 +43,5 @@ public interface BusClinicMapper extends BaseMapper<BusClinicEntity> {
      * @param page
      * @return IPage<ClinicResult>
      */
-    IPage<ClinicResult> pageQuery(Page<ClinicResult> page);
+    IPage<ClinicResult> pageQuery(Page<ClinicResult> page,@Param("query") ClinicQuery query);
 }

+ 6 - 0
coffee-system/src/main/java/com/coffee/bus/mapper/BusDeviceMapper.java

@@ -1,8 +1,13 @@
 package com.coffee.bus.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.coffee.bus.entity.BusDeviceEntity;
+import com.coffee.bus.service.dto.DeviceQuery;
+import com.coffee.bus.service.dto.DeviceResult;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 /**
@@ -29,4 +34,5 @@ public interface BusDeviceMapper extends BaseMapper<BusDeviceEntity> {
      */
     Integer notDelete(String deviceId);
 
+    IPage<DeviceResult> pageQuery(Page<DeviceResult> page,@Param("query") DeviceQuery query);
 }

+ 1 - 0
coffee-system/src/main/java/com/coffee/bus/registry/patient/ClusterPatientRegistry.java

@@ -65,6 +65,7 @@ public class ClusterPatientRegistry implements PatientRegistry {
                 clinic.setId(IdWorker.getIdStr());
                 clinic.setPatientCode(patientCode);
                 clinic.setTenantId(hospitalId);
+                clinic.setMonitorType(true);
                 //当用户不存在时,创建用户,并给与用户一个空的临床信息
                 insert=true;
                 patient=new BusPatientEntity();

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/service/LocalBusClinicService.java

@@ -109,6 +109,6 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
     }
 
     public IPage<ClinicResult> pageQuery(ClinicQuery query){
-        return this.baseMapper.pageQuery(query.getPage());
+        return this.baseMapper.pageQuery(query.getPage(),query);
     }
 }

+ 16 - 4
coffee-system/src/main/java/com/coffee/bus/service/LocalBusDeviceService.java

@@ -4,6 +4,8 @@ import cn.hutool.core.util.StrUtil;
 import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.coffee.aliyun.sdk.AliyunIotSdk;
 import com.coffee.bus.bean.AliIotConfig;
 import com.coffee.bus.entity.BusHospitalEntity;
@@ -11,6 +13,8 @@ import com.coffee.bus.registry.device.DeviceRegistry;
 import com.coffee.bus.entity.BusDeviceEntity;
 import com.coffee.bus.mapper.BusDeviceMapper;
 import com.coffee.bus.registry.device.DeviceOperator;
+import com.coffee.bus.service.dto.DeviceQuery;
+import com.coffee.bus.service.dto.DeviceResult;
 import com.coffee.common.crud.BaseService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -169,6 +173,10 @@ public class LocalBusDeviceService extends BaseService<BusDeviceMapper, BusDevic
         return null;
     }
 
+
+    public IPage<DeviceResult> pageQuery(Page<DeviceResult> page, DeviceQuery query){
+        return this.baseMapper.pageQuery(page,query);
+    }
     /**
      * @author 龙三郎
      * 从阿里云平台获取全部的设备,同步到系统数据库
@@ -197,13 +205,17 @@ public class LocalBusDeviceService extends BaseService<BusDeviceMapper, BusDevic
      */
     @Transactional(rollbackFor = Exception.class)
     public void shift(String beforeTenantId,List<String> deviceIds, String afterTenantId) {
-        hospitalService.update(new UpdateWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getId,beforeTenantId).setSql("device_count=device_count-"+deviceIds.size()));
+        if(!beforeTenantId.equals(afterTenantId)){
+            BusHospitalEntity originHospital = hospitalService.getById(beforeTenantId);
+            int remain = originHospital.getDeviceCount() - deviceIds.size();
+            hospitalService.update(new UpdateWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getId,beforeTenantId).set(BusHospitalEntity::getDeviceCount,remain>0?remain:0));
+
+            hospitalService.update(new UpdateWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getId,afterTenantId).setSql("device_count=device_count+"+deviceIds.size()));
+        }
+
         this.update(new UpdateWrapper<BusDeviceEntity>().lambda()
                 .in(BusDeviceEntity::getDeviceId,deviceIds)
                 .set(BusDeviceEntity::getTenantId,afterTenantId));
-
-        hospitalService.update(new UpdateWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getId,afterTenantId).setSql("device_count=device_count+"+deviceIds.size()));
-
         deviceIds.stream()
                 .map(deviceRegistry::getOperator)
                 .forEach(deviceOperator -> deviceOperator.setTenantId(afterTenantId));

+ 2 - 2
coffee-system/src/main/java/com/coffee/bus/service/dto/ClinicQuery.java

@@ -1,12 +1,12 @@
 package com.coffee.bus.service.dto;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 import java.util.*;
 
 /**
@@ -18,7 +18,7 @@ import java.util.*;
  */
 @ApiModel("临床管理查询")
 @Data
-public class ClinicQuery {
+public class ClinicQuery implements Serializable {
     @ApiModelProperty("患者类型, 0、其他监控 1、输注监控")
     private Integer monitorType;
 

+ 38 - 0
coffee-system/src/main/java/com/coffee/bus/service/dto/DeviceQuery.java

@@ -0,0 +1,38 @@
+package com.coffee.bus.service.dto;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.*;
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName DeviceQuery.java
+ * @Description TODO
+ * @createTime 2022年05月11日 13:38:00
+ */
+@Data
+@ApiModel("设备查询参数")
+@NoArgsConstructor
+public class DeviceQuery implements Serializable {
+    @ApiModelProperty("设备id")
+    private String deviceId;
+
+    @ApiModelProperty("设备别名")
+    private String alias;
+
+    @ApiModelProperty("设备运行状态集合")
+    private List<Integer> runStates;
+
+    @ApiModelProperty("设备报警状态集合")
+    private List<Integer> alarms;
+
+    @ApiModelProperty("分页查询")
+    @NotNull(message = "分页查询参数不可为空")
+    private Page<DeviceResult> page;
+}

+ 61 - 0
coffee-system/src/main/java/com/coffee/bus/service/dto/DeviceResult.java

@@ -0,0 +1,61 @@
+package com.coffee.bus.service.dto;
+
+import com.coffee.bus.bean.AliIotConfig;
+import com.coffee.bus.enums.DeviceAlarmEnum;
+import com.coffee.bus.enums.DeviceStatusEnum;
+import com.coffee.bus.enums.DeviceStatusEnum2;
+import com.coffee.bus.enums.DeviceTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName DeviceResult.java
+ * @Description TODO
+ * @createTime 2022年05月11日 13:38:00
+ */
+@Data
+@ApiModel("设备查询结果")
+public class DeviceResult {
+    @ApiModelProperty(value = "设备唯一id")
+    private String deviceId;
+
+    @ApiModelProperty(value = "设备别名")
+    private String alias;
+
+    @ApiModelProperty(value = "设备类型")
+    private DeviceTypeEnum type;
+
+    @ApiModelProperty(value = "运行状态",readOnly = true)
+    private DeviceStatusEnum runState;
+
+    @ApiModelProperty(value = "报警信息",readOnly = true)
+    private DeviceAlarmEnum alarm;
+
+    @ApiModelProperty(value = "第三方平台返回配置")
+    private AliIotConfig config;
+
+    @ApiModelProperty(value = "sim卡卡号")
+    private String simIccid;
+
+    @ApiModelProperty(value = "移动网络运营商")
+    private String simMno;
+
+    @ApiModelProperty(value = "是否启用,0、不启用 1、启用 ")
+    private Boolean enable;
+
+    @ApiModelProperty(value = "设备在线状态,0未激活,1在线,2离线",readOnly = true)
+    private DeviceStatusEnum2 status;
+
+    @ApiModelProperty(value = "创建时间",readOnly = true)
+    private Date createTime;
+
+    @ApiModelProperty(value = "修改时间",readOnly = true)
+    private Date updateTime;
+
+    private String tenantName;
+}

+ 1 - 0
coffee-system/src/main/java/com/coffee/bus/service/dto/PatientMonitorResult.java

@@ -180,6 +180,7 @@ public class PatientMonitorResult {
     @ApiModelProperty("提醒字段")
     private String warns;
 
+
     private void judgeWarnWillFinished() {
         if(!Boolean.TRUE.equals(this.warnWillFinished)){
            return;

+ 27 - 2
coffee-system/src/main/resources/mapper/bus/BusClinicMapper.xml

@@ -66,7 +66,7 @@
         order by h.upload_time asc
     </select>
 
-    <select id="pageQuery" resultMap="queryResult">
+    <select id="pageQuery" resultMap="queryResult" parameterType="com.coffee.bus.service.dto.ClinicQuery">
         select
             c.id as clinic_id,
             c.patient_code as patient_code,
@@ -83,7 +83,32 @@
             c.end_time as monitor_end_time,
             i.infusion_count as infusion_count,
             eval.eval_count as eval_count
-            from bus_clinic as c
+            from (select * from bus_clinic
+            <where>
+                <if test="query.monitorType!=null">
+                    and monitor_type=#{query.monitorType}
+                </if>
+                <if test="query.surgeryName!=null">
+                    and name like concat('%',#{query.surgeryName},'%')
+                </if>
+                <if test="query.patientName!=null">
+                    and patient_name like concat('%',#{query.patientName},'%')
+                </if>
+                <if test="query.patientCode!=null">
+                    and patient_code like concat('%',#{query.patientCode},'%')
+                </if>
+                <if test="query.ward!=null">
+                    and ward=#{query.ward}
+                </if>
+                <if test="query.bedNo!=null">
+                    and bed_no like concat('%',#{query.bedNo},'%')
+                </if>
+                <if test="query.timeRange != null and query.timeRange.size >0">
+                    and monitor_start_time &gt; #{query.timeRange[0]} and  monitor_start_time &lt; #{query.timeRange[1]}
+                </if>
+            </where>
+
+            ) as c
             left join  bus_patient  as p on c.id=p.clinic_id
             left join  (select clinic_id,count(1) as infusion_count from bus_infusion_history GROUP BY clinic_id) as i on i.clinic_id=c.id
             left join (select clinic_id,count(1) as eval_count from bus_evaluation  GROUP BY clinic_id) as eval on eval.clinic_id=c.id

+ 60 - 0
coffee-system/src/main/resources/mapper/bus/BusDeviceMapper.xml

@@ -2,6 +2,21 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.coffee.bus.mapper.BusDeviceMapper">
 
+    <resultMap id="pageQueryResult" type="com.coffee.bus.service.dto.DeviceResult">
+        <result column="device_id" property="deviceId"/>
+        <result column="alias" property="alias"/>
+        <result column="type" property="type"/>
+        <result column="run_state" property="runState"/>
+        <result column="alarm" property="alarm"/>
+        <result column="config" property="config" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="sim_iccid" property="simIccid"/>
+        <result column="sim_mno" property="simMno"/>
+        <result column="enable" property="enable"/>
+        <result column="status" property="status"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="tenant_id" property="tenantName" typeHandler="com.coffee.common.config.mybatis.TenantNameHandler"/>
+    </resultMap>
 
     <resultMap id="deviceResult" type="com.coffee.bus.entity.BusDeviceEntity" autoMapping="true">
         <result property="config" column="config" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"></result>
@@ -15,4 +30,49 @@
         SET is_delete = 0
         WHERE device_id = #{deviceId}
     </update>
+
+
+    <select id="pageQuery" resultMap="pageQueryResult" parameterType="com.coffee.bus.service.dto.DeviceQuery">
+        select
+        d.device_id as device_id,
+        d.alias as alias,
+        d.type as type,
+        r.run_state as run_state,
+        r.alarm as alarm,
+        d.config as config,
+        d.sim_iccid as sim_iccid,
+        d.sim_mno as sim_mno,
+        d.`enable` as enable,
+        d.`status` as `status`,
+        d.create_time as create_time,
+        d.update_time as update_time,
+        d.tenant_id as tenant_id
+        from (select * from bus_device
+        <where>
+            <if test="query.deviceId!=null">
+                and device_id like concat('%',#{query.deviceId},'%')
+            </if>
+            <if test="query.alias!=null">
+                and alias like concat('%',#{query.alias},'%')
+            </if>
+        </where>
+        ) AS d
+        LEFT JOIN (select * from bus_device_running
+        <where>
+            <if test="query.runStates != null and query.runStates.size > 0">
+                and run_state in
+                <foreach item="state" index="index" collection="query.runStates" open="(" separator="," close=")">
+                    #{state, jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="query.alarms != null and query.alarms.size > 0">
+                and alarm in
+                <foreach item="alarm" index="index" collection="query.alarms" open="(" separator="," close=")">
+                    #{alarm, jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </where>
+        ) as r
+        on r.device_id=d.device_id
+    </select>
 </mapper>