参与者重写 - 部分

This commit is contained in:
Wang.Huan
2025-03-26 13:43:17 +08:00
parent 1020fdb2c8
commit 98039f1cc4
8 changed files with 314 additions and 27 deletions

View File

@@ -1,5 +1,6 @@
package com.openhis.web.basedatamanage.appservice;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.core.common.core.domain.R;
import com.openhis.web.doctorstation.dto.UserAndPractitionerDto;
@@ -10,9 +11,22 @@ public interface IPractitionerAppService {
/**
* 新增用户及参与者
*
* @param userAndPractitionerDto 用户及参与者dto
* @return 结果
*/
R<?> saveUserPractitioner(UserAndPractitionerDto userAndPractitionerDto);
/**
* 查询用户及参与者
*
* @param userAndPractitionerDto 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页
* @param pageSize 每页多少条
* @return 用户及参与者
*/
IPage<UserAndPractitionerDto> getUserPractitionerPage(UserAndPractitionerDto userAndPractitionerDto,
String searchKey, Integer pageNo, Integer pageSize);
}

View File

@@ -1,18 +1,36 @@
package com.openhis.web.basedatamanage.appservice.impl;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.ChineseConvertUtils;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.SecurityUtils;
import com.openhis.administration.domain.BizUser;
import com.openhis.administration.domain.BizUserRole;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.domain.PractitionerRole;
import com.openhis.administration.service.IBizUserRoleService;
import com.openhis.administration.service.IBizUserService;
import com.openhis.administration.service.IPractitionerRoleService;
import com.openhis.administration.service.IPractitionerService;
import org.springframework.stereotype.Service;
import com.core.common.core.domain.R;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.AccountStatus;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.basedatamanage.appservice.IPractitionerAppService;
import com.openhis.web.basedatamanage.mapper.PractitionerAppAppMapper;
import com.openhis.web.doctorstation.dto.UserAndPractitionerChildDto;
import com.openhis.web.doctorstation.dto.UserAndPractitionerDto;
@Service
@@ -33,26 +51,105 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService {
@Resource
IPractitionerRoleService iPractitionerRoleService;
/**
* 新增用户及参与者
*
*
* @param userAndPractitionerDto 用户及参与者dto
* @return 结果
*/
@Override
public R<?> saveUserPractitioner(UserAndPractitionerDto userAndPractitionerDto) {
// 数据有效性校验 : 账号唯一性
String userName = userAndPractitionerDto.getUserName();
String nickName = userAndPractitionerDto.getNickName();
String phonenumber = userAndPractitionerDto.getPhonenumber();
String sex = userAndPractitionerDto.getSex();
// 账号唯一性
long count = iBizUserService.count(new LambdaQueryWrapper<BizUser>().eq(BizUser::getUserName, userName));
if (count > 0L) {
return R.fail(null, "账号已存在");
}
// 新增 sys_user
BizUser bizUser = new BizUser();
bizUser.setUserName(userName); // 账号
bizUser.setNickName(nickName); // 昵称
bizUser.setEmail(userAndPractitionerDto.getEmail());// 邮箱
bizUser.setPhonenumber(phonenumber); // 电话
bizUser.setSex(sex); // 性别
bizUser.setPassword(SecurityUtils.encryptPassword(userAndPractitionerDto.getPassword())); // 密码
bizUser.setStatus(userAndPractitionerDto.getStatus()); // 状态
bizUser.setRemark(userAndPractitionerDto.getRemark()); // 备注
iBizUserService.save(bizUser);
Long userId = bizUser.getUserId(); // 用户id
// 新增 sys_user_role
List<Long> roleIds = userAndPractitionerDto.getRoleIds();
BizUserRole bizUserRole;
for (Long roleId : roleIds) {
bizUserRole = new BizUserRole();
bizUserRole.setUserId(userId);
bizUserRole.setRoleId(roleId);
iBizUserRoleService.save(bizUserRole);
}
// 新增 adm_practitioner
Practitioner practitioner = new Practitioner();
practitioner.setActiveFlag(AccountStatus.ACTIVE.getValue()); // 活动标记
practitioner.setName(nickName); // 姓名
practitioner.setGenderEnum(Integer.parseInt(sex)); // 性别
practitioner.setBirthDate(userAndPractitionerDto.getBirthDate()); // 出生日期
practitioner.setPhone(phonenumber); // 电话
practitioner.setAddress(userAndPractitionerDto.getAddress()); // 地址
practitioner.setYbNo(userAndPractitionerDto.getYbNo()); // 医保码
practitioner.setUserId(userId); // 系统用户id
practitioner.setOrgId(userAndPractitionerDto.getOrgId()); // 机构id
practitioner.setPyStr(ChineseConvertUtils.toPinyinFirstLetter(nickName)); // 拼音码
practitioner.setWbStr(ChineseConvertUtils.toWBFirstLetter(nickName)); // 五笔码
iPractitionerService.save(practitioner);
Long practitionerId = practitioner.getId();// 参与者id
// 新增 adm_practitioner_role
List<UserAndPractitionerChildDto> childList = userAndPractitionerDto.getChildList();
PractitionerRole practitionerRole;
for (UserAndPractitionerChildDto userAndPractitionerChildDto : childList) {
practitionerRole = new PractitionerRole();
practitionerRole.setName(nickName); // 姓名
practitionerRole.setPractitionerId(practitionerId); // 参与者id
practitionerRole.setRoleCode(userAndPractitionerChildDto.getRoleCode()); // 角色code
practitionerRole.setOrgId(userAndPractitionerChildDto.getOrgId()); // 机构id
practitionerRole.setLocationId(userAndPractitionerChildDto.getLocationId()); // 位置id
iPractitionerRoleService.save(practitionerRole);
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"人员信息"}));
}
/**
* 查询用户及参与者
*
* @param userAndPractitionerDto 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页
* @param pageSize 每页多少条
* @return 用户及参与者
*/
@Override
public IPage<UserAndPractitionerDto> getUserPractitionerPage(UserAndPractitionerDto userAndPractitionerDto,
String searchKey, Integer pageNo, Integer pageSize) {
// 构建查询条件
QueryWrapper<UserAndPractitionerDto> queryWrapper = HisQueryUtils.buildQueryWrapper(userAndPractitionerDto,
searchKey, new HashSet<>(Arrays.asList("user_name", "nick_name", "py_str", "wb_str")), null);
IPage<UserAndPractitionerDto> userPractitionerPage =
practitionerAppAppMapper.getUserPractitionerPage(new Page<>(pageNo, pageSize), queryWrapper);
List<UserAndPractitionerDto> records = userPractitionerPage.getRecords();
// 参与者id集合
List<Long> practitionerIdList =
records.stream().map(UserAndPractitionerDto::getPractitionerId).collect(Collectors.toList());
// 子集合
List<UserAndPractitionerChildDto> childList = practitionerAppAppMapper.getChildList(practitionerIdList);
for (UserAndPractitionerDto record : records) {
// 匹配子集合
List<UserAndPractitionerChildDto> childDtoList =
childList.stream().filter(e -> e.getPractitionerId().equals(record.getPractitionerId())).collect(Collectors.toList());
record.setChildList(childDtoList);
}
return userPractitionerPage;
}
}

View File

@@ -3,10 +3,7 @@
*/
package com.openhis.web.basedatamanage.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.web.basedatamanage.appservice.IPractitionerAppService;
@@ -32,9 +29,27 @@ public class PractitionerController {
* @param userAndPractitionerDto 用户及参与者dto
* @return 结果
*/
@PostMapping(value = "/save-user-practitioner")
@PostMapping(value = "/user-practitioner")
public R<?> saveUserPractitioner(@RequestBody UserAndPractitionerDto userAndPractitionerDto) {
return practitionerAppService.saveUserPractitioner(userAndPractitionerDto);
}
/**
* 查询用户及参与者
*
* @param userAndPractitionerDto 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页
* @param pageSize 每页多少条
* @return 用户及参与者
*/
@GetMapping(value = "/user-practitioner-page")
public R<?> getUserPractitionerPage(UserAndPractitionerDto userAndPractitionerDto,
@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return R
.ok(practitionerAppService.getUserPractitionerPage(userAndPractitionerDto, searchKey, pageNo, pageSize));
}
}

View File

@@ -1,11 +1,39 @@
package com.openhis.web.basedatamanage.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.web.doctorstation.dto.UserAndPractitionerChildDto;
import com.openhis.web.doctorstation.dto.UserAndPractitionerDto;
/**
* 参与者 应用Mapper
*/
@Repository
public interface PractitionerAppAppMapper {
/**
* 查询用户及参与者
*
* @param page 分页参数
* @param queryWrapper 查询条件
* @return 用户及参与者
*/
IPage<UserAndPractitionerDto> getUserPractitionerPage(@Param("page") Page<UserAndPractitionerDto> page,
@Param(Constants.WRAPPER) QueryWrapper<UserAndPractitionerDto> queryWrapper);
/**
* 查询子集合
*
* @param practitionerIdList 参与者id集合
* @return 子集合
*/
List<UserAndPractitionerChildDto> getChildList(@Param("practitionerIdList") List<Long> practitionerIdList);
}

View File

@@ -0,0 +1,54 @@
package com.openhis.web.doctorstation.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 用户 及 参与者 子dto
*/
@Data
@Accessors(chain = true)
public class UserAndPractitionerChildDto {
/**
* 机构id
*/
@Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;
private String orgId_dictText;
/**
* 位置id
*/
@Dict(dictTable = "adm_location", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
private String locationId_dictText;
/**
* 角色code
*/
private String roleCode;
/**
* 角色id
*/
private Long roleId;
/**
* 角色name
*/
private String roleName;
/**
* 参与者id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long practitionerId;
}

View File

@@ -5,6 +5,7 @@ import java.util.List;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -16,6 +17,18 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class UserAndPractitionerDto {
/**
* 用户id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long userId;
/**
* 参与者id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long practitionerId;
/**
* 账号
*/
@@ -26,6 +39,12 @@ public class UserAndPractitionerDto {
*/
private String nickName;
/** 拼音码 */
private String pyStr;
/** 五笔码 */
private String wbStr;
/**
* 邮箱
*/
@@ -39,7 +58,9 @@ public class UserAndPractitionerDto {
/**
* 性别
*/
@Dict(dictCode = "sys_user_sex")
private String sex;
private String sex_dictText;
/**
* 密码
@@ -49,7 +70,9 @@ public class UserAndPractitionerDto {
/**
* 状态0正常 1停用
*/
@Dict(dictCode = "sys_normal_disable")
private String status;
private String status_dictText;
/**
* 备注
@@ -74,14 +97,10 @@ public class UserAndPractitionerDto {
/**
* 机构id
*/
@Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;
/**
* 位置id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
private String orgId_dictText;
/**
* 角色id集合
@@ -89,8 +108,8 @@ public class UserAndPractitionerDto {
private List<Long> roleIds;
/**
* 角色code集合
* 集合
*/
private List<String> roleCodes;
private List<UserAndPractitionerChildDto> childList;
}

View File

@@ -4,5 +4,67 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openhis.web.basedatamanage.mapper.PractitionerAppAppMapper">
<select id="getUserPractitionerPage" resultType="com.openhis.web.doctorstation.dto.UserAndPractitionerDto">
SELECT T3.tenant_id,
T3.user_id,
T3.practitioner_id,
T3.py_str,
T3.wb_str,
T3.user_name,
T3.nick_name,
T3.email,
T3.phonenumber,
T3.sex,
T3.status,
T3.remark,
T3.birth_date,
T3.address,
T3.yb_no,
T3.org_id
from (
SELECT T1.tenant_id,
T1.id AS practitioner_id,
T1.user_id,
T1.py_str,
T1.wb_str,
T2.user_name,
T2.nick_name,
T2.email,
T2.phonenumber,
T2.sex,
T2.status,
T2.remark,
T1.birth_date,
T1.address,
T1.yb_no,
T1.org_id
FROM adm_practitioner AS T1
LEFT JOIN sys_user AS T2 ON T2.user_id = T1.user_id
AND T2.delete_flag = '0'
WHERE T1.delete_flag = '0') AS T3
${ew.customSqlSegment}
</select>
<select id="getChildList" resultType="com.openhis.web.doctorstation.dto.UserAndPractitionerChildDto">
SELECT
t1.practitioner_id,
t1.org_id,
t1.location_id,
t1.role_code,
t2.role_id,
t2.role_name
FROM
adm_practitioner_role AS T1
LEFT JOIN sys_role AS T2 ON t2.role_key = t1.role_code
AND t2.del_flag = '0'
WHERE
t1.delete_flag = '0'
<if test="practitionerIdList != null and !practitionerIdList.isEmpty()">
AND t1.practitioner_id IN
<foreach collection="practitionerIdList" item="itemId" open="(" separator="," close=")">
#{itemId}
</foreach>
</if>
</select>
</mapper>

View File

@@ -2,8 +2,6 @@ package com.openhis.administration.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
@@ -24,7 +22,7 @@ import lombok.experimental.Accessors;
public class BizUser extends HisBaseEntity {
/** 用户ID */
@TableId(type = IdType.ASSIGN_ID)
// @TableId(type = IdType.ASSIGN_ID)
private Long userId;
/** 部门ID */