diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/system/SysUserController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/system/SysUserController.java index 3df129ea..d251be94 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/system/SysUserController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/system/SysUserController.java @@ -165,7 +165,6 @@ public class SysUserController extends BaseController @PutMapping public AjaxResult edit(@Validated @RequestBody SysUser user) { -// changeDataSource(user.getTenantId()); userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); deptService.checkDeptDataScope(user.getDeptId()); @@ -186,20 +185,6 @@ public class SysUserController extends BaseController return toAjax(userService.updateUser(user)); } - private void changeDataSource(Long tenantId) { - DmsTenant dmsTenant = dmsTenantMapper.selectByPrimaryKey(tenantId); - if (dmsTenant != null) { - UmsDataSource umsDataSource = umsDataSourceMapper.selectByPrimaryKey(dmsTenant.getDataSourceId()); - if (umsDataSource != null) { - try { - DynamicDataSourceContextHolder.setDataSourceType(umsDataSource.getDataSourceKey()); - }finally { - DynamicDataSourceContextHolder.clearDataSourceType(); - } - } - } - } - /** * 删除用户 */ diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDataSourceController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDataSourceController.java index dfb0c11a..49e15fa1 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDataSourceController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDataSourceController.java @@ -1,7 +1,9 @@ package com.acupuncture.web.controller.web; +import com.acupuncture.common.annotation.DataSource; import com.acupuncture.common.core.domain.BaseDto; import com.acupuncture.common.core.domain.JsonResponse; +import com.acupuncture.common.enums.DataSourceType; import com.acupuncture.common.utils.SecurityUtils; import com.acupuncture.system.domain.dto.AdminDataSourceDto; import com.acupuncture.system.domain.vo.AdminDataSourceVo; @@ -34,6 +36,7 @@ public class AdminDataSourceController { @ApiOperation("添加数据源") @PostMapping("/add") + @DataSource(DataSourceType.MASTER) public JsonResponse insert(@RequestBody @Validated AdminDataSourceDto.AddDto dto) { if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) { return JsonResponse.ok().fail("无权限"); @@ -43,6 +46,7 @@ public class AdminDataSourceController { @ApiOperation("修改数据源") @PostMapping("/upd") + @DataSource(DataSourceType.MASTER) public JsonResponse update(@RequestBody @Validated AdminDataSourceDto.UpdDto dto) { if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) { return JsonResponse.ok().fail("无权限"); @@ -52,6 +56,7 @@ public class AdminDataSourceController { @ApiOperation("删除数据源") @PostMapping("/del") + @DataSource(DataSourceType.MASTER) public JsonResponse delete(@RequestBody @Validated AdminDataSourceDto.DeleteDto dto) { if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) { return JsonResponse.ok().fail("无权限"); @@ -61,6 +66,7 @@ public class AdminDataSourceController { @ApiOperation("查询数据源") @PostMapping("/list") + @DataSource(DataSourceType.MASTER) public JsonResponse> query(@RequestBody @Validated BaseDto dto) { return JsonResponse.ok(new PageInfo<>(adminDataSourceService.query(dto.getParam()))); } diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDmsUserController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDmsUserController.java index 48ac8c36..90340568 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDmsUserController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminDmsUserController.java @@ -2,10 +2,15 @@ package com.acupuncture.web.controller.web; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import com.acupuncture.common.annotation.DataSource; +import com.acupuncture.common.annotation.Log; import com.acupuncture.common.core.domain.BaseDto; import com.acupuncture.common.core.domain.JsonResponse; import com.acupuncture.common.core.domain.entity.SysUser; +import com.acupuncture.common.enums.BusinessType; +import com.acupuncture.common.enums.DataSourceType; import com.acupuncture.common.utils.SecurityUtils; import com.acupuncture.common.utils.StringUtils; import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; @@ -30,11 +35,9 @@ import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -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 javax.annotation.Resource; import java.util.List; @@ -68,6 +71,7 @@ public class AdminDmsUserController { @ApiOperation("添加租户用户") @PostMapping("/add") + @DataSource(DataSourceType.MASTER) public JsonResponse insert(@RequestBody @Validated AdminTenantUserDto.AddDto dto) { //判定租户及数据源是否存在 DmsTenant dmsTenant = dmsTenantMapper.selectByPrimaryKey(dto.getTenantId()); @@ -85,11 +89,12 @@ public class AdminDmsUserController { } else if (StringUtils.isNotEmpty(dto.getPhonenumber()) && !dmsLoginService.checkPhoneUnique(dto)) { return JsonResponse.ok().fail("新增用户'" + dto.getUserName() + "'失败,手机号码已存在"); } + dto.setId(IdUtil.getSnowflakeNextId()); dto.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); adminTenantUserService.insert(dto); //切换至从库 - changeDataSource(umsDataSource.getDataSourceKey()); + DynamicDataSourceContextHolder.setDataSourceType(umsDataSource.getDataSourceKey()); //新增从库数据 SysUser user = BeanUtil.copyProperties(dto, SysUser.class); @@ -100,6 +105,7 @@ public class AdminDmsUserController { } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) { return JsonResponse.ok().fail("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在"); } + user.setUserId(dto.getId()); user.setTenantId(dto.getTenantId()); user.setCreateBy(SecurityUtils.getUsername()); user.setPhonenumber(dto.getContactPhone()); @@ -107,49 +113,46 @@ public class AdminDmsUserController { int insert = userService.insertUser(user); //销毁切换数据源 - removeDataSource(); + DynamicDataSourceContextHolder.clearDataSourceType(); return JsonResponse.ok(insert); } @ApiOperation("修改租户用户") @PostMapping("/upd") + @DataSource(DataSourceType.MASTER) public JsonResponse update(@RequestBody @Validated AdminTenantUserDto.UpdDto dto) { - updSysUser(dto); - return JsonResponse.ok(adminTenantUserService.update(dto)); - } - - private void updSysUser(AdminTenantUserDto.UpdDto dto) { - //查询租户数据源,删除分库数据 - DmsUserExample dmsUserExample = new DmsUserExample(); - dmsUserExample.createCriteria().andDelFlagEqualTo((byte) 0).andIdEqualTo(dto.getId()); - List dmsUsers = dmsUserMapper.selectByExample(dmsUserExample); - if (CollectionUtil.isNotEmpty(dmsUsers)) { - DmsUser dmsUser = dmsUsers.get(0); - AdminTenantsDto.Query query = new AdminTenantsDto.Query(); - query.setId(dmsUser.getTenantId()); - List tenantList = adminTenantsService.query(query); - if (CollectionUtil.isNotEmpty(tenantList)) { - for (AdminTenantsVo.Result result : tenantList) { - //切换数据源 删除分库数据 - changeDataSource(result.getDataSourceKey()); - //修改分库用户 - SysUser sysUser = BeanUtil.copyProperties(dto, SysUser.class); - sysUser.setPhonenumber(dto.getContactPhone()); - userService.updateUser(sysUser); - } - } + //判定租户及数据源是否存在 + DmsTenant dmsTenant = dmsTenantMapper.selectByPrimaryKey(dto.getTenantId()); + if (dmsTenant == null) { + return JsonResponse.ok().fail("租户不存在"); } + UmsDataSource umsDataSource = umsDataSourceMapper.selectByPrimaryKey(dmsTenant.getDataSourceId()); + if (umsDataSource == null || StrUtil.isEmpty(umsDataSource.getDataSourceKey())) { + return JsonResponse.ok().fail("数据源不存在"); + } + + //修改主库租户用户 + int rows = adminTenantUserService.update(dto); + + //切换至从库 + DynamicDataSourceContextHolder.setDataSourceType(umsDataSource.getDataSourceKey()); + + //修改从库用户信息 + SysUser sysUser = BeanUtil.copyProperties(dto, SysUser.class); + sysUser.setPhonenumber(dto.getContactPhone()); + userService.updateUser(sysUser); + + //销毁切换数据源 + DynamicDataSourceContextHolder.clearDataSourceType(); + + return JsonResponse.ok(rows); } @ApiOperation("删除租户用户") @PostMapping("/del") + @DataSource(DataSourceType.MASTER) public JsonResponse delete(@RequestBody @Validated AdminTenantUserDto.DeleteDto dto) { - delSysUser(dto); - return JsonResponse.ok(adminTenantUserService.delete(dto)); - } - - private void delSysUser(AdminTenantUserDto.DeleteDto dto) { //查询租户数据源,删除分库数据 DmsUserExample dmsUserExample = new DmsUserExample(); dmsUserExample.createCriteria().andDelFlagEqualTo((byte) 0).andIdIn(dto.getIdList()); @@ -162,17 +165,21 @@ public class AdminDmsUserController { if (CollectionUtil.isNotEmpty(tenantList)) { for (AdminTenantsVo.Result result : tenantList) { //切换数据源 删除分库数据 - changeDataSource(result.getDataSourceKey()); + DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey()); //删除分库用户 userService.deleteUserByUsername(dmsUser.getUserName()); + //销毁切换数据源 + DynamicDataSourceContextHolder.clearDataSourceType(); } } } } + return JsonResponse.ok(adminTenantUserService.delete(dto)); } @ApiOperation("查询租户用户") @PostMapping("/list") + @DataSource(DataSourceType.MASTER) public JsonResponse> query(@RequestBody @Validated BaseDto dto) { if (dto.getPageNum() > 0) { PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); @@ -180,11 +187,15 @@ public class AdminDmsUserController { return JsonResponse.ok(new PageInfo<>(adminTenantUserService.query(dto.getParam()))); } - private static void changeDataSource(String key) { - DynamicDataSourceContextHolder.setDataSourceType(key); - } - private static void removeDataSource() { - DynamicDataSourceContextHolder.clearDataSourceType(); + /** + * 重置密码 + */ + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PostMapping("/resetPwd") + @DataSource(DataSourceType.MASTER) + public JsonResponse resetPwd(@RequestBody @Validated AdminTenantUserDto.ResetPwd dto) { + //只修改主库密码,修改从库密码没有任何意义。 + return JsonResponse.ok(adminTenantUserService.resetPwd(dto)); } } diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminPmsTreatmentController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminPmsTreatmentController.java index 790e4d1d..cb215b8b 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminPmsTreatmentController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminPmsTreatmentController.java @@ -67,27 +67,13 @@ public class AdminPmsTreatmentController { treatmentService.adminExportTreatment(response, dto); } - @ApiOperation("修改诊疗档案") - @PostMapping("/upd") - public JsonResponse updateTreatment(@RequestBody @Validated PmsTreatmentDto.TreatmentUpdateDTO dto) { - DmsTenant dmsTenant = dmsTenantMapper.selectByPrimaryKey(dto.getTenantId()); - if (dmsTenant != null) { - UmsDataSource umsDataSource = umsDataSourceMapper.selectByPrimaryKey(dmsTenant.getDataSourceId()); - if (umsDataSource != null) { - changeDataSource(umsDataSource.getDataSourceKey()); - } - } - treatmentService.updateTreatment(dto); - return JsonResponse.ok(); - } - - private static void changeDataSource(String dataSourceKey) { - try { - DynamicDataSourceContextHolder.setDataSourceType(dataSourceKey); - }finally { - DynamicDataSourceContextHolder.clearDataSourceType(); - } - } +// @ApiOperation("修改诊疗档案") +// @PostMapping("/upd") +// public JsonResponse updateTreatment(@RequestBody @Validated PmsTreatmentDto.TreatmentUpdateDTO dto) { +// treatmentService.updateTreatment(dto); +// return JsonResponse.ok(); +// } +// // @ApiOperation("导出诊疗档案评估报告") // @PostMapping("/exportTreatmentPg") diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminTenantsController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminTenantsController.java index eafde8f2..c0173800 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminTenantsController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/AdminTenantsController.java @@ -1,7 +1,9 @@ package com.acupuncture.web.controller.web; +import com.acupuncture.common.annotation.DataSource; import com.acupuncture.common.core.domain.BaseDto; import com.acupuncture.common.core.domain.JsonResponse; +import com.acupuncture.common.enums.DataSourceType; import com.acupuncture.common.utils.SecurityUtils; import com.acupuncture.system.domain.dto.AdminTenantsDto; import com.acupuncture.system.domain.vo.AdminTenantsVo; @@ -37,6 +39,7 @@ public class AdminTenantsController { @ApiOperation("添加租户") @PostMapping("/add") + @DataSource(DataSourceType.MASTER) public JsonResponse insert(@RequestBody @Validated AdminTenantsDto.AddDto dto) { if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) { return JsonResponse.ok().fail("无权限"); @@ -46,6 +49,7 @@ public class AdminTenantsController { @ApiOperation("修改租户") @PostMapping("/upd") + @DataSource(DataSourceType.MASTER) public JsonResponse update(@RequestBody @Validated AdminTenantsDto.UpdDto dto) { if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) { return JsonResponse.ok().fail("无权限"); @@ -55,6 +59,7 @@ public class AdminTenantsController { @ApiOperation("删除租户") @PostMapping("/del") + @DataSource(DataSourceType.MASTER) public JsonResponse delete(@RequestBody @Validated AdminTenantsDto.DeleteDto dto) { if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) { return JsonResponse.ok().fail("无权限"); @@ -64,6 +69,7 @@ public class AdminTenantsController { @ApiOperation("查询租户") @PostMapping("/list") + @DataSource(DataSourceType.MASTER) public JsonResponse> query(@RequestBody @Validated BaseDto dto) { if (dto.getPageNum() > 0) { PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/DmsLoginController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/DmsLoginController.java index 91360ec3..7eadfd7e 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/DmsLoginController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/DmsLoginController.java @@ -1,28 +1,40 @@ package com.acupuncture.web.controller.web; +import com.acupuncture.common.annotation.DataSource; import com.acupuncture.common.annotation.Log; import com.acupuncture.common.constant.Constants; import com.acupuncture.common.core.domain.AjaxResult; +import com.acupuncture.common.core.domain.BaseDto; import com.acupuncture.common.core.domain.JsonResponse; import com.acupuncture.common.core.domain.entity.SysUser; import com.acupuncture.common.core.domain.model.LoginBody; import com.acupuncture.common.core.domain.model.LoginUser; import com.acupuncture.common.enums.BusinessType; +import com.acupuncture.common.enums.DataSourceType; import com.acupuncture.common.utils.SecurityUtils; import com.acupuncture.framework.web.service.SysPermissionService; import com.acupuncture.framework.web.service.TokenService; import com.acupuncture.framework.web.service.WebDmsLoginService; +import com.acupuncture.system.domain.dto.FmsFollowupDto; import com.acupuncture.system.domain.po.DmsTenant; import com.acupuncture.system.domain.vo.DmsLoginUserVo; +import com.acupuncture.system.domain.vo.FmsFollowupVo; import com.acupuncture.system.service.DmsLoginService; +import com.acupuncture.system.service.FmsFollowupQueueService; +import com.acupuncture.system.service.FmsFollowupService; import com.acupuncture.system.service.ISysUserService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.Map; import java.util.Set; /** @@ -45,6 +57,8 @@ public class DmsLoginController { private DmsLoginService dmsLoginService; @Resource private ISysUserService sysUserService; + @Resource + private FmsFollowupQueueService fmsFollowupQueueService; /** * 登录方法 @@ -53,6 +67,7 @@ public class DmsLoginController { * @return 结果 */ @PostMapping("/login") + @DataSource(DataSourceType.MASTER) public AjaxResult login(@RequestBody LoginBody loginBody) { AjaxResult ajax = AjaxResult.success(); // 生成令牌 @@ -63,33 +78,81 @@ public class DmsLoginController { } /** - * 获取用户信息 - * + * 重置密码 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping("/updatePwd") + @DataSource(DataSourceType.MASTER) + public AjaxResult updatePwd(@RequestBody Map params) + { + String oldPassword = params.get("oldPassword"); + String newPassword = params.get("newPassword"); + LoginUser loginUser = SecurityUtils.getLoginUser(); + Long userId = loginUser.getUserId(); + String userName = loginUser.getUsername(); + String password = loginUser.getPassword(); + if (!SecurityUtils.matchesPassword(oldPassword, password)) + { + return AjaxResult.error("修改密码失败,旧密码错误"); + } + if (SecurityUtils.matchesPassword(newPassword, password)) + { + return AjaxResult.error("新密码不能与旧密码相同"); + } + newPassword = SecurityUtils.encryptPassword(newPassword); + if (dmsLoginService.resetPwd(userId, userName, newPassword) > 0) + { + // 更新缓存用户密码 + loginUser.getUser().setPassword(newPassword); + tokenService.setLoginUser(loginUser); + return AjaxResult.success("操作成功"); + } + return AjaxResult.error("修改密码异常,请联系管理员"); + } + + @ApiOperation("查询公共队列") + @PostMapping("/commonQueue") + @DataSource(DataSourceType.MASTER) + public JsonResponse> queryCommonQueue(@RequestBody @Validated BaseDto dto) { + if (dto.getPageNum() > 0) { + PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); + } + return JsonResponse.ok(new PageInfo<>(fmsFollowupQueueService.queryCommonQueue(dto.getParam().getName()))); + } + + /** + * 获取用户信息,暂时先从主库获取 * @return 用户信息 */ - @GetMapping("getInfo") + @ApiOperation("用户信息") + @GetMapping("/getInfo") + @DataSource(DataSourceType.MASTER) public AjaxResult getInfo() { LoginUser loginUser = SecurityUtils.getLoginUser(); //获取用户从库信息 - SysUser user = sysUserService.selectUserByTenantId(loginUser.getTenantId(), loginUser.getUsername()); + DmsLoginUserVo.DmsUserVo tenantUser = dmsLoginService.selectTenantUserById(loginUser.getUserId()); + SysUser user = new SysUser(); + user.setUserId(tenantUser.getId()); + user.setUserName(tenantUser.getUserName()); + user.setNickName(tenantUser.getNickName()); + user.setTenantId(tenantUser.getTenantId()); + user.setTenantName(tenantUser.getTenantName()); + user.setTenantPhone(tenantUser.getTenantPhone()); + user.setSlaverAdmin(tenantUser.getSlaverAdmin()); //刷新token tokenService.refreshToken(loginUser); AjaxResult ajax = AjaxResult.success(); ajax.put("user", user); - ajax.put("tenantId", loginUser.getTenantId()); - ajax.put("scoreId", loginUser.getScoreId()); return ajax; } - @PutMapping("/resetPwd") - public JsonResponse resetPwd(@RequestBody DmsLoginUserVo.DmsUserVo user) { -// webDmsLoginService.checkUserAllowed(user); -// webDmsLoginService.checkUserDataScope(user.getUserId()); - user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); - return JsonResponse.ok(dmsLoginService.resetPwd(user)); - } - + /** + * 筛查接口,此接口已添加白名单,所以不需要@annomous + * @param dto + * @return + */ @PostMapping("/queryTenantById") + @DataSource(DataSourceType.MASTER) public JsonResponse queryTenantById(@RequestBody DmsLoginUserVo.Query dto){ return JsonResponse.ok(dmsLoginService.queryById(dto.getId())); } diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/ExternalController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/ExternalController.java index 57e0476e..404f10fa 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/ExternalController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/ExternalController.java @@ -80,21 +80,13 @@ public class ExternalController { throw new BaseException("查询不到社区"); } //切换数据源查询 - changeDataSource(dataSourceList.get(0).getDataSourceKey()); + DynamicDataSourceContextHolder.setDataSourceType(dataSourceList.get(0).getDataSourceKey()); }catch (Exception e) { throw new BaseException("UUID错误:{}", from); } } - private static void changeDataSource(String key) { - try { - DynamicDataSourceContextHolder.setDataSourceType(key); - }finally { - DynamicDataSourceContextHolder.clearDataSourceType(); - } - } - // @Anonymous // @ApiOperation("上传数据") // @PostMapping("/http/uploadMemberInfo") diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java index 9cfdff86..06df38de 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java @@ -4,8 +4,10 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; import com.acupuncture.common.annotation.Anonymous; +import com.acupuncture.common.annotation.DataSource; import com.acupuncture.common.core.domain.BaseDto; import com.acupuncture.common.core.domain.JsonResponse; +import com.acupuncture.common.enums.DataSourceType; import com.acupuncture.common.utils.SecurityUtils; import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; import com.acupuncture.system.domain.dto.FmsFollowupDto; @@ -47,22 +49,9 @@ import java.util.List; @RestController @RequestMapping("/followup") public class FmsFollowupController { - @Resource - private FmsFollowupQueueService fmsFollowupQueueService; @Resource private FmsFollowupService fmsFollowupService; - - @ApiOperation("查询公共队列") - @PostMapping("/commonQueue") - @Anonymous - public JsonResponse> queryCommonQueue(@RequestBody @Validated BaseDto dto) { - if (dto.getPageNum() > 0) { - PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); - } - return JsonResponse.ok(new PageInfo<>(fmsFollowupQueueService.queryCommonQueue(dto.getParam().getName()))); - } - @ApiOperation("查询随访队列") @PostMapping("/query") public JsonResponse> queryQueue(@RequestBody @Validated BaseDto dto) { diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/ScreeningController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/ScreeningController.java index 740d2d5c..c04a2d29 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/ScreeningController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/ScreeningController.java @@ -82,26 +82,11 @@ public class ScreeningController { @RequestMapping(value = "/createNoToken", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse createNoToken(@ApiParam @Validated @RequestBody BaseDto params) throws Exception { log.info("创建筛查详情{}", params); -// changeDataSource(params.getParam().getTenantId()); QuestionnaireVo.DetailInfo detailInfo = screeningService.createDetail(params.getParam(), params.getParam().getUserId(), params.getParam().getTenantId()); log.info("创建筛查详情结束"); return JsonResponse.ok(detailInfo); } - private void changeDataSource(Long tenantId) { - DmsTenant dmsTenant = dmsTenantMapper.selectByPrimaryKey(tenantId); - if (dmsTenant != null) { - UmsDataSource umsDataSource = umsDataSourceMapper.selectByPrimaryKey(dmsTenant.getDataSourceId()); - if (umsDataSource != null) { - try { - DynamicDataSourceContextHolder.setDataSourceType(umsDataSource.getDataSourceKey()); - }finally { - DynamicDataSourceContextHolder.clearDataSourceType(); - } - } - } - } - @ApiOperation(value = "提交筛查", notes = "") @RequestMapping(value = "/submit", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse submitQuestionnaire(@ApiParam @Validated @RequestBody BaseDto params) throws Exception { @@ -115,7 +100,6 @@ public class ScreeningController { @RequestMapping(value = "/submitNoToken", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse submitNoToken(@ApiParam @Validated @RequestBody BaseDto params) throws Exception { log.info("提交筛查开始{}", params); -// changeDataSource(params.getParam().getTenantId()); screeningService.submitQuestionnaire(params.getParam(), 0L); return JsonResponse.ok(); } @@ -125,7 +109,6 @@ public class ScreeningController { @RequestMapping(value = "/save", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse saveQuestionnaire(@ApiParam @Validated @RequestBody BaseDto params) throws Exception { log.info("保存调查筛查开始{}", params); -// changeDataSource(params.getParam().getTenantId()); screeningService.saveQuestionnaire(params.getParam(), params.getParam().getUserId()); log.info("保存调查筛查结束"); return JsonResponse.ok(); diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/TaskController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/TaskController.java index 1a08d188..b612a4ac 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/TaskController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/TaskController.java @@ -1,211 +1,211 @@ -package com.acupuncture.web.controller.web; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import com.acupuncture.common.annotation.Anonymous; -import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; -import com.acupuncture.system.domain.po.FmsFollowupTask; -import com.acupuncture.system.domain.po.FmsPatientQueueRelation; -import com.acupuncture.system.domain.vo.FmsFollowupVo; -import com.acupuncture.system.domain.vo.UmsDataSourceVo; -import com.acupuncture.system.persist.dao.FmsFollowupDao; -import com.acupuncture.system.persist.dao.UmsDataSourceDao; -import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper; -import com.acupuncture.system.persist.mapper.FmsPatientQueueRelationMapper; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.quartz.TriggerUtils; -import org.quartz.impl.triggers.CronTriggerImpl; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -/** - * @Author zzc - * @Package com.acupuncture.web.controller.web - * @Date 2025/2/13 8:50 - * @description: - */ -@Slf4j -@Api(tags = "定时任务相关") -@RestController -@RequestMapping("/task") -@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) -public class TaskController { - - @Resource - private FmsFollowupDao fmsFollowupDao; - @Resource - private FmsFollowupTaskMapper fmsFollowupTaskMapper; - @Resource - private UmsDataSourceDao umsDataSourceDao; - @Resource - private FmsPatientQueueRelationMapper fmsPatientQueueRelationMapper; - - @ApiOperation("定时任务添加随访工单") - @PostMapping("/task") -// @Scheduled(fixedRate = 10000) - @Anonymous - public void task() { - // TODO 生成工单第一次生成之后2周的,往后只生成之后一周。第一次随访时间: ( 患者的出院时间 - 7 + 轮次时间) 到 (患者的出院时间 + 7 + 轮次时间 ) - - //查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单 -// UmsDataSourceVo.Result result1 = new UmsDataSourceVo.Result(); -// result1.setDataSourceKey("MASTER"); -// changeDataSource(result1); - List query = umsDataSourceDao.query(null); - if (CollectionUtil.isEmpty(query)) { - return; - } - //查询公共队列 - List queueResults = fmsFollowupDao.queryCommonQueue(null); - //切换数据源 - for (UmsDataSourceVo.Result result : query) { - if ("MASTER".equals(result.getDataSourceKey())) { - continue; - } - changeDataSource(result); - { - //获取随访患者列表,根据患者出院日时间和队列添加工单 - //1. 查询队列 - List queueList = fmsFollowupDao.selectQueueList(null, null, null, result.getTenantId()); - - if (CollectionUtil.isEmpty(queueList)) { - queueList = queueResults; - } else { - queueList.addAll(queueResults); - } - for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) { - //2. 查询队列随访患者列表 - List patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId(), (byte) 0, null, followupQueueVO.getTenantId()); - if (CollectionUtil.isEmpty(patientList)) { - continue; - } - //随访总月数 - Integer followupMonth = followupQueueVO.getFollowupMonth(); - for (FmsFollowupVo.FollowupPatient followupPatient : patientList) { - //获取随访到期时间 出院时间+随访总月数 = 到期时间 - Calendar calendar = Calendar.getInstance(); - calendar.setTime(followupPatient.getDischargeTime()); - calendar.set(Calendar.MONTH, followupMonth); - Date time = calendar.getTime(); - - //获取队列信息 - String frequency = followupQueueVO.getFrequency(); - List dateList = new ArrayList<>(); - try { - CronTriggerImpl cronTrigger = new CronTriggerImpl(); - cronTrigger.setCronExpression(frequency); - //TriggerUtils.computeFireTimesBetween(要计算触发时间的触发器对象, 用于计算触发时间的日历对象, 计算触发时间的起始时间点, 计算触发时间的结束时间点); - dateList = TriggerUtils.computeFireTimesBetween(cronTrigger, null, followupPatient.getDischargeTime(), time); - if (CollectionUtil.isEmpty(dateList)) { - continue; - } - } catch (Exception e) { - e.printStackTrace(); - } - //3. 判断随访类型 - if (followupQueueVO.getFollowupType() == 0) { - //单次 - FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); - BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); - fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); - fmsFollowupTask.setName(followupPatient.getName()); - fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); - fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); - fmsFollowupTask.setGender(followupPatient.getGender()); - if (followupPatient.getBirthDate() != null) { - fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); - } - fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); - fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); - fmsFollowupTask.setPhone(followupPatient.getPhone()); - fmsFollowupTask.setTenantId(followupPatient.getTenantId()); - fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); - fmsFollowupTask.setIdCard(followupPatient.getIdCard()); - fmsFollowupTask.setTimes(1); - fmsFollowupTask.setQueueId(followupQueueVO.getId()); - fmsFollowupTask.setPatientId(followupPatient.getId()); - fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); - fmsFollowupTask.setDelFlag((byte) 0); - fmsFollowupTask.setCreateTime(new Date()); - fmsFollowupTask.setStatus((byte) 0); - fmsFollowupTask.setStartTime(dateList.get(0)); - fmsFollowupTask.setEndTime(dateList.get(0)); - fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); - fmsFollowupTask.setFollowupTime(dateList.get(0)); - changeDataSource(result); - fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); - - } else { - //周期 - //4. 根据频次和总月数添加 - int i = 0; - for (Date date : dateList) { - i+=1; - //单次 - FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); - BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); - fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); - fmsFollowupTask.setName(followupPatient.getName()); - fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); - fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); - fmsFollowupTask.setGender(followupPatient.getGender()); - if (followupPatient.getBirthDate() != null) { - fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); - } - fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); - fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); - fmsFollowupTask.setTimes(i); - fmsFollowupTask.setPhone(followupPatient.getPhone()); - fmsFollowupTask.setTenantId(followupPatient.getTenantId()); - fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); - fmsFollowupTask.setIdCard(followupPatient.getIdCard()); - fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); - fmsFollowupTask.setQueueId(followupQueueVO.getId()); - fmsFollowupTask.setDelFlag((byte) 0); - fmsFollowupTask.setCreateTime(new Date()); - fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); - fmsFollowupTask.setStatus((byte) 0); - fmsFollowupTask.setStartTime(date); - fmsFollowupTask.setEndTime(date); - fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); - fmsFollowupTask.setFollowupTime(date); - changeDataSource(result); - fmsFollowupTask.setPatientId(followupPatient.getId()); - fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); - } - } - changeDataSource(result); - //将患者设置为已生成工单 - FmsPatientQueueRelation fmsPatientQueueRelation = BeanUtil.copyProperties(followupPatient, FmsPatientQueueRelation.class); - fmsPatientQueueRelation.setTaskFlag((byte) 1); - fmsPatientQueueRelation.setPatientId(followupPatient.getId()); - fmsPatientQueueRelationMapper.updateByPrimaryKeySelective(fmsPatientQueueRelation); - } - } - - } - } - } - - private static void changeDataSource(UmsDataSourceVo.Result result) { - try { - DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey()); - }finally { - DynamicDataSourceContextHolder.clearDataSourceType(); - } - } -} +//package com.acupuncture.web.controller.web; +// +//import cn.hutool.core.bean.BeanUtil; +//import cn.hutool.core.collection.CollectionUtil; +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.IdUtil; +//import com.acupuncture.common.annotation.Anonymous; +//import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; +//import com.acupuncture.system.domain.po.FmsFollowupTask; +//import com.acupuncture.system.domain.po.FmsPatientQueueRelation; +//import com.acupuncture.system.domain.vo.FmsFollowupVo; +//import com.acupuncture.system.domain.vo.UmsDataSourceVo; +//import com.acupuncture.system.persist.dao.FmsFollowupDao; +//import com.acupuncture.system.persist.dao.UmsDataSourceDao; +//import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper; +//import com.acupuncture.system.persist.mapper.FmsPatientQueueRelationMapper; +//import io.swagger.annotations.Api; +//import io.swagger.annotations.ApiOperation; +//import lombok.extern.slf4j.Slf4j; +//import org.quartz.TriggerUtils; +//import org.quartz.impl.triggers.CronTriggerImpl; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.transaction.annotation.Propagation; +//import org.springframework.transaction.annotation.Transactional; +//import org.springframework.web.bind.annotation.PostMapping; +//import org.springframework.web.bind.annotation.RequestMapping; +//import org.springframework.web.bind.annotation.RestController; +// +//import javax.annotation.Resource; +//import java.util.ArrayList; +//import java.util.Calendar; +//import java.util.Date; +//import java.util.List; +// +///** +// * @Author zzc +// * @Package com.acupuncture.web.controller.web +// * @Date 2025/2/13 8:50 +// * @description: +// */ +//@Slf4j +//@Api(tags = "定时任务相关") +//@RestController +//@RequestMapping("/task") +//@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) +//public class TaskController { +// +// @Resource +// private FmsFollowupDao fmsFollowupDao; +// @Resource +// private FmsFollowupTaskMapper fmsFollowupTaskMapper; +// @Resource +// private UmsDataSourceDao umsDataSourceDao; +// @Resource +// private FmsPatientQueueRelationMapper fmsPatientQueueRelationMapper; +// +// @ApiOperation("定时任务添加随访工单") +// @PostMapping("/task") +//// @Scheduled(fixedRate = 10000) +// @Anonymous +// public void task() { +// // TODO 生成工单第一次生成之后2周的,往后只生成之后一周。第一次随访时间: ( 患者的出院时间 - 7 + 轮次时间) 到 (患者的出院时间 + 7 + 轮次时间 ) +// +// //查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单 +//// UmsDataSourceVo.Result result1 = new UmsDataSourceVo.Result(); +//// result1.setDataSourceKey("MASTER"); +//// changeDataSource(result1); +// List query = umsDataSourceDao.query(null); +// if (CollectionUtil.isEmpty(query)) { +// return; +// } +// //查询公共队列 +// List queueResults = fmsFollowupDao.queryCommonQueue(null); +// //切换数据源 +// for (UmsDataSourceVo.Result result : query) { +// if ("MASTER".equals(result.getDataSourceKey())) { +// continue; +// } +// changeDataSource(result); +// { +// //获取随访患者列表,根据患者出院日时间和队列添加工单 +// //1. 查询队列 +// List queueList = fmsFollowupDao.selectQueueList(null, null, null, result.getTenantId()); +// +// if (CollectionUtil.isEmpty(queueList)) { +// queueList = queueResults; +// } else { +// queueList.addAll(queueResults); +// } +// for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) { +// //2. 查询队列随访患者列表 +// List patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId(), (byte) 0, null, followupQueueVO.getTenantId()); +// if (CollectionUtil.isEmpty(patientList)) { +// continue; +// } +// //随访总月数 +// Integer followupMonth = followupQueueVO.getFollowupMonth(); +// for (FmsFollowupVo.FollowupPatient followupPatient : patientList) { +// //获取随访到期时间 出院时间+随访总月数 = 到期时间 +// Calendar calendar = Calendar.getInstance(); +// calendar.setTime(followupPatient.getDischargeTime()); +// calendar.set(Calendar.MONTH, followupMonth); +// Date time = calendar.getTime(); +// +// //获取队列信息 +// String frequency = followupQueueVO.getFrequency(); +// List dateList = new ArrayList<>(); +// try { +// CronTriggerImpl cronTrigger = new CronTriggerImpl(); +// cronTrigger.setCronExpression(frequency); +// //TriggerUtils.computeFireTimesBetween(要计算触发时间的触发器对象, 用于计算触发时间的日历对象, 计算触发时间的起始时间点, 计算触发时间的结束时间点); +// dateList = TriggerUtils.computeFireTimesBetween(cronTrigger, null, followupPatient.getDischargeTime(), time); +// if (CollectionUtil.isEmpty(dateList)) { +// continue; +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// //3. 判断随访类型 +// if (followupQueueVO.getFollowupType() == 0) { +// //单次 +// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); +// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); +// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); +// fmsFollowupTask.setName(followupPatient.getName()); +// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); +// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); +// fmsFollowupTask.setGender(followupPatient.getGender()); +// if (followupPatient.getBirthDate() != null) { +// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); +// } +// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); +// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); +// fmsFollowupTask.setPhone(followupPatient.getPhone()); +// fmsFollowupTask.setTenantId(followupPatient.getTenantId()); +// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); +// fmsFollowupTask.setIdCard(followupPatient.getIdCard()); +// fmsFollowupTask.setTimes(1); +// fmsFollowupTask.setQueueId(followupQueueVO.getId()); +// fmsFollowupTask.setPatientId(followupPatient.getId()); +// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); +// fmsFollowupTask.setDelFlag((byte) 0); +// fmsFollowupTask.setCreateTime(new Date()); +// fmsFollowupTask.setStatus((byte) 0); +// fmsFollowupTask.setStartTime(dateList.get(0)); +// fmsFollowupTask.setEndTime(dateList.get(0)); +// fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); +// fmsFollowupTask.setFollowupTime(dateList.get(0)); +// changeDataSource(result); +// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); +// +// } else { +// //周期 +// //4. 根据频次和总月数添加 +// int i = 0; +// for (Date date : dateList) { +// i+=1; +// //单次 +// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); +// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); +// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); +// fmsFollowupTask.setName(followupPatient.getName()); +// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); +// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); +// fmsFollowupTask.setGender(followupPatient.getGender()); +// if (followupPatient.getBirthDate() != null) { +// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); +// } +// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); +// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); +// fmsFollowupTask.setTimes(i); +// fmsFollowupTask.setPhone(followupPatient.getPhone()); +// fmsFollowupTask.setTenantId(followupPatient.getTenantId()); +// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); +// fmsFollowupTask.setIdCard(followupPatient.getIdCard()); +// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); +// fmsFollowupTask.setQueueId(followupQueueVO.getId()); +// fmsFollowupTask.setDelFlag((byte) 0); +// fmsFollowupTask.setCreateTime(new Date()); +// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); +// fmsFollowupTask.setStatus((byte) 0); +// fmsFollowupTask.setStartTime(date); +// fmsFollowupTask.setEndTime(date); +// fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); +// fmsFollowupTask.setFollowupTime(date); +// changeDataSource(result); +// fmsFollowupTask.setPatientId(followupPatient.getId()); +// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); +// } +// } +// changeDataSource(result); +// //将患者设置为已生成工单 +// FmsPatientQueueRelation fmsPatientQueueRelation = BeanUtil.copyProperties(followupPatient, FmsPatientQueueRelation.class); +// fmsPatientQueueRelation.setTaskFlag((byte) 1); +// fmsPatientQueueRelation.setPatientId(followupPatient.getId()); +// fmsPatientQueueRelationMapper.updateByPrimaryKeySelective(fmsPatientQueueRelation); +// } +// } +// +// } +// } +// } +// +// private static void changeDataSource(UmsDataSourceVo.Result result) { +// try { +// DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey()); +// }finally { +// DynamicDataSourceContextHolder.clearDataSourceType(); +// } +// } +//} diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/WxQrCodeController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/WxQrCodeController.java index f2d2dc90..a053d9f4 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/WxQrCodeController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/WxQrCodeController.java @@ -1,7 +1,5 @@ package com.acupuncture.web.controller.web; -import cn.hutool.core.bean.BeanUtil; -import com.acupuncture.common.annotation.Anonymous; import com.acupuncture.common.core.domain.BaseDto; import com.acupuncture.common.core.domain.JsonResponse; import com.acupuncture.system.domain.dto.AmsWxQrCodeDto; diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/task/TaskController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/task/TaskController.java index e063789b..56005541 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/task/TaskController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/task/TaskController.java @@ -1,343 +1,361 @@ -//package com.acupuncture.web.controller.web; -// -//import cn.hutool.core.bean.BeanUtil; -//import cn.hutool.core.collection.CollectionUtil; -//import cn.hutool.core.date.DateUtil; -//import cn.hutool.core.util.IdUtil; -//import com.acupuncture.common.annotation.Anonymous; -//import com.acupuncture.common.core.redis.RedisCache; -//import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; -//import com.acupuncture.system.domain.dto.FmsFollowupDto; -//import com.acupuncture.system.domain.po.FmsFollowupTask; -//import com.acupuncture.system.domain.po.FmsFollowupTaskExample; -//import com.acupuncture.system.domain.po.FmsPatientQueueRelation; -//import com.acupuncture.system.domain.vo.FmsFollowupVo; -//import com.acupuncture.system.domain.vo.UmsDataSourceVo; -//import com.acupuncture.system.persist.dao.FmsFollowupDao; -//import com.acupuncture.system.persist.dao.UmsDataSourceDao; -//import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper; -//import com.acupuncture.system.persist.mapper.FmsPatientQueueRelationMapper; -//import com.acupuncture.system.service.FmsFollowupQueueService; -//import com.acupuncture.system.service.FmsFollowupService; -//import io.swagger.annotations.Api; -//import io.swagger.annotations.ApiOperation; -//import lombok.Data; -//import lombok.extern.slf4j.Slf4j; -//import org.apache.catalina.connector.Response; -//import org.quartz.TriggerUtils; -//import org.quartz.impl.triggers.CronTriggerImpl; -//import org.quartz.spi.OperableTrigger; -//import org.springframework.scheduling.annotation.Scheduled; -//import org.springframework.transaction.annotation.Propagation; -//import org.springframework.transaction.annotation.Transactional; -//import org.springframework.web.bind.annotation.PostMapping; -//import org.springframework.web.bind.annotation.RequestMapping; -//import org.springframework.web.bind.annotation.RestController; -// -//import javax.annotation.Resource; -//import javax.servlet.http.HttpServletRequest; -//import javax.servlet.http.HttpServletResponse; -//import java.util.*; -//import java.util.regex.Matcher; -//import java.util.regex.Pattern; -// -///** -// * @Author zzc -// * @Package com.acupuncture.web.controller.web -// * @Date 2025/2/13 8:50 -// * @description: -// */ -//@Slf4j -//@Api(tags = "定时任务相关") -//@RestController -//@RequestMapping("/task") -//@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) -//public class TaskController { -// -// @Resource -// private FmsFollowupDao fmsFollowupDao; -// @Resource -// private FmsFollowupService fmsFollowupService; -// @Resource -// private FmsFollowupTaskMapper fmsFollowupTaskMapper; -// @Resource -// private UmsDataSourceDao umsDataSourceDao; -// @Resource -// private RedisCache redisCache; -// @Resource -// private FmsFollowupQueueService fmsFollowupQueueService; -// -// @ApiOperation("定时任务添加随访工单") -// @PostMapping("/task") -// @Scheduled(fixedDelay = 10000) -// @Anonymous -// public void task() { -// // TODO 生成工单第一次生成之后2周的,往后只生成之后一周。第一次随访时间: ( 患者的出院时间 - 7 + 轮次时间) 到 (患者的出院时间 + 7 + 轮次时间 ) -// //查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单 -//// UmsDataSourceVo.Result result1 = new UmsDataSourceVo.Result(); -//// result1.setDataSourceKey("MASTER"); -//// changeDataSource(result1); -//// List query = umsDataSourceDao.query(null); -//// if (CollectionUtil.isEmpty(query)) { -//// return; -//// } -// //查询公共队列 -// List queueResults = redisCache.getCacheList("common_followup_queue"); -// List followupQueueVOS = new ArrayList<>(); -// if (CollectionUtil.isEmpty(queueResults)) { -// -// followupQueueVOS = fmsFollowupQueueService.queryCommonQueue(null); -// } -//// List queueResults = fmsFollowupDao.queryCommonQueue(null); -// //切换数据源 -//// for (UmsDataSourceVo.Result result : query) { -//// if ("MASTER".equals(result.getDataSourceKey()) || "PROD_YY".equals(result.getDataSourceKey())) { -//// continue; -//// } -//// changeDataSource(result); -// { -// //获取随访患者列表,根据患者出院日时间和队列添加工单 -// //1. 查询队列 -// List queueList = fmsFollowupDao.selectQueueList(null, null, null, null); +package com.acupuncture.web.task; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.acupuncture.common.annotation.Anonymous; +import com.acupuncture.common.core.redis.RedisCache; +import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; +import com.acupuncture.system.domain.dto.FmsFollowupDto; +import com.acupuncture.system.domain.po.FmsFollowupTask; +import com.acupuncture.system.domain.po.FmsFollowupTaskExample; +import com.acupuncture.system.domain.po.FmsPatientQueueRelation; +import com.acupuncture.system.domain.vo.FmsFollowupVo; +import com.acupuncture.system.domain.vo.UmsDataSourceVo; +import com.acupuncture.system.persist.dao.FmsFollowupDao; +import com.acupuncture.system.persist.dao.UmsDataSourceDao; +import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper; +import com.acupuncture.system.persist.mapper.FmsPatientQueueRelationMapper; +import com.acupuncture.system.service.FmsFollowupQueueService; +import com.acupuncture.system.service.FmsFollowupService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.quartz.TriggerUtils; +import org.quartz.impl.triggers.CronTriggerImpl; +import org.quartz.spi.OperableTrigger; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author zzc + * @Package com.acupuncture.web.controller.web + * @Date 2025/2/13 8:50 + * @description: + */ +@Slf4j +@Api(tags = "定时任务相关") +@RestController +@RequestMapping("/task") +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) +public class TaskController { + + @Resource + private FmsFollowupDao fmsFollowupDao; + @Resource + private FmsFollowupService fmsFollowupService; + @Resource + private FmsFollowupTaskMapper fmsFollowupTaskMapper; + @Resource + private UmsDataSourceDao umsDataSourceDao; + @Resource + private FmsPatientQueueRelationMapper fmsPatientQueueRelationMapper; + @Resource + private RedisCache redisCache; + @Resource + private FmsFollowupQueueService fmsFollowupQueueService; + + /** + * 处理业务 + * + * @param tenandId 租户用户 + * @param commonQueue 公共队列 + */ + public void doTask(Long tenandId, List commonQueue) { + //查询从库队列 + //1. 查询队列 + List slavelQueueList = fmsFollowupDao.selectQueueList(null, null, null, null); + + //合并公共队列和从库的队列 + slavelQueueList.addAll(commonQueue); + + //查询每个队列的对象 + for (FmsFollowupVo.FollowupQueueVO queue : slavelQueueList) { + FmsFollowupDto.FollowupPatientQueryDTO followupPatientQueryDTO = new FmsFollowupDto.FollowupPatientQueryDTO(); + followupPatientQueryDTO.setQueueId(queue.getId()); + followupPatientQueryDTO.setTenantId(queue.getTenantId()); + List patientList = fmsFollowupService.queryPatient(followupPatientQueryDTO); + log.info("查询每个队列的对象:{}", patientList); + } + + //定时任务 + +// //循环租户 +// for (UmsDataSourceVo.Result tenant : tenantList) { +// if ("MASTER".equals(tenant.getDataSourceKey())) { +// continue; +// } +// changeDataSource(tenant); +// { +// //获取随访患者列表,根据患者出院日时间和队列添加工单 +// //1. 查询队列 +// List queueList = fmsFollowupDao.selectQueueList(null, null, null, null); // -// if (CollectionUtil.isEmpty(queueList)) { -// if (CollectionUtil.isEmpty(queueResults)) { +// if (CollectionUtil.isEmpty(queueList)) { // queueList = followupQueueVOS; +// } else { +// if (CollectionUtil.isEmpty(followupQueueVOS)) { +// queueList.addAll(followupQueueVOS); +// } // } -// } else { -// if (CollectionUtil.isEmpty(queueResults)) { -// queueList.addAll(followupQueueVOS); -// } -// } -// for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) { -// Integer followWindowAdys = followupQueueVO.getFollowWindowAdys(); +// for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) { +// Integer followWindowAdys = followupQueueVO.getFollowWindowAdys(); // -// //2. 查询队列随访患者列表 +// //2. 查询队列随访患者列表 //// changeDataSource(result); -// FmsFollowupDto.FollowupPatientQueryDTO followupPatientQueryDTO = new FmsFollowupDto.FollowupPatientQueryDTO(); -// followupPatientQueryDTO.setQueueId(followupQueueVO.getId()); -// followupPatientQueryDTO.setTenantId(followupQueueVO.getTenantId()); -//// changeDataSource(result); -// List patientList = fmsFollowupService.queryTaskPatient(followupPatientQueryDTO); -//// List patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId(), null, null); -// if (CollectionUtil.isEmpty(patientList)) { -// continue; -// } -// //随访总月数 -// Integer followupMonth = followupQueueVO.getFollowupMonth(); -// for (FmsFollowupVo.FollowupPatient followupPatient : patientList) { -// //获取随访到期时间 出院时间+随访总月数 = 到期时间 -// Calendar calendar = Calendar.getInstance(); -// calendar.setTime(followupPatient.getDischargeTime()); -// calendar.set(Calendar.MONTH, followupMonth); -// Date time = calendar.getTime(); +// FmsFollowupDto.FollowupPatientQueryDTO followupPatientQueryDTO = new FmsFollowupDto.FollowupPatientQueryDTO(); +// followupPatientQueryDTO.setQueueId(followupQueueVO.getId()); +// followupPatientQueryDTO.setTenantId(followupQueueVO.getTenantId()); +// changeDataSource(result); // -// //获取队列信息 -// String frequency = followupQueueVO.getFrequency(); -// List dateList = new ArrayList<>(); -// try { -// CronTriggerImpl cronTrigger = new CronTriggerImpl(); -// cronTrigger.setCronExpression(frequency); -// //TriggerUtils.computeFireTimesBetween(要计算触发时间的触发器对象, 用于计算触发时间的日历对象, 计算触发时间的起始时间点, 计算触发时间的结束时间点); -// dateList = TriggerUtils.computeFireTimesBetween(cronTrigger, null, followupPatient.getDischargeTime(), time); -// if (CollectionUtil.isEmpty(dateList)) { -// continue; -// } -// } catch (Exception e) { -// e.printStackTrace(); +// List patientList = fmsFollowupService.queryPatient(followupPatientQueryDTO); +//// List patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId(), null, null); +// if (CollectionUtil.isEmpty(patientList)) { +// continue; // } -// //3. 判断随访类型 -// if (followupQueueVO.getFollowupType() == 0) { -// //单次 -// //判断是否已有该次随访 -// FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample(); -// fmsFollowupTaskExample.createCriteria().andTimesEqualTo(1).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId()); -// List fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample); -// if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) { -// continue; -// } -// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); -// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); -// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); -// fmsFollowupTask.setName(followupPatient.getName()); -// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); -// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); -// fmsFollowupTask.setGender(followupPatient.getGender()); -// if (followupPatient.getBirthDate() != null) { -// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); -// } -// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); -// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); -// fmsFollowupTask.setPhone(followupPatient.getPhone()); -// fmsFollowupTask.setTenantId(followupPatient.getTenantId()); -// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); -// fmsFollowupTask.setIdCard(followupPatient.getIdCard()); -// fmsFollowupTask.setTimes(1); -// fmsFollowupTask.setQueueId(followupQueueVO.getId()); -// fmsFollowupTask.setPatientId(followupPatient.getId()); -// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); -// fmsFollowupTask.setDelFlag((byte) 0); -// fmsFollowupTask.setCreateTime(new Date()); -// fmsFollowupTask.setStatus((byte) 0); +// //随访总月数 +// Integer followupMonth = followupQueueVO.getFollowupMonth(); +// for (FmsFollowupVo.FollowupPatient followupPatient : patientList) { +// //获取随访到期时间 出院时间+随访总月数 = 到期时间 +// Calendar calendar = Calendar.getInstance(); +// calendar.setTime(followupPatient.getDischargeTime()); +// calendar.set(Calendar.MONTH, followupMonth); +// Date time = calendar.getTime(); // -// //计算第一次随访的时间 -// DateComparator dateComparator = getDate(dateList); -// if (dateComparator.getDate() != null) { -// fmsFollowupTask.setStartTime(dateComparator.getDate()); -// } else { -// Calendar instance = Calendar.getInstance(); -// instance.setTime(dateList.get(0)); -// instance.add(Calendar.DATE, -followWindowAdys / 2); -// fmsFollowupTask.setStartTime(instance.getTime()); +// //获取队列信息 +// String frequency = followupQueueVO.getFrequency(); +// List dateList = new ArrayList<>(); +// try { +// CronTriggerImpl cronTrigger = new CronTriggerImpl(); +// cronTrigger.setCronExpression(frequency); +// //TriggerUtils.computeFireTimesBetween(要计算触发时间的触发器对象, 用于计算触发时间的日历对象, 计算触发时间的起始时间点, 计算触发时间的结束时间点); +// dateList = TriggerUtils.computeFireTimesBetween(cronTrigger, null, followupPatient.getDischargeTime(), time); +// if (CollectionUtil.isEmpty(dateList)) { +// continue; +// } +// } catch (Exception e) { +// e.printStackTrace(); // } -// Calendar instance1 = Calendar.getInstance(); -// instance1.setTime(dateList.get(0)); -// instance1.add(Calendar.DATE, followWindowAdys / 2); -// fmsFollowupTask.setEndTime(instance1.getTime()); -// fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); -// fmsFollowupTask.setFollowupTime(dateList.get(0)); -//// changeDataSource(result); -// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); +// //3. 判断随访类型 +// if (followupQueueVO.getFollowupType() == 0) { +// //单次 // -// } else { -// //周期 -// //4. 根据频次和总月数添加 -// DateComparator dateComparator = getDate(dateList); -// if (dateComparator.getDate() == null || dateComparator.getIndex() == null) { -// continue; -// } -// Date date = dateComparator.getDate(); -// Integer index = dateComparator.getIndex(); +// //判断是否已有该次随访 +// FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample(); +// fmsFollowupTaskExample.createCriteria().andTimesEqualTo(1).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId()); +// List fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample); +// if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) { +// continue; +// } +// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); +// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); +// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); +// fmsFollowupTask.setName(followupPatient.getName()); +// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); +// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); +// fmsFollowupTask.setGender(followupPatient.getGender()); +// if (followupPatient.getBirthDate() != null) { +// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); +// } +// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); +// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); +// fmsFollowupTask.setPhone(followupPatient.getPhone()); +// fmsFollowupTask.setTenantId(followupPatient.getTenantId()); +// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); +// fmsFollowupTask.setIdCard(followupPatient.getIdCard()); +// fmsFollowupTask.setTimes(1); +// fmsFollowupTask.setQueueId(followupQueueVO.getId()); +// fmsFollowupTask.setPatientId(followupPatient.getId()); +// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); +// fmsFollowupTask.setDelFlag((byte) 0); +// fmsFollowupTask.setCreateTime(new Date()); +// fmsFollowupTask.setStatus((byte) 0); // -// //判断是否已有该次随访 -// FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample(); -// fmsFollowupTaskExample.createCriteria().andTimesEqualTo(index).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId()); -// List fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample); -// if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) { -// continue; -// } -// -// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); -// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); -// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); -// fmsFollowupTask.setName(followupPatient.getName()); -// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); -// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); -// fmsFollowupTask.setGender(followupPatient.getGender()); -// if (followupPatient.getBirthDate() != null) { -// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); -// } -// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); -// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); -// fmsFollowupTask.setTimes(index); -// fmsFollowupTask.setPhone(followupPatient.getPhone()); -// fmsFollowupTask.setTenantId(followupPatient.getTenantId()); -// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); -// fmsFollowupTask.setIdCard(followupPatient.getIdCard()); -// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); -// fmsFollowupTask.setQueueId(followupQueueVO.getId()); -// fmsFollowupTask.setDelFlag((byte) 0); -// fmsFollowupTask.setCreateTime(new Date()); -// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); -// fmsFollowupTask.setStatus((byte) 0); -// -// fmsFollowupTask.setStartTime(date); -// Calendar instance = Calendar.getInstance(); -// instance.setTime(date); -// instance.add(Calendar.DATE, followWindowAdys / 2); -// -// fmsFollowupTask.setEndTime(instance.getTime()); -//// changeDataSource(result); -// fmsFollowupTask.setPatientId(followupPatient.getId()); -// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); -// } -// } -// } -// } -// } +// //计算第一次随访的时间 +// DateComparator dateComparator = getDate(dateList); +// if (dateComparator.getDate() != null) { +// fmsFollowupTask.setStartTime(dateComparator.getDate()); +// } else { +// Calendar instance = Calendar.getInstance(); +// instance.setTime(dateList.get(0)); +// instance.add(Calendar.DATE, -followWindowAdys / 2); +// fmsFollowupTask.setStartTime(instance.getTime()); +// } +// Calendar instance1 = Calendar.getInstance(); +// instance1.setTime(dateList.get(0)); +// instance1.add(Calendar.DATE, followWindowAdys / 2); +// fmsFollowupTask.setEndTime(instance1.getTime()); +// fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); +// fmsFollowupTask.setFollowupTime(dateList.get(0)); +// changeDataSource(result); +// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); // -// private static void changeDataSource(UmsDataSourceVo.Result result) { -// try { -// DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey()); -// } finally { -// DynamicDataSourceContextHolder.clearDataSourceType(); -// } -// } +// } else { +// //周期 +// //4. 根据频次和总月数添加 +// DateComparator dateComparator = getDate(dateList); +// if (dateComparator.getDate() == null || dateComparator.getIndex() == null) { +// continue; +// } +// Date date = dateComparator.getDate(); +// Integer index = dateComparator.getIndex(); // -// public String getName(String url) { -// Pattern pattern = Pattern.compile("jdbc:mysql://[^/]+/([^?]+)"); -// Matcher matcher = pattern.matcher(url); -// if (matcher.find()) { -// String dbName = matcher.group(1); // 输出 acupuncture_yfyy -// System.out.println("数据库名称: " + dbName); -// return dbName; -// } -// return ""; -// } +// //判断是否已有该次随访 +// FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample(); +// fmsFollowupTaskExample.createCriteria().andTimesEqualTo(index).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId()); +// List fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample); +// if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) { +// continue; +// } // -// /** -// * 法用于计算在指定时间范围内触发器的触发时间点。具体步骤如下: -// * 初始化一个空列表 lst 存储触发时间点。 -// * 克隆传入的触发器 trigg,并检查其下一个触发时间是否为空。如果为空,则设置开始时间和结束时间,并计算首次触发时间。 -// * 使用 while 循环遍历触发器的触发时间点,直到没有更多触发时间或超出指定范围。 -// * 如果触发时间在指定范围内,则将其添加到列表中,并更新触发器状态。 -// * -// * @param trigg cron表达式 -// * @param from 患者出院时间 -// * @param to 患者出院时间 + 随访总月数 -// * @return -// */ -// public static List computeFireTimesBetween(OperableTrigger trigg, org.quartz.Calendar cal, Date from, Date to) { -// LinkedList lst = new LinkedList(); -// OperableTrigger t = (OperableTrigger) trigg.clone(); -// if (t.getNextFireTime() == null) { -// t.setStartTime(from); -// t.setEndTime(to); -// t.computeFirstFireTime(cal); -// } +// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); +// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); +// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); +// fmsFollowupTask.setName(followupPatient.getName()); +// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); +// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); +// fmsFollowupTask.setGender(followupPatient.getGender()); +// if (followupPatient.getBirthDate() != null) { +// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); +// } +// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); +// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); +// fmsFollowupTask.setTimes(index); +// fmsFollowupTask.setPhone(followupPatient.getPhone()); +// fmsFollowupTask.setTenantId(followupPatient.getTenantId()); +// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); +// fmsFollowupTask.setIdCard(followupPatient.getIdCard()); +// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); +// fmsFollowupTask.setQueueId(followupQueueVO.getId()); +// fmsFollowupTask.setDelFlag((byte) 0); +// fmsFollowupTask.setCreateTime(new Date()); +// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); +// fmsFollowupTask.setStatus((byte) 0); // -// while (true) { -// Date d = t.getNextFireTime(); -// if (d == null) { -// break; -// } +// fmsFollowupTask.setStartTime(date); +// Calendar instance = Calendar.getInstance(); +// instance.setTime(date); +// instance.add(Calendar.DATE, followWindowAdys / 2); // -// if (d.before(from)) { -// t.triggered(cal); -// } else { -// if (d.after(to)) { -// break; +// fmsFollowupTask.setEndTime(instance.getTime()); +// changeDataSource(result); +// fmsFollowupTask.setPatientId(followupPatient.getId()); +// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); +// } +// } // } -// lst.add(d); -// t.triggered(cal); -// } -// } -// return Collections.unmodifiableList(lst); -// } // -// /** -// * 返回当前时间之后的第一个date及对应顺序 -// * -// * @param dateList key 为顺序,value 为时间 -// * @return -// */ -// public static DateComparator getDate(List dateList) { -// Date today = new Date(); -// DateComparator dateComparator = new DateComparator(); -// for (int i = 0; i < dateList.size(); i++) { -// Date date = dateList.get(i); -// if (date.after(today)) { -// dateComparator.setDate(date); -// dateComparator.setIndex(i + 1); -// return dateComparator; // } // } -// return dateComparator; -// } -// -// @Data -// public static class DateComparator { -// private Date date; -// private Integer index; -// } -//} + } + + @ApiOperation("定时任务添加随访工单") + @PostMapping("/task") + @Scheduled(cron = "0 0 0 * * ?") + @Anonymous + public void task() { + // TODO 生成工单第一次生成之后2周的,往后只生成之后一周。第一次随访时间: ( 患者的出院时间 - 7 + 轮次时间) 到 (患者的出院时间 + 7 + 轮次时间 ) + + //查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单 + List tenantList = umsDataSourceDao.query(null); + if (CollectionUtil.isEmpty(tenantList)) { + return; + } + //过滤掉没有数据源的租户 + tenantList = tenantList.stream().filter(result -> StrUtil.isNotEmpty(result.getDataSourceKey())).collect(Collectors.toList()); + + //查询公共队列 + List followupQueueVOS = fmsFollowupQueueService.queryCommonQueue(null); + + //循环租户 + for (UmsDataSourceVo.Result tenant : tenantList) { + //切换数据源 + DynamicDataSourceContextHolder.setDataSourceType(tenant.getDataSourceKey()); + + //处理从库业务 + doTask(tenant.getTenantId(), followupQueueVOS); + + //销毁数据源 + DynamicDataSourceContextHolder.clearDataSourceType(); + } + + + } + + /** + * 法用于计算在指定时间范围内触发器的触发时间点。具体步骤如下: + * 初始化一个空列表 lst 存储触发时间点。 + * 克隆传入的触发器 trigg,并检查其下一个触发时间是否为空。如果为空,则设置开始时间和结束时间,并计算首次触发时间。 + * 使用 while 循环遍历触发器的触发时间点,直到没有更多触发时间或超出指定范围。 + * 如果触发时间在指定范围内,则将其添加到列表中,并更新触发器状态。 + * + * @param trigg cron表达式 + * @param from 患者出院时间 + * @param to 患者出院时间 + 随访总月数 + * @return + */ + public static List computeFireTimesBetween(OperableTrigger trigg, org.quartz.Calendar cal, Date from, Date to) { + LinkedList lst = new LinkedList(); + OperableTrigger t = (OperableTrigger) trigg.clone(); + if (t.getNextFireTime() == null) { + t.setStartTime(from); + t.setEndTime(to); + t.computeFirstFireTime(cal); + } + + while (true) { + Date d = t.getNextFireTime(); + if (d == null) { + break; + } + + if (d.before(from)) { + t.triggered(cal); + } else { + if (d.after(to)) { + break; + } + lst.add(d); + t.triggered(cal); + } + } + return Collections.unmodifiableList(lst); + } + + /** + * 返回当前时间之后的第一个date及对应顺序 + * + * @param dateList key 为顺序,value 为时间 + * @return + */ + public static DateComparator getDate(List dateList) { + Date today = new Date(); + DateComparator dateComparator = new DateComparator(); + for (int i = 0; i < dateList.size(); i++) { + Date date = dateList.get(i); + if (date.after(today)) { + dateComparator.setDate(date); + dateComparator.setIndex(i + 1); + return dateComparator; + } + } + return dateComparator; + } + + @Data + public static class DateComparator { + private Date date; + private Integer index; + } +} diff --git a/acupuncture-framework/src/main/java/com/acupuncture/framework/aspectj/AdminGlobalDataSourceAspect.java b/acupuncture-framework/src/main/java/com/acupuncture/framework/aspectj/AdminGlobalDataSourceAspect.java index a91afe01..85840588 100644 --- a/acupuncture-framework/src/main/java/com/acupuncture/framework/aspectj/AdminGlobalDataSourceAspect.java +++ b/acupuncture-framework/src/main/java/com/acupuncture/framework/aspectj/AdminGlobalDataSourceAspect.java @@ -37,8 +37,6 @@ import javax.servlet.http.HttpServletRequest; public class AdminGlobalDataSourceAspect { protected Logger logger = LoggerFactory.getLogger(getClass()); - // @Autowired -// private UmsDataSourceMapper umsDataSourceMapper; @Resource private DmsLoginService dmsLoginService; @@ -51,10 +49,16 @@ public class AdminGlobalDataSourceAspect { @Around("dsPointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { - String dataSourceKey = getDataSource(point); - - if (StringUtils.isNotNull(dataSourceKey)) { - DataSourceManager.setDataSourceKey(dataSourceKey); + //获取datasource + try { + String dataSourceKey = getDataSource(point); + if (StringUtils.isNotEmpty(dataSourceKey)) { + DataSourceManager.setDataSourceKey(dataSourceKey); + } else { + DataSourceManager.setDataSourceKey(null); + } + }catch (Exception e){ + throw new BaseException(StrUtil.format("获取数据源错误:{}", e)); } try { @@ -70,41 +74,25 @@ public class AdminGlobalDataSourceAspect { */ public String getDataSource(ProceedingJoinPoint point) { // 获取请求携带的令牌 - ServletRequestAttributes requestAttributes = (ServletRequestAttributes) - RequestContextHolder.getRequestAttributes(); - HttpServletRequest request; - if (requestAttributes == null) { - DynamicDataSourceContextHolder.getDataSourceType(); - return DynamicDataSourceContextHolder.getDataSourceType(); - } - request = requestAttributes.getRequest(); - //token为空 - Long tenantId; + HttpServletRequest request = ((ServletRequestAttributes) + RequestContextHolder.getRequestAttributes()).getRequest(); + Long tenantId = null; String header = request.getHeader(UserConstants.DEPT); if(StrUtil.isNotEmpty(header)){ tenantId = Long.parseLong(header); }else { -// String deptId = request.getHeader(WebConstant.HEADER_KEY_DEPT_ID); - String authHeader = request.getHeader(UserConstants.HEADER_KEY_TOKEN); - if (StrUtil.isEmpty(authHeader)) { - return null; - } - tenantId = SecurityUtils.getTenantId(); - if (tenantId == null) { - return null; + if (StrUtil.isNotEmpty(request.getHeader(UserConstants.HEADER_KEY_TOKEN))) { + tenantId = SecurityUtils.getTenantId(); } } - - //设置所属医院和数据源l -// LoginUser loginUser = SecurityUtils.getLoginUser(); -// if(ObjectUtil.isNull(loginUser) || loginUser.getUser().isAdmin()){ -// return null; -// } //根据组织ID查询数据源 - UmsDataSource dataSource = dmsLoginService.getDataSourceByTenantId(tenantId); - if (dataSource == null) { - throw new BaseException(DATASOURCE_NOT_FOUND); + if(tenantId !=null) { + UmsDataSource dataSource = dmsLoginService.getDataSourceByTenantId(tenantId); + if (dataSource == null) { + throw new BaseException(DATASOURCE_NOT_FOUND); + } + return dataSource.getDataSourceKey(); } - return dataSource.getDataSourceKey(); + return null; } } diff --git a/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/UserDetailsServiceImpl.java b/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/UserDetailsServiceImpl.java index 93dc3214..7a028599 100644 --- a/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/UserDetailsServiceImpl.java +++ b/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/UserDetailsServiceImpl.java @@ -100,6 +100,7 @@ public class UserDetailsServiceImpl implements UserDetailsService { SysUser sysUser = new SysUser(); sysUser.setUserName(user.getUsername()); + sysUser.setPassword(user.getPassword()); sysUser.setUserId(user.getDmsUserId()); return new LoginUser(user.getDmsUserId(), user.getHospitalId(), sysUser, CollUtil.newHashSet(), user.getTenantId() ,user.getScoreId()); } diff --git a/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/WebDmsLoginService.java b/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/WebDmsLoginService.java index 9f65dacb..f5a40b40 100644 --- a/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/WebDmsLoginService.java +++ b/acupuncture-framework/src/main/java/com/acupuncture/framework/web/service/WebDmsLoginService.java @@ -62,7 +62,7 @@ public class WebDmsLoginService public String login(String username, String password, String code, String uuid) { // 验证码校验 -// validateCaptcha(username, code, uuid); + validateCaptcha(username, code, uuid); // 登录前置校验 loginPreCheck(username, password); // 用户验证 diff --git a/acupuncture-generator/src/main/resources/mbg.xml b/acupuncture-generator/src/main/resources/mbg.xml index 7ab9460b..3f1c96fd 100644 --- a/acupuncture-generator/src/main/resources/mbg.xml +++ b/acupuncture-generator/src/main/resources/mbg.xml @@ -20,7 +20,7 @@ @@ -57,16 +57,16 @@ - -
-
-
-
-
-
-
+ + + + + + + + - +
diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/domain/dto/AdminTenantUserDto.java b/acupuncture-system/src/main/java/com/acupuncture/system/domain/dto/AdminTenantUserDto.java index c61d02ba..480e2473 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/domain/dto/AdminTenantUserDto.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/domain/dto/AdminTenantUserDto.java @@ -5,7 +5,10 @@ import com.acupuncture.system.domain.po.DmsUser; import com.acupuncture.system.service.AdminTenantUserService; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.hibernate.validator.constraints.Length; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.util.List; /** @@ -18,7 +21,7 @@ public class AdminTenantUserDto { @Data public static class AddDto { - private Integer id; + private Long id; private Long tenantId; @@ -37,17 +40,14 @@ public class AdminTenantUserDto { private String status; private String contactPhone; + @ApiModelProperty("是否具有审核权限(0不具有; 1具有)") - private Byte slaverAdmin; -// -// public Long getTenantId() { -// return SecurityUtils.getTenantId(); -// } + private Byte slaverAdmin = 0; } @Data public static class UpdDto { - private Integer id; + private Long id; private Long tenantId; @@ -71,14 +71,21 @@ public class AdminTenantUserDto { @Data public static class DeleteDto { - private List idList; + private List idList; } @Data public static class Query { private Long tenantId; - private String tenantName; } + @Data + public static class ResetPwd { + @NotNull + private Long id; + @NotBlank + @Length(min = 6, max = 20) + private String password; + } } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/domain/po/DmsUser.java b/acupuncture-system/src/main/java/com/acupuncture/system/domain/po/DmsUser.java index bc916b5f..a2a0ca44 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/domain/po/DmsUser.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/domain/po/DmsUser.java @@ -4,7 +4,7 @@ import java.io.Serializable; import java.util.Date; public class DmsUser implements Serializable { - private Integer id; + private Long id; private Long tenantId; @@ -20,6 +20,8 @@ public class DmsUser implements Serializable { private String sex; + private Byte slaverAdmin; + private String status; private Byte delFlag; @@ -36,11 +38,11 @@ public class DmsUser implements Serializable { private static final long serialVersionUID = 1L; - public Integer getId() { + public Long getId() { return id; } - public void setId(Integer id) { + public void setId(Long id) { this.id = id; } @@ -100,6 +102,14 @@ public class DmsUser implements Serializable { this.sex = sex == null ? null : sex.trim(); } + public Byte getSlaverAdmin() { + return slaverAdmin; + } + + public void setSlaverAdmin(Byte slaverAdmin) { + this.slaverAdmin = slaverAdmin; + } + public String getStatus() { return status; } @@ -170,6 +180,7 @@ public class DmsUser implements Serializable { sb.append(", email=").append(email); sb.append(", phonenumber=").append(phonenumber); sb.append(", sex=").append(sex); + sb.append(", slaverAdmin=").append(slaverAdmin); sb.append(", status=").append(status); sb.append(", delFlag=").append(delFlag); sb.append(", createBy=").append(createBy); diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/domain/po/DmsUserExample.java b/acupuncture-system/src/main/java/com/acupuncture/system/domain/po/DmsUserExample.java index ce2395c7..9acc5265 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/domain/po/DmsUserExample.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/domain/po/DmsUserExample.java @@ -115,52 +115,52 @@ public class DmsUserExample { return (Criteria) this; } - public Criteria andIdEqualTo(Integer value) { + public Criteria andIdEqualTo(Long value) { addCriterion("id =", value, "id"); return (Criteria) this; } - public Criteria andIdNotEqualTo(Integer value) { + public Criteria andIdNotEqualTo(Long value) { addCriterion("id <>", value, "id"); return (Criteria) this; } - public Criteria andIdGreaterThan(Integer value) { + public Criteria andIdGreaterThan(Long value) { addCriterion("id >", value, "id"); return (Criteria) this; } - public Criteria andIdGreaterThanOrEqualTo(Integer value) { + public Criteria andIdGreaterThanOrEqualTo(Long value) { addCriterion("id >=", value, "id"); return (Criteria) this; } - public Criteria andIdLessThan(Integer value) { + public Criteria andIdLessThan(Long value) { addCriterion("id <", value, "id"); return (Criteria) this; } - public Criteria andIdLessThanOrEqualTo(Integer value) { + public Criteria andIdLessThanOrEqualTo(Long value) { addCriterion("id <=", value, "id"); return (Criteria) this; } - public Criteria andIdIn(List values) { + public Criteria andIdIn(List values) { addCriterion("id in", values, "id"); return (Criteria) this; } - public Criteria andIdNotIn(List values) { + public Criteria andIdNotIn(List values) { addCriterion("id not in", values, "id"); return (Criteria) this; } - public Criteria andIdBetween(Integer value1, Integer value2) { + public Criteria andIdBetween(Long value1, Long value2) { addCriterion("id between", value1, value2, "id"); return (Criteria) this; } - public Criteria andIdNotBetween(Integer value1, Integer value2) { + public Criteria andIdNotBetween(Long value1, Long value2) { addCriterion("id not between", value1, value2, "id"); return (Criteria) this; } @@ -645,6 +645,66 @@ public class DmsUserExample { return (Criteria) this; } + public Criteria andSlaverAdminIsNull() { + addCriterion("slaver_admin is null"); + return (Criteria) this; + } + + public Criteria andSlaverAdminIsNotNull() { + addCriterion("slaver_admin is not null"); + return (Criteria) this; + } + + public Criteria andSlaverAdminEqualTo(Byte value) { + addCriterion("slaver_admin =", value, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminNotEqualTo(Byte value) { + addCriterion("slaver_admin <>", value, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminGreaterThan(Byte value) { + addCriterion("slaver_admin >", value, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminGreaterThanOrEqualTo(Byte value) { + addCriterion("slaver_admin >=", value, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminLessThan(Byte value) { + addCriterion("slaver_admin <", value, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminLessThanOrEqualTo(Byte value) { + addCriterion("slaver_admin <=", value, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminIn(List values) { + addCriterion("slaver_admin in", values, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminNotIn(List values) { + addCriterion("slaver_admin not in", values, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminBetween(Byte value1, Byte value2) { + addCriterion("slaver_admin between", value1, value2, "slaverAdmin"); + return (Criteria) this; + } + + public Criteria andSlaverAdminNotBetween(Byte value1, Byte value2) { + addCriterion("slaver_admin not between", value1, value2, "slaverAdmin"); + return (Criteria) this; + } + public Criteria andStatusIsNull() { addCriterion("status is null"); return (Criteria) this; diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/AdminTenantUserVo.java b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/AdminTenantUserVo.java index 51dc94f1..2f226788 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/AdminTenantUserVo.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/AdminTenantUserVo.java @@ -38,6 +38,8 @@ public class AdminTenantUserVo { private Date createTime; private String tenantName; + + private Byte slaverAdmin; } } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/DmsLoginUserVo.java b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/DmsLoginUserVo.java index afe90674..ed890aed 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/DmsLoginUserVo.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/DmsLoginUserVo.java @@ -22,8 +22,10 @@ public class DmsLoginUserVo { } @Data public static class DmsUserVo { - private Integer id; + private Long id; private Long tenantId; + private String tenantName; + private String tenantPhone; private String userName; private String password; @@ -33,6 +35,7 @@ public class DmsLoginUserVo { private String email; private String phonenumber; + private Byte slaverAdmin; private String sex; diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/mapper/SysRoleMapper.java b/acupuncture-system/src/main/java/com/acupuncture/system/mapper/SysRoleMapper.java index 688d3324..9acb7743 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/mapper/SysRoleMapper.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/mapper/SysRoleMapper.java @@ -27,7 +27,7 @@ public interface SysRoleMapper * @param userId 用户ID * @return 角色列表 */ - @DataSource(DataSourceType.MASTER) +// @DataSource(DataSourceType.MASTER) public List selectRolePermissionByUserId(Long userId); /** diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/persist/dao/DmsUserDao.java b/acupuncture-system/src/main/java/com/acupuncture/system/persist/dao/DmsUserDao.java index a7764f18..56f59d88 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/persist/dao/DmsUserDao.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/persist/dao/DmsUserDao.java @@ -45,4 +45,11 @@ public interface DmsUserDao { DmsLoginUserVo.DmsUserVo checkUserNameUnique(String userName); DmsLoginUserVo.DmsUserVo checkPhoneUnique(String phonenumber); + + /** + * 根据租户用户id,查询租户用户信息 + * @param userId + * @return + */ + DmsLoginUserVo.DmsUserVo queryTenantUserById(Long userId); } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/persist/mapper/DmsUserMapper.java b/acupuncture-system/src/main/java/com/acupuncture/system/persist/mapper/DmsUserMapper.java index b0fa8fc6..719f7f1e 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/persist/mapper/DmsUserMapper.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/persist/mapper/DmsUserMapper.java @@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Param; public interface DmsUserMapper { long countByExample(DmsUserExample example); - int deleteByPrimaryKey(Integer id); + int deleteByPrimaryKey(Long id); int insert(DmsUser record); @@ -16,7 +16,7 @@ public interface DmsUserMapper { List selectByExample(DmsUserExample example); - DmsUser selectByPrimaryKey(Integer id); + DmsUser selectByPrimaryKey(Long id); int updateByExampleSelective(@Param("record") DmsUser record, @Param("example") DmsUserExample example); diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/AdminTenantUserService.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/AdminTenantUserService.java index e9c2cd1a..f62b9c6b 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/AdminTenantUserService.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/AdminTenantUserService.java @@ -21,4 +21,5 @@ public interface AdminTenantUserService { List query(AdminTenantUserDto.Query dto); + int resetPwd(AdminTenantUserDto.ResetPwd dto); } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/DmsLoginService.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/DmsLoginService.java index c54160fc..354a7682 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/DmsLoginService.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/DmsLoginService.java @@ -34,10 +34,11 @@ public interface DmsLoginService { /** * 重置用户密码 * - * @param user 用户信息 + * @param username 用户信息 + * @param password 密码 * @return 结果 */ - public int resetPwd(DmsLoginUserVo.DmsUserVo user); + public int resetPwd(Long userId, String username, String password); /** * 根据租户ID获取数据源 @@ -49,4 +50,8 @@ public interface DmsLoginService { boolean checkPhoneUnique(AdminTenantUserDto.AddDto dto); DmsTenant queryById(Long id); + + DmsLoginUserVo.DmsUserVo selectTenantUserById(Long userId); + + int updateTenantUserById(AdminTenantUserDto.UpdDto updDto); } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupQueueService.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupQueueService.java index 5c4000c6..326b4c74 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupQueueService.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupQueueService.java @@ -19,7 +19,6 @@ public interface FmsFollowupQueueService { * 查询公共队列 * @return */ - @DataSource(DataSourceType.MASTER) List queryCommonQueue(String name); } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/AdminTenantUserServiceImpl.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/AdminTenantUserServiceImpl.java index 277b6928..a98f386f 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/AdminTenantUserServiceImpl.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/AdminTenantUserServiceImpl.java @@ -35,7 +35,7 @@ public class AdminTenantUserServiceImpl implements AdminTenantUserService { @Override public int insert(AdminTenantUserDto.AddDto dto) { DmsUser dmsUser = BeanUtil.copyProperties(dto, DmsUser.class); - dmsUser.setId((int) IdUtil.getSnowflakeNextId()); + dmsUser.setId(dto.getId()); dmsUser.setCreateBy(SecurityUtils.getUsername()); dmsUser.setCreateTime(new Date()); return dmsUserMapper.insertSelective(dmsUser); @@ -62,4 +62,12 @@ public class AdminTenantUserServiceImpl implements AdminTenantUserService { public List query(AdminTenantUserDto.Query dto) { return adminDmsUserDao.query(dto); } + + @Override + public int resetPwd(AdminTenantUserDto.ResetPwd dto) { + DmsUser dmsUser = new DmsUser(); + dmsUser.setId(dto.getId()); + dmsUser.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); + return dmsUserMapper.updateByPrimaryKeySelective(dmsUser); + } } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/DmsLoginServiceImpl.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/DmsLoginServiceImpl.java index e7989974..e81ae07c 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/DmsLoginServiceImpl.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/DmsLoginServiceImpl.java @@ -1,5 +1,6 @@ package com.acupuncture.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import com.acupuncture.common.constant.UserConstants; import com.acupuncture.common.core.domain.entity.SysUser; import com.acupuncture.common.utils.StringUtils; @@ -10,6 +11,7 @@ import com.acupuncture.system.domain.po.UmsDataSource; import com.acupuncture.system.domain.vo.DmsLoginUserVo; import com.acupuncture.system.persist.dao.DmsUserDao; import com.acupuncture.system.persist.mapper.DmsTenantMapper; +import com.acupuncture.system.persist.mapper.DmsUserMapper; import com.acupuncture.system.persist.mapper.UmsDataSourceMapper; import com.acupuncture.system.service.DmsLoginService; import org.springframework.stereotype.Service; @@ -28,6 +30,9 @@ public class DmsLoginServiceImpl implements DmsLoginService { @Resource private DmsUserDao dmsUserDao; + @Resource + private DmsUserMapper dmsUserMapper; + @Resource private DmsTenantMapper dmsTenantMapper; @@ -54,7 +59,11 @@ public class DmsLoginServiceImpl implements DmsLoginService { } @Override - public int resetPwd(DmsLoginUserVo.DmsUserVo user) { + public int resetPwd(Long userId, String username, String password) { + DmsLoginUserVo.DmsUserVo user = new DmsLoginUserVo.DmsUserVo(); + user.setId(userId); + user.setUserName(username); + user.setPassword(password); return dmsUserDao.updateUser(user); } @@ -97,5 +106,22 @@ public class DmsLoginServiceImpl implements DmsLoginService { return dmsTenantMapper.selectByPrimaryKey(id); } + @Override + public DmsLoginUserVo.DmsUserVo selectTenantUserById(Long userId) { + return dmsUserDao.queryTenantUserById(userId); + } + @Override + public int updateTenantUserById(AdminTenantUserDto.UpdDto updDto) { + DmsUser dmsUser = new DmsUser(); + dmsUser.setId(updDto.getId()); + dmsUser.setUserName(updDto.getUserName()); + dmsUser.setNickName(updDto.getNickName()); + dmsUser.setEmail(updDto.getEmail()); + dmsUser.setPhonenumber(updDto.getPhonenumber()); + dmsUser.setSex(updDto.getSex()); + dmsUser.setTenantId(updDto.getTenantId()); + dmsUser.setSlaverAdmin(updDto.getSlaverAdmin()); + return dmsUserMapper.updateByPrimaryKeySelective(dmsUser); + } } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/FmsFollowupQueueServiceImpl.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/FmsFollowupQueueServiceImpl.java index 865c4346..02f9549c 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/FmsFollowupQueueServiceImpl.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/FmsFollowupQueueServiceImpl.java @@ -29,7 +29,6 @@ public class FmsFollowupQueueServiceImpl implements FmsFollowupQueueService { public static String COMMON_FOLLOWUP_QUEUE = "common_followup_queue"; @Override - @DataSource(DataSourceType.MASTER) public List queryCommonQueue(String name) { redisCache.deleteObject(COMMON_FOLLOWUP_QUEUE); List followupQueueVOS = fmsFollowupDao.queryCommonQueue(name); diff --git a/acupuncture-system/src/main/resources/mapper/dao/AdminDmsUserDao.xml b/acupuncture-system/src/main/resources/mapper/dao/AdminDmsUserDao.xml index 401a1d14..0ef1605d 100644 --- a/acupuncture-system/src/main/resources/mapper/dao/AdminDmsUserDao.xml +++ b/acupuncture-system/src/main/resources/mapper/dao/AdminDmsUserDao.xml @@ -20,6 +20,7 @@ u.update_by as updateBy, u.update_time as updateTime, u.remark, + u.slaver_admin as slaverAdmin, t.name as tenantName FROM dms_user u @@ -34,7 +35,7 @@ AND t.name like concat('%',#{dto.tenantName},'%') -order by u.create_time desc + order by u.tenant_id desc, u.id desc diff --git a/acupuncture-system/src/main/resources/mapper/dao/SysPowerDao.xml b/acupuncture-system/src/main/resources/mapper/dao/DmsUserDao.xml similarity index 84% rename from acupuncture-system/src/main/resources/mapper/dao/SysPowerDao.xml rename to acupuncture-system/src/main/resources/mapper/dao/DmsUserDao.xml index ef0da034..23f9908b 100644 --- a/acupuncture-system/src/main/resources/mapper/dao/SysPowerDao.xml +++ b/acupuncture-system/src/main/resources/mapper/dao/DmsUserDao.xml @@ -86,4 +86,22 @@ + diff --git a/acupuncture-system/src/main/resources/mapper/system/DmsUserMapper.xml b/acupuncture-system/src/main/resources/mapper/system/DmsUserMapper.xml index 0a378e18..01251565 100644 --- a/acupuncture-system/src/main/resources/mapper/system/DmsUserMapper.xml +++ b/acupuncture-system/src/main/resources/mapper/system/DmsUserMapper.xml @@ -2,7 +2,7 @@ - + @@ -10,6 +10,7 @@ + @@ -77,8 +78,8 @@ - id, tenant_id, user_name, password, nick_name, email, phonenumber, sex, status, del_flag, - create_by, create_time, update_by, update_time, remark + id, tenant_id, user_name, password, nick_name, email, phonenumber, sex, slaver_admin, + status, del_flag, create_by, create_time, update_by, update_time, remark - select from dms_user - where id = #{id,jdbcType=INTEGER} + where id = #{id,jdbcType=BIGINT} - + delete from dms_user - where id = #{id,jdbcType=INTEGER} + where id = #{id,jdbcType=BIGINT} insert into dms_user (id, tenant_id, user_name, password, nick_name, email, - phonenumber, sex, status, - del_flag, create_by, create_time, - update_by, update_time, remark - ) - values (#{id,jdbcType=INTEGER}, #{tenantId,jdbcType=BIGINT}, #{userName,jdbcType=VARCHAR}, + phonenumber, sex, slaver_admin, + status, del_flag, create_by, + create_time, update_by, update_time, + remark) + values (#{id,jdbcType=BIGINT}, #{tenantId,jdbcType=BIGINT}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{nickName,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, - #{phonenumber,jdbcType=VARCHAR}, #{sex,jdbcType=CHAR}, #{status,jdbcType=CHAR}, - #{delFlag,jdbcType=TINYINT}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, - #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{remark,jdbcType=VARCHAR} - ) + #{phonenumber,jdbcType=VARCHAR}, #{sex,jdbcType=CHAR}, #{slaverAdmin,jdbcType=TINYINT}, + #{status,jdbcType=CHAR}, #{delFlag,jdbcType=TINYINT}, #{createBy,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, + #{remark,jdbcType=VARCHAR}) insert into dms_user @@ -145,6 +146,9 @@ sex, + + slaver_admin, + status, @@ -169,7 +173,7 @@ - #{id,jdbcType=INTEGER}, + #{id,jdbcType=BIGINT}, #{tenantId,jdbcType=BIGINT}, @@ -192,6 +196,9 @@ #{sex,jdbcType=CHAR}, + + #{slaverAdmin,jdbcType=TINYINT}, + #{status,jdbcType=CHAR}, @@ -225,7 +232,7 @@ update dms_user - id = #{record.id,jdbcType=INTEGER}, + id = #{record.id,jdbcType=BIGINT}, tenant_id = #{record.tenantId,jdbcType=BIGINT}, @@ -248,6 +255,9 @@ sex = #{record.sex,jdbcType=CHAR}, + + slaver_admin = #{record.slaverAdmin,jdbcType=TINYINT}, + status = #{record.status,jdbcType=CHAR}, @@ -276,7 +286,7 @@ update dms_user - set id = #{record.id,jdbcType=INTEGER}, + set id = #{record.id,jdbcType=BIGINT}, tenant_id = #{record.tenantId,jdbcType=BIGINT}, user_name = #{record.userName,jdbcType=VARCHAR}, password = #{record.password,jdbcType=VARCHAR}, @@ -284,6 +294,7 @@ email = #{record.email,jdbcType=VARCHAR}, phonenumber = #{record.phonenumber,jdbcType=VARCHAR}, sex = #{record.sex,jdbcType=CHAR}, + slaver_admin = #{record.slaverAdmin,jdbcType=TINYINT}, status = #{record.status,jdbcType=CHAR}, del_flag = #{record.delFlag,jdbcType=TINYINT}, create_by = #{record.createBy,jdbcType=VARCHAR}, @@ -319,6 +330,9 @@ sex = #{sex,jdbcType=CHAR}, + + slaver_admin = #{slaverAdmin,jdbcType=TINYINT}, + status = #{status,jdbcType=CHAR}, @@ -341,7 +355,7 @@ remark = #{remark,jdbcType=VARCHAR}, - where id = #{id,jdbcType=INTEGER} + where id = #{id,jdbcType=BIGINT} update dms_user @@ -352,6 +366,7 @@ email = #{email,jdbcType=VARCHAR}, phonenumber = #{phonenumber,jdbcType=VARCHAR}, sex = #{sex,jdbcType=CHAR}, + slaver_admin = #{slaverAdmin,jdbcType=TINYINT}, status = #{status,jdbcType=CHAR}, del_flag = #{delFlag,jdbcType=TINYINT}, create_by = #{createBy,jdbcType=VARCHAR}, @@ -359,6 +374,6 @@ update_by = #{updateBy,jdbcType=VARCHAR}, update_time = #{updateTime,jdbcType=TIMESTAMP}, remark = #{remark,jdbcType=VARCHAR} - where id = #{id,jdbcType=INTEGER} + where id = #{id,jdbcType=BIGINT} \ No newline at end of file diff --git a/acupuncture-system/src/main/resources/mapper/system/SysUserMapper.xml b/acupuncture-system/src/main/resources/mapper/system/SysUserMapper.xml index 94a54718..5af02895 100644 --- a/acupuncture-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/acupuncture-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -168,7 +168,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status, create_by, remark, - slaver_admin, + slaver_admin, create_time )values( #{userId}, @@ -184,7 +184,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{status}, #{createBy}, #{remark}, - #{slaverAdmin}, + #{slaverAdmin}, sysdate() ) @@ -192,6 +192,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update sys_user + tenant_id = #{tenantId}, + slaver_admin = #{slaverAdmin}, dept_id = #{deptId}, user_name = #{userName}, nick_name = #{nickName},