From 6c12ff9911fb98a0ff7a17769d43b667fdb68920 Mon Sep 17 00:00:00 2001 From: zhizhi wu <2377881365@qq.com> Date: Fri, 10 Sep 2021 16:37:43 +0800 Subject: [PATCH] bug --- .../carbasics/api/OrganizationController.java | 44 +++++++++ .../ccsens/carbasics/bean/dto/PatientDto.java | 4 +- .../carbasics/bean/dto/StatisticalDto.java | 2 +- .../carbasics/persist/dao/FirstAidDao.java | 7 +- .../persist/dao/OrganizationDao.java | 19 ++++ .../carbasics/service/FirstAidService.java | 14 +-- .../service/IOrganizationService.java | 10 +++ .../service/OrganizationService.java | 90 ++++++++++++++++++- .../carbasics/service/StatisticalService.java | 2 +- .../com/ccsens/carbasics/util/Constant.java | 10 +++ src/main/resources/mapper_dao/FirstAidDao.xml | 17 ++-- .../mapper_dao/FirstAidRecordDao.xml | 6 +- .../resources/mapper_dao/OrganizationDao.xml | 35 +++++--- 13 files changed, 225 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/ccsens/carbasics/api/OrganizationController.java b/src/main/java/com/ccsens/carbasics/api/OrganizationController.java index 65e1de6..73ab522 100644 --- a/src/main/java/com/ccsens/carbasics/api/OrganizationController.java +++ b/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 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 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; + } + } diff --git a/src/main/java/com/ccsens/carbasics/bean/dto/PatientDto.java b/src/main/java/com/ccsens/carbasics/bean/dto/PatientDto.java index 6a1e14b..33ebced 100644 --- a/src/main/java/com/ccsens/carbasics/bean/dto/PatientDto.java +++ b/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) diff --git a/src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java b/src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java index 102488c..742f5fd 100644 --- a/src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java +++ b/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 diff --git a/src/main/java/com/ccsens/carbasics/persist/dao/FirstAidDao.java b/src/main/java/com/ccsens/carbasics/persist/dao/FirstAidDao.java index fff7bbf..c7c4038 100644 --- a/src/main/java/com/ccsens/carbasics/persist/dao/FirstAidDao.java +++ b/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 queryPatientListByQuality(@Param("template")byte template,@Param("hospitalId")Long hospitalId, @Param("param")PatientDto.QueryListByQuality param); + List queryPatientListByQuality(@Param("templates") List templates, @Param("hospitalId")Long hospitalId, @Param("param")PatientDto.QueryListByQuality param); /** * 秘书查看急救列表 diff --git a/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java b/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java index 9e02323..283cb42 100644 --- a/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java +++ b/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 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 organizations); + + /** + * 批量添加机构上级 + * @param parents 机构上级 + */ + void batchInsertParent(@Param("parents") List parents); } diff --git a/src/main/java/com/ccsens/carbasics/service/FirstAidService.java b/src/main/java/com/ccsens/carbasics/service/FirstAidService.java index 870e291..71bb327 100644 --- a/src/main/java/com/ccsens/carbasics/service/FirstAidService.java +++ b/src/main/java/com/ccsens/carbasics/service/FirstAidService.java @@ -281,10 +281,10 @@ public class FirstAidService implements IFirstAidService{ @Override public PageInfo 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 templates = new ArrayList<>(); + templateList.forEach(template -> { + templates.add(template.getTemplate()); + }); //查找病例信息 PageHelper.startPage(param.getPageNum(),param.getPageSize()); - List patientList = firstAidDao.queryPatientListByQuality(templateList.get(0).getTemplate(),firstAid.getHospitalId(),param); + List patientList = firstAidDao.queryPatientListByQuality(templates,organization.getId(),param); return new PageInfo<>(patientList); } diff --git a/src/main/java/com/ccsens/carbasics/service/IOrganizationService.java b/src/main/java/com/ccsens/carbasics/service/IOrganizationService.java index 26505ab..f6b2f66 100644 --- a/src/main/java/com/ccsens/carbasics/service/IOrganizationService.java +++ b/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 fullPath, Long userId) throws Exception; } diff --git a/src/main/java/com/ccsens/carbasics/service/OrganizationService.java b/src/main/java/com/ccsens/carbasics/service/OrganizationService.java index 90cbdd3..d2155ab 100644 --- a/src/main/java/com/ccsens/carbasics/service/OrganizationService.java +++ b/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 rowList, Long userId) throws Exception { + if (CollectionUtil.isEmpty(rowList)) { + return null; + } + List organizations = new ArrayList<>(); + List parents = new ArrayList<>(); + Map 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(); + } } diff --git a/src/main/java/com/ccsens/carbasics/service/StatisticalService.java b/src/main/java/com/ccsens/carbasics/service/StatisticalService.java index abccf14..e9a16d5 100644 --- a/src/main/java/com/ccsens/carbasics/service/StatisticalService.java +++ b/src/main/java/com/ccsens/carbasics/service/StatisticalService.java @@ -218,7 +218,7 @@ public class StatisticalService implements IStatisticalService { List hospitalIds = getHospitalIds(param.getProjectId()); List 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 newItems = fillItems(items, param.getStartTime(), param.getEndTime(), param.getCountType()); common.setList(newItems); diff --git a/src/main/java/com/ccsens/carbasics/util/Constant.java b/src/main/java/com/ccsens/carbasics/util/Constant.java index 94e515e..e55dfaa 100644 --- a/src/main/java/com/ccsens/carbasics/util/Constant.java +++ b/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 typeMap = new HashMap<>(); + + static { + typeMap.put("省卫健委", (byte)0); + typeMap.put("省质控", (byte)1); + typeMap.put("市质控", (byte)2); + typeMap.put("医院", (byte)3); + } + + } /**科室相关*/ diff --git a/src/main/resources/mapper_dao/FirstAidDao.xml b/src/main/resources/mapper_dao/FirstAidDao.xml index e88d8ef..638ff11 100644 --- a/src/main/resources/mapper_dao/FirstAidDao.xml +++ b/src/main/resources/mapper_dao/FirstAidDao.xml @@ -88,7 +88,9 @@ AND rec_status = 0 AND hospital_id = #{hospitalId} - AND type = #{template} + + #{id} + ) 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 + + t4.id IS NULL + t4.id IS NOT NULL + AND t1.answer LIKE concat('%',#{param.hospitalNumber},'%') @@ -113,8 +118,8 @@ AND t2.answer + 0 < #{param.endTime} - GROUP BY - t.updated_at DESC + GROUP BY t.firstAidId + ORDER BY t.updated_at DESC diff --git a/src/main/resources/mapper_dao/FirstAidRecordDao.xml b/src/main/resources/mapper_dao/FirstAidRecordDao.xml index fbf0f35..f2a4d3c 100644 --- a/src/main/resources/mapper_dao/FirstAidRecordDao.xml +++ b/src/main/resources/mapper_dao/FirstAidRecordDao.xml @@ -235,7 +235,7 @@ FROM_UNIXTIME(r1.answer/1000,'%Y-%m') as date, FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d') as date, - 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 @@ -88,7 +100,6 @@ LIMIT 1 +