zhizhi wu 4 years ago
parent
commit
6c12ff9911
  1. 44
      src/main/java/com/ccsens/carbasics/api/OrganizationController.java
  2. 4
      src/main/java/com/ccsens/carbasics/bean/dto/PatientDto.java
  3. 2
      src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java
  4. 7
      src/main/java/com/ccsens/carbasics/persist/dao/FirstAidDao.java
  5. 19
      src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java
  6. 14
      src/main/java/com/ccsens/carbasics/service/FirstAidService.java
  7. 10
      src/main/java/com/ccsens/carbasics/service/IOrganizationService.java
  8. 90
      src/main/java/com/ccsens/carbasics/service/OrganizationService.java
  9. 2
      src/main/java/com/ccsens/carbasics/service/StatisticalService.java
  10. 10
      src/main/java/com/ccsens/carbasics/util/Constant.java
  11. 17
      src/main/resources/mapper_dao/FirstAidDao.xml
  12. 6
      src/main/resources/mapper_dao/FirstAidRecordDao.xml
  13. 35
      src/main/resources/mapper_dao/OrganizationDao.xml

44
src/main/java/com/ccsens/carbasics/api/OrganizationController.java

@ -1,13 +1,23 @@
package com.ccsens.carbasics.api;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.carbasics.bean.dto.OrganizationDto;
import com.ccsens.carbasics.bean.dto.StatisticalDto;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import com.ccsens.carbasics.bean.vo.StatisticalVo;
import com.ccsens.carbasics.service.IOrganizationService;
import com.ccsens.carbasics.util.Constant;
import com.ccsens.carbasics.util.DefaultCodeError;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.PoiUtil;
import com.ccsens.util.PropUtil;
import com.ccsens.util.WebConstant;
import com.ccsens.util.bean.dto.QueryDto;
import com.ccsens.util.exception.BaseException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -17,8 +27,12 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.util.Date;
import java.util.List;
/**
* @description:
@ -43,4 +57,34 @@ public class OrganizationController {
log.info("山西省地市查询结果:{}", rank);
return JsonResponse.newInstance().ok(rank);
}
@MustLogin
@ApiOperation(value = "机构导入", notes = "")
@RequestMapping(value = "/import", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse importOrganization( QueryDto<MultipartFile> params) throws Exception {
MultipartFile f = params.getParam();
String ext = FileUtil.extName(f.getOriginalFilename());
if(StrUtil.isEmpty(ext) || !Constant.WbsExcel.WBS_FILE_FORMAT.contains(ext)){
throw new BaseException(DefaultCodeError.FILE_FORMAT_ERROR);
}
//文件路径
String dir = PropUtil.path + "organization/";
String path = DateUtil.format(new Date(), "yyyyMMdd") + File.separator + IdUtil.simpleUUID() + "." + ext;
String fullPath = dir + path;
//转成file
File file = new File(fullPath);
if (!file.getParentFile().exists()) {
file.mkdirs();
}
FileUtil.writeFromStream(f.getInputStream(), fullPath);
List<Object[]> rowList = PoiUtil.readExce(file, 0, null, 1, false);
//导入数据库
String result = organizationService.importCode(rowList,params.getUserId());
JsonResponse ok = JsonResponse.newInstance().ok();
ok.setMsg(StrUtil.isBlank(result) ? ok.getMsg() : result);
return ok;
}
}

4
src/main/java/com/ccsens/carbasics/bean/dto/PatientDto.java

@ -172,7 +172,7 @@ public class PatientDto {
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("病例状态 0:创建 1:急救审核通过 2:急救审核拒绝 3出院审核通过 4出院审核拒绝 5:申请修改 6:申请拒绝")
private byte dataStatus;
private Byte dataStatus;
@ApiModelProperty("患者姓名")
private String name;
@ApiModelProperty("到院时间-开始")
@ -185,6 +185,8 @@ public class PatientDto {
@Length(max = 18,message = "请输入正确的身份证号")
@ApiModelProperty("证件号")
private String idcard;
@ApiModelProperty("查询类型,0:急救 1:出院")
private Byte queryType = 0;
@ApiModelProperty("第几页")
@Min(value = 1)

2
src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java

@ -135,7 +135,7 @@ public class StatisticalDto {
public static class AreaMedian {
@NotNull(message = "请选择对应的省份信息")
@ApiModelProperty("省质控code")
private String code;
private String code = "SZK";
@ApiModelProperty("开始时间")
private Long startTime;
@NotNull

7
src/main/java/com/ccsens/carbasics/persist/dao/FirstAidDao.java

@ -1,16 +1,13 @@
package com.ccsens.carbasics.persist.dao;
import com.ccsens.carbasics.bean.dto.PatientDto;
import com.ccsens.carbasics.bean.dto.StatisticalDto;
import com.ccsens.carbasics.bean.po.FirstAid;
import com.ccsens.carbasics.bean.po.Organization;
import com.ccsens.carbasics.bean.vo.PatientVo;
import com.ccsens.carbasics.bean.vo.StatisticalVo;
import com.ccsens.carbasics.persist.mapper.FirstAidMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.util.List;
/**
@ -28,11 +25,13 @@ public interface FirstAidDao extends FirstAidMapper {
/**
* 质检员查看急救列表
*
* @param templates 模板列表
* @param hospitalId 医院id
* @param param 筛选条件
* @return 返回急救信息
*/
List<PatientVo.PatientListByQuality> queryPatientListByQuality(@Param("template")byte template,@Param("hospitalId")Long hospitalId, @Param("param")PatientDto.QueryListByQuality param);
List<PatientVo.PatientListByQuality> queryPatientListByQuality(@Param("templates") List<Byte> templates, @Param("hospitalId")Long hospitalId, @Param("param")PatientDto.QueryListByQuality param);
/**
* 秘书查看急救列表

19
src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java

@ -1,6 +1,7 @@
package com.ccsens.carbasics.persist.dao;
import com.ccsens.carbasics.bean.po.Organization;
import com.ccsens.carbasics.bean.po.OrganizationParent;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import com.ccsens.carbasics.persist.mapper.OrganizationMapper;
import org.apache.ibatis.annotations.Param;
@ -61,4 +62,22 @@ public interface OrganizationDao extends OrganizationMapper {
List<OrganizationVo.RankItem> rankByDntMedian(@Param("areaId") Long areaId, @Param("level")byte level);
/**
* 根据机构名查找唯一的机构
* @param name 机构名
* @return 机构
*/
Organization getOrganizationByName(@Param("name") String name);
/**
* 批量添加机构
* @param organizations 机构
*/
void batchInsert(@Param("organizations") List<Organization> organizations);
/**
* 批量添加机构上级
* @param parents 机构上级
*/
void batchInsertParent(@Param("parents") List<OrganizationParent> parents);
}

14
src/main/java/com/ccsens/carbasics/service/FirstAidService.java

@ -281,10 +281,10 @@ public class FirstAidService implements IFirstAidService{
@Override
public PageInfo<PatientVo.PatientListByQuality> queryPatientListByQuality(PatientDto.QueryListByQuality param, Long userId) {
//根据项目id查找医院id
FirstAid firstAid = firstAidDao.getIdByProjectId(param.getProjectId());
if(ObjectUtil.isNull(firstAid) || ObjectUtil.isNull(firstAid.getHospitalId())){
throw new BaseException(DefaultCodeError.NOT_HOSPITAL_ID);
}
// FirstAid firstAid = firstAidDao.getIdByProjectId(param.getProjectId());
// if(ObjectUtil.isNull(firstAid) || ObjectUtil.isNull(firstAid.getHospitalId())){
// throw new BaseException(DefaultCodeError.NOT_HOSPITAL_ID);
// }
//查找当前用户的职位和科室
OrganizationVo.MemberPosition memberPosition = organizationMemberDao.getMemberPosition(userId);
//用户的科室必须是医院的科室
@ -299,9 +299,13 @@ public class FirstAidService implements IFirstAidService{
if(CollectionUtil.isEmpty(templateList)){
throw new BaseException(DefaultCodeError.NOT_TEMPLATE);
}
List<Byte> templates = new ArrayList<>();
templateList.forEach(template -> {
templates.add(template.getTemplate());
});
//查找病例信息
PageHelper.startPage(param.getPageNum(),param.getPageSize());
List<PatientVo.PatientListByQuality> patientList = firstAidDao.queryPatientListByQuality(templateList.get(0).getTemplate(),firstAid.getHospitalId(),param);
List<PatientVo.PatientListByQuality> patientList = firstAidDao.queryPatientListByQuality(templates,organization.getId(),param);
return new PageInfo<>(patientList);
}

10
src/main/java/com/ccsens/carbasics/service/IOrganizationService.java

@ -3,6 +3,8 @@ package com.ccsens.carbasics.service;
import com.ccsens.carbasics.bean.dto.OrganizationDto;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import java.util.List;
public interface IOrganizationService {
/**
@ -12,4 +14,12 @@ public interface IOrganizationService {
* @return 医院排名
*/
OrganizationVo.Rank rank(OrganizationDto.Rank param, Long userId);
/**
* 导入机构信息
* @param fullPath 文件路径
* @param userId 用户ID
* @return
*/
String importCode(List<Object[]> fullPath, Long userId) throws Exception;
}

90
src/main/java/com/ccsens/carbasics/service/OrganizationService.java

@ -1,11 +1,15 @@
package com.ccsens.carbasics.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.StrUtil;
import com.ccsens.carbasics.bean.dto.OrganizationDto;
import com.ccsens.carbasics.bean.po.Organization;
import com.ccsens.carbasics.bean.po.*;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import com.ccsens.carbasics.persist.dao.OrganizationDao;
import com.ccsens.carbasics.persist.mapper.OrganizationParentMapper;
import com.ccsens.carbasics.util.Constant;
import com.ccsens.util.WebConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -13,7 +17,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @description:
@ -27,6 +33,10 @@ public class OrganizationService implements IOrganizationService {
@Resource
private OrganizationDao organizationDao;
@Resource
private OrganizationParentMapper organizationParentMapper;
@Resource
private Snowflake snowflake;
@Override
public OrganizationVo.Rank rank(OrganizationDto.Rank param, Long userId) {
@ -46,9 +56,14 @@ public class OrganizationService implements IOrganizationService {
break;
default:break;
}
for (int i = 0; i<items.size(); i++) {
OrganizationVo.RankItem item = items.get(i);
item.setRank(i+1);
}
OrganizationVo.RankItem self = null;
if (organization != null && organization.getOrganizationType() == Constant.Organization.HOSPITAL && CollectionUtil.isNotEmpty(items)) {
for (OrganizationVo.RankItem item: items) {
for (int i = 0; i<items.size(); i++) {
OrganizationVo.RankItem item = items.get(i);
if (item.getId().longValue() == organization.getId().longValue()) {
self = item;
break;
@ -60,4 +75,75 @@ public class OrganizationService implements IOrganizationService {
rank.setList(items);
return rank;
}
@Override
public String importCode(List<Object[]> rowList, Long userId) throws Exception {
if (CollectionUtil.isEmpty(rowList)) {
return null;
}
List<Organization> organizations = new ArrayList<>();
List<OrganizationParent> parents = new ArrayList<>();
Map<String, Long> nameMap = new HashMap<>();
int nameIndex = 0;
StringBuilder builder = new StringBuilder();
rowList.forEach(row -> {
if (row == null || row.length <= nameIndex || StrUtil.isBlank((String)row[nameIndex])) {
return;
}
Organization newOrganization = new Organization();
String name = (String)row[nameIndex];
name = name.trim();
Organization oldOrganization = organizationDao.getOrganizationByName(name);
newOrganization.setId(oldOrganization == null ? snowflake.nextId() : oldOrganization.getId());
newOrganization.setName(name);
newOrganization.setOperator(userId);
for (String key: Constant.Organization.typeMap.keySet()) {
if (name.endsWith(key)) {
newOrganization.setOrganizationType(Constant.Organization.typeMap.get(key));
}
}
if (newOrganization.getOrganizationType() == null) {
builder.append(name).append("无法判断类型,设置默认类型为医院。");
newOrganization.setOrganizationType(Constant.Organization.HOSPITAL);
}
newOrganization.setCode(row.length > 1 && row[1] != null ? (String)row[1] : "");
newOrganization.setShortName(row.length > 2 && row[2] != null ? (String)row[2] : "");
newOrganization.setIntroduce(row.length > 3 && row[3] != null ? (String)row[3] : "");
newOrganization.setLevel(row.length > 4 && row[4] != null ? Byte.parseByte((String)row[4]) : 0);
organizations.add(newOrganization);
nameMap.put(name, newOrganization.getId());
int parentIndex = 5;
if (row.length <= parentIndex || row[parentIndex] == null || StrUtil.isBlank((String)row[parentIndex])) {
return;
}
String parentName = (String) row[parentIndex];
parentName = parentName.trim();
if (!nameMap.containsKey(parentName)) {
builder.append(name).append("的上级").append(parentName)
.append("未找到,请检查机构排序是否存在或排序是否正确。");
} else {
OrganizationParent parent = new OrganizationParent();
if (oldOrganization != null) {
// 删除原有的上下级关系
OrganizationParentExample parentExample = new OrganizationParentExample();
parentExample.createCriteria().andOrganizationIdEqualTo(oldOrganization.getId());
OrganizationParent update = new OrganizationParent();
update.setRecStatus(WebConstant.REC_STATUS.Deleted.value);
organizationParentMapper.updateByExampleSelective(update, parentExample);
}
parent.setId(snowflake.nextId());
parent.setOrganizationId(newOrganization.getId());
parent.setParentId(nameMap.get(parentName));
parent.setOperator(userId);
parents.add(parent);
}
});
if (CollectionUtil.isNotEmpty(organizations)) {
organizationDao.batchInsert(organizations);
}
if (CollectionUtil.isNotEmpty(parents)) {
organizationDao.batchInsertParent(parents);
}
return builder.toString();
}
}

2
src/main/java/com/ccsens/carbasics/service/StatisticalService.java

@ -218,7 +218,7 @@ public class StatisticalService implements IStatisticalService {
List<Long> hospitalIds = getHospitalIds(param.getProjectId());
List<StatisticalVo.Item> items = firstAidRecordDao.countTimeMedian(param.getMinuendCode(), param.getSubtractionCode(), hospitalIds, param.getStartTime(), param.getEndTime(), param.getCountType());
StatisticalVo.Common common = new StatisticalVo.Common();
BigDecimal median = firstAidRecordDao.countMedian(Constant.Statistical.Dnt.MINUEND_CODE, Constant.Statistical.Dnt.SUBTRACTION_CODE, hospitalIds, param.getStartTime(), param.getEndTime());
BigDecimal median = firstAidRecordDao.countMedian(param.getMinuendCode(), param.getSubtractionCode(), hospitalIds, param.getStartTime(), param.getEndTime());
common.setTotal(median == null ? "" : median.toString());
List<StatisticalVo.Item> newItems = fillItems(items, param.getStartTime(), param.getEndTime(), param.getCountType());
common.setList(newItems);

10
src/main/java/com/ccsens/carbasics/util/Constant.java

@ -96,6 +96,16 @@ public class Constant {
public static final class Organization{
/**医院*/
public final static byte HOSPITAL = 3;
public final static Map<String, Byte> typeMap = new HashMap<>();
static {
typeMap.put("省卫健委", (byte)0);
typeMap.put("省质控", (byte)1);
typeMap.put("市质控", (byte)2);
typeMap.put("医院", (byte)3);
}
}
/**科室相关*/

17
src/main/resources/mapper_dao/FirstAidDao.xml

@ -88,7 +88,9 @@
</if>
AND rec_status = 0
AND hospital_id = #{hospitalId}
AND type = #{template}
<foreach collection="templates" item="id" open="AND type in (" close=")" separator=",">
#{id}
</foreach>
) t
LEFT JOIN t_qcp_first_aid_record t1 ON t.firstAidId = t1.first_aid_id
AND t1.question_code = 'JBXX-ZYH'
@ -103,7 +105,10 @@
AND t4.question_code = 'CYQK-CYSJ'
AND t4.rec_status = 0
WHERE
t4.id IS NULL
<choose>
<when test="param.queryType == 0">t4.id IS NULL</when>
<otherwise>t4.id IS NOT NULL</otherwise>
</choose>
<if test="param.hospitalNumber!=null and param.hospitalNumber!=''">
AND t1.answer LIKE concat('%',#{param.hospitalNumber},'%')
</if>
@ -113,8 +118,8 @@
<if test="param.endTime!=null and param.endTime!=0">
AND t2.answer + 0 &lt; #{param.endTime}
</if>
GROUP BY
t.updated_at DESC
GROUP BY t.firstAidId
ORDER BY t.updated_at DESC
</select>
<select id="queryPatientListBySecretary"
resultType="com.ccsens.carbasics.bean.vo.PatientVo$PatientListByQuality">
@ -171,7 +176,7 @@
AND t2.answer + 0 &lt; #{param.endTime}
</if>
</trim>
GROUP BY
t.updated_at DESC
GROUP BY t.firstAidId
ORDER BY t.updated_at DESC
</select>
</mapper>

6
src/main/resources/mapper_dao/FirstAidRecordDao.xml

@ -235,7 +235,7 @@
<when test="type == 2">FROM_UNIXTIME(r1.answer/1000,'%Y-%m') as date,</when>
<otherwise>FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d') as date,</otherwise>
</choose>
count(*) as cnt
count(*)/2 as cnt
from t_qcp_first_aid a, t_qcp_first_aid_record r1 , t_qcp_first_aid_record r2
where a.id = r1.first_aid_id and r1.question_code = #{minuendCode}
and a.id = r2.first_aid_id and r2.question_code = #{subtractionCode}
@ -310,8 +310,8 @@
</select>
<select id="subentrySpecifyAnswer" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
SELECT
FROM_UNIXTIME( r2.answer / 1000, #{type} ),
count( a.id )
FROM_UNIXTIME( r2.answer / 1000, #{type} ) as name,
count( a.id ) as value
FROM
t_qcp_first_aid a,
t_qcp_first_aid_record r1,

35
src/main/resources/mapper_dao/OrganizationDao.xml

@ -1,6 +1,18 @@
<?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.ccsens.carbasics.persist.dao.OrganizationDao">
<insert id="batchInsert">
replace into t_organization(id, organization_type, code, name, short_name, introduce, level, operator) value
<foreach collection="organizations" item="item" separator=",">
(#{item.id}, #{item.organizationType}, #{item.code}, #{item.name}, #{item.shortName}, #{item.introduce}, #{item.level}, #{item.operator})
</foreach>
</insert>
<insert id="batchInsertParent">
replace into t_organization_parent(id, organization_id, parent_id, operator) value
<foreach collection="parents" item="item" separator=",">
(#{item.id}, #{item.organizationId}, #{item.parentId}, #{item.operator})
</foreach>
</insert>
<select id="getOrganization" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$Basic">
SELECT
@ -88,7 +100,6 @@
LIMIT 1
</select>
<select id="rankByType" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$RankItem">
select rank.*, @rank := @rank + 1 as rank from (
select h.id, h.name, h.level, ifNULL(t.total, 0) as value from
(
<choose>
@ -105,7 +116,7 @@
WHERE
organization_type = 3
<if test="level != null">
AND level = 3
AND level = #{level}
</if>
</when>
<otherwise>
@ -129,7 +140,7 @@
WHERE
ischild != 0
<if test="level != null">
AND level = 3
AND level = #{level}
</if>
AND organizationType = 3
</otherwise>
@ -140,7 +151,7 @@
<when test="type == 0">
select a.hospital_id, count(*) as total from t_qcp_first_aid a, t_qcp_first_aid_record r1 , t_qcp_first_aid_record r2
where a.id = r1.first_aid_id and r1.question_code = 'JBXX-FBSJ'
and a.id = r2.first_aid_id and r1.question_code = 'JBXX-DYSJ'
and a.id = r2.first_aid_id and r2.question_code = 'JBXX-DYSJ'
and r2.answer - r1.answer &gt; 6 * 60 * 60 * 1000
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
group by a.hospital_id
@ -158,7 +169,7 @@
a.hospital_id,
count(*) as total from t_qcp_first_aid a, t_qcp_first_aid_record r1 , t_qcp_first_aid_record r2
where a.id = r1.first_aid_id and r1.question_code = 'JBXX-FBSJ'
and a.id = r2.first_aid_id and r1.question_code = 'JBXX-DYSJ'
and a.id = r2.first_aid_id and r2.question_code = 'JBXX-DYSJ'
and r2.answer - r1.answer &lt; 6 * 60 * 60 * 1000
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
group by a.hospital_id
@ -181,12 +192,10 @@
</choose>
) t on t.hospital_id = h.id
) rank, (SELECT @rank:= 0) b
order by value
order by t.total desc
</select>
<select id="rankByDntMedian" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$RankItem">
select rank.*, @rank := @rank + 1 as rank from (
select h.id, h.name, h.level, ifNULL(t.total, 0) as value from (
<choose>
<when test="areaId == null or areaId == 0">
@ -202,7 +211,7 @@
WHERE
organization_type = 3
<if test="level != null">
AND level = 3
AND level = #{level}
</if>
</when>
<otherwise>
@ -226,7 +235,7 @@
WHERE
ischild != 0
<if test="level != null">
AND level = 3
AND level = #{level}
</if>
AND organizationType = 3
</otherwise>
@ -261,8 +270,10 @@
where t1.rk IN (t2.cnt + 0.5, t2.cnt, t2.cnt + 1)
group by t1.hospital_id
) t on t.hospital_id = h.id
) rank, (SELECT @rank:= 0) b
order by value
order by t.total desc
</select>
<select id="getOrganizationByName" resultType="com.ccsens.carbasics.bean.po.Organization">
select * from t_organization where name = #{name} and rec_status = 0 order by updated_at desc limit 1
</select>
</mapper>

Loading…
Cancel
Save