Browse Source

疫苗接种记录数据权限

origin/epidemic_user
zhangyuan 4 years ago
parent
commit
a8db3a15ec
  1. 21
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dao/EpidemicUserInfoDao.java
  2. 50
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserDeptInfoDTO.java
  3. 1
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserInfoDTO.java
  4. 25
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/entity/VaccinationInfoEntity.java
  5. 91
      epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/service/impl/VaccinationInfoServiceImpl.java
  6. 42
      epdc-cloud-vim-yushan/src/main/resources/mapper/epidemic/EpidemicUserInfoDao.xml
  7. 6
      epdc-cloud-vim-yushan/src/main/resources/mapper/vim/VaccinationInfoDao.xml

21
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dao/EpidemicUserInfoDao.java

@ -4,6 +4,7 @@ package com.elink.esua.epdc.vaccine.epidemic.dao;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
import com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicRecordDetailDTO;
import com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicRecordListDTO;
import com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserDeptInfoDTO;
import com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserInfoDTO;
import com.elink.esua.epdc.vaccine.epidemic.dto.result.EpidemicPageResultDTO;
import com.elink.esua.epdc.vaccine.epidemic.dto.result.EpidemicPageResultV2DTO;
@ -90,6 +91,26 @@ public interface EpidemicUserInfoDao extends BaseDao<EpidemicUserInfoEntity> {
*/
List<EpidemicUserInfoDTO> selectByIdCards(@Param("idCards") List<String> idCards);
/**
* 根据身份证号查询基础信息表网格信息
*
* @param idCards
* @return java.util.List<com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserDeptInfoDTO>
* @author zhy
* @date 2021/9/13 15:32
*/
List<EpidemicUserDeptInfoDTO> selectDeptInfoByIdCards(@Param("idCards") List<String> idCards);
/**
* 根据身份证号查询基础信息表网格信息
*
* @param idCard
* @return java.util.List<com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserDeptInfoDTO>
* @author zhy
* @date 2021/9/13 15:32
*/
EpidemicUserDeptInfoDTO selectDeptInfoByIdCard(@Param("idCard") String idCard);
/**
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.commons.tools.page.PageData < com.elink.esua.epdc.vaccine.epidemic.dto.result.EpidemicPageResultDTO>>
* @describe: 接种信息列表

50
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserDeptInfoDTO.java

@ -0,0 +1,50 @@
package com.elink.esua.epdc.vaccine.epidemic.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 人员网格归属表
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0 2021-01-26
*/
@Data
public class EpidemicUserDeptInfoDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String userName;
private String idCard;
/**
* 所属网格ID
*/
private Long gridId;
/**
* 父所有部门
*/
private String parentDeptIds;
/**
* 父所有部门名称
*/
private String parentDeptNames;
/**
* 所有部门ID
*/
private String allDeptIds;
/**
* 所有部门名称
*/
private String allDeptNames;
}

1
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/dto/EpidemicUserInfoDTO.java

@ -79,4 +79,5 @@ public class EpidemicUserInfoDTO implements Serializable {
* 网格名称
*/
private String gridName;
}

25
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/entity/VaccinationInfoEntity.java

@ -91,4 +91,29 @@ public class VaccinationInfoEntity extends BasePingyinEntity {
* 疫苗生成批次批号
*/
private String batchNo;
/**
* 所属网格ID
*/
private Long gridId;
/**
* 父所有部门
*/
private String parentDeptIds;
/**
* 父所有部门名称
*/
private String parentDeptNames;
/**
* 所有部门ID
*/
private String allDeptIds;
/**
* 所有部门名称
*/
private String allDeptNames;
}

91
epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/vim/service/impl/VaccinationInfoServiceImpl.java

@ -18,6 +18,7 @@ import com.elink.esua.epdc.vaccine.common.base.BaseVimCurdServiceImpl;
import com.elink.esua.epdc.vaccine.epidemic.constant.StrConstant;
import com.elink.esua.epdc.vaccine.epidemic.dao.EpidemicUserInfoDao;
import com.elink.esua.epdc.vaccine.epidemic.dao.EpidemicUserInoutRecordDao;
import com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserDeptInfoDTO;
import com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserInfoDTO;
import com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserInfoDTOV2;
import com.elink.esua.epdc.vaccine.epidemic.entity.EpidemicUserInfoEntity;
@ -50,6 +51,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -110,6 +112,11 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
Map<String, Object> authParams = vaccinationUserRoleService.getVaccinationAuthParams(user.getId());
params.putAll(authParams);
// 街道和超管有权查看所有数据
if (NumConstant.ZERO == user.getSuperAdmin() && user.getDeptId() != 1258587398679126017L) {
params.put("deptIdList", user.getDeptIdList());
}
List<VaccinationInfoDTO> list = getVaccinationInfoList(params);
return new PageData<>(list, page.getTotal());
}
@ -157,6 +164,14 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
if (checkVaccination(dto).isEmpty()) {
dto.setId(null);
VaccinationInfoEntity entity = ConvertUtils.sourceToTarget(dto, VaccinationInfoEntity.class);
EpidemicUserDeptInfoDTO dept= epidemicUserInfoDao.selectDeptInfoByIdCard(dto.getIdentityNo());
if(dept!=null){
entity.setGridId(dept.getGridId());
entity.setParentDeptIds(dept.getParentDeptIds());
entity.setParentDeptNames(dept.getParentDeptNames());
entity.setAllDeptIds(dept.getAllDeptIds());
entity.setAllDeptNames(dept.getAllDeptNames());
}
baseDao.insert(entity);
epidemicUserInfoService.updateVaccinationInfo(dto, true);
} else {
@ -230,6 +245,59 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
return new Result();
}
/**
* 更新人员接种信息第一版
*
* @param addressList
* @param maxDoseMap
* @return boolean
* @author zhy
* @date 2021/9/13 15:17
*/
private boolean updateEpidemicUserInfoV1(List<EpidemicUserInoutRecordEntity> addressList, Map<String, EpidemicUserInfoDTO> maxDoseMap) {
List<String> idCards = new ArrayList<>(maxDoseMap.keySet());
List<EpidemicUserInfoDTO> updateList = new ArrayList<>();
EpidemicUserInfoDTO epidemicUserInfo;
String idCard;
if (!idCards.isEmpty()) {
List<EpidemicUserInfoDTO> existUserList = epidemicUserInfoDao.selectByIdCards(idCards);
addressList = epidemicUserInoutRecordDao.getAddressInfo(idCards);
EpidemicUserInfoDTO updateDto;
for (EpidemicUserInfoDTO item : existUserList) {
if (null == item) {
continue;
}
idCard = item.getIdCard();
epidemicUserInfo = maxDoseMap.get(idCard.toUpperCase());
if (null == epidemicUserInfo) {
log.error(idCard);
continue;
}
updateDto = new EpidemicUserInfoDTO();
epidemicUserInfo = maxDoseMap.get(idCard.toUpperCase());
// 已经接种完的不需要处理,excel的剂次数据小于数据库时不需要处理,已经接种完的不需要处理
if (item.getVaccinationState() != NumConstant.TWO && item.getVaccinationNum() <= epidemicUserInfo.getVaccinationNum()) {
updateDto.setIdCard(idCard);
updateDto.setVaccinationNum(epidemicUserInfo.getVaccinationNum());
if (epidemicUserInfo.getVaccinationNum().equals(epidemicUserInfo.getMaxDose())) {
// 如果最大剂次同于excel的剂次就是接种完成,否则是接种中
updateDto.setVaccinationState(2);
} else {
updateDto.setVaccinationState(1);
}
updateList.add(updateDto);
}
}
}
// 更新人员的接种信息
for (EpidemicUserInfoDTO dto : updateList) {
epidemicUserInfoDao.updateVaccinationInfo(dto);
}
log.info("待处理人员数量为:" + idCards.size() + "||可用地址数量为" + addressList.size() + "||实际需要更新的人员信息数量为:" + updateList.size());
return Boolean.TRUE;
}
/**
* @return boolean
@ -239,7 +307,7 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
* @params addressList
* @params maxDoseMap
*/
private boolean updateEpidemicUserInfo(List<EpidemicUserInoutRecordEntity> addressList, Map<String, EpidemicUserInfoDTO> maxDoseMap) {
private boolean updateEpidemicUserInfoV2(List<EpidemicUserInoutRecordEntity> addressList, Map<String, EpidemicUserInfoDTO> maxDoseMap) {
List<String> idCards = new ArrayList<>(maxDoseMap.keySet());
if (!idCards.isEmpty()) {
addressList = epidemicUserInoutRecordDao.getAddressInfo(idCards);
@ -309,12 +377,19 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
* @params addList
* addressList
*/
private boolean insertBatchVaccination(List<VaccinationInfoAllExcel> addList, List<EpidemicUserInoutRecordEntity> addressList, List<Long> deleteIdCardArr) {
private boolean insertBatchVaccination(List<VaccinationInfoAllExcel> addList, List<EpidemicUserInoutRecordEntity> addressList, List<Long> deleteIdCardArr,Map<String, EpidemicUserInfoDTO> maxDoseMap) {
// 对历史数据根据身份证号进行逻辑删除// 对历史数据根据身份证号进行逻辑删除
if (!deleteIdCardArr.isEmpty()) {
baseDao.deleteDistinctDose(deleteIdCardArr);
}
log.info("已删除用户数量:" + deleteIdCardArr.size());
// 网格信息
List<String> idCards = new ArrayList<>(maxDoseMap.keySet());
List<EpidemicUserDeptInfoDTO> userDeptInfoList = epidemicUserInfoDao.selectDeptInfoByIdCards(idCards);
Map<String, EpidemicUserDeptInfoDTO> deptMaps = userDeptInfoList.stream().collect(Collectors.toMap(EpidemicUserDeptInfoDTO::getIdCard, Function.identity()));
// 插入接种数据
if (!addList.isEmpty()) {
List<VaccinationInfoEntity> insertUserList = ConvertUtils.sourceToTarget(addList, VaccinationInfoEntity.class);
@ -329,6 +404,14 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
entity.setGrid(addressOptional.get().getGridName());
entity.setVillageName(addressOptional.get().getPlot());
}
EpidemicUserDeptInfoDTO dept = deptMaps.get(entity.getIdentityNo().toUpperCase());
if (dept != null) {
entity.setGridId(dept.getGridId());
entity.setParentDeptIds(dept.getParentDeptIds());
entity.setParentDeptNames(dept.getParentDeptNames());
entity.setAllDeptIds(dept.getAllDeptIds());
entity.setAllDeptNames(dept.getAllDeptNames());
}
});
boolean is = insertBatch(insertUserList);
log.info("已插入接种记录" + insertUserList.size());
@ -498,12 +581,12 @@ public class VaccinationInfoServiceImpl extends BaseVimCurdServiceImpl<Vaccinati
List<EpidemicUserInoutRecordEntity> addressList = Lists.newArrayList();
// 更新人员的接种信息
if (!updateEpidemicUserInfo(addressList, maxDoseMap)) {
if (!updateEpidemicUserInfoV1(addressList, maxDoseMap)) {
throw new RenException("更新人员的接种信息失败");
}
// 插入接种数据
if (!insertBatchVaccination(addList, addressList, deleteIdCardArr)) {
if (!insertBatchVaccination(addList, addressList, deleteIdCardArr,maxDoseMap)) {
throw new RenException("插入接种数据失败");
}

42
epdc-cloud-vim-yushan/src/main/resources/mapper/epidemic/EpidemicUserInfoDao.xml

@ -222,6 +222,48 @@
#{idCard}
</foreach>
</select>
<select id="selectDeptInfoByIdCards" resultType="com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserDeptInfoDTO">
SELECT
i.ID_CARD,
i.USER_NAME,
h.GRID_ID,
h.PARENT_DEPT_IDS,
h.PARENT_DEPT_NAMES,
h.ALL_DEPT_IDS,
h.ALL_DEPT_NAMES
FROM
epidemic_user_info i
LEFT JOIN epdc_house_resident r ON r.RESIDENT_ID = i.id
LEFT JOIN epdc_housing_information h ON r.HOUSE_ID = h.id
WHERE
h.DEL_FLAG = '0'
AND i.DEL_FLAG = '0'
AND r.DEL_FLAG = '0'
AND i.ID_CARD IN
<foreach collection="idCards" index="index" item="idCard" open="(" separator="," close=")">
#{idCard}
</foreach>
</select>
<select id="selectDeptInfoByIdCard" resultType="com.elink.esua.epdc.vaccine.epidemic.dto.EpidemicUserDeptInfoDTO">
SELECT
i.ID_CARD,
i.USER_NAME,
h.GRID_ID,
h.PARENT_DEPT_IDS,
h.PARENT_DEPT_NAMES,
h.ALL_DEPT_IDS,
h.ALL_DEPT_NAMES
FROM
epidemic_user_info i
LEFT JOIN epdc_house_resident r ON r.RESIDENT_ID = i.id
LEFT JOIN epdc_housing_information h ON r.HOUSE_ID = h.id
WHERE
h.DEL_FLAG = '0'
AND i.DEL_FLAG = '0'
AND r.DEL_FLAG = '0'
AND i.ID_CARD = #{idCard}
LIMIT 1
</select>
<select id="selectInfo" resultType="com.elink.esua.epdc.vaccine.epidemic.dto.result.VaccinationInfoResultDTO">
select i.id,i.id AS inoutId,
'平阴县' AS county,

6
epdc-cloud-vim-yushan/src/main/resources/mapper/vim/VaccinationInfoDao.xml

@ -86,6 +86,12 @@
#{grid}
</foreach>
</if>
<if test="deptIdList != null">
and v.grid_id in
<foreach item="id" collection="deptIdList" open="(" separator="," close=")">
#{id}
</foreach>
</if>
ORDER BY
v.CREATED_TIME DESC
</select>

Loading…
Cancel
Save