package cn.besteam.modules.api.controller; import cn.besteam.common.api.vo.Result; import cn.besteam.common.aspect.annotation.LogApi; import cn.besteam.common.aspect.annotation.OpenApi; import cn.besteam.common.constant.CommonConstant; import cn.besteam.common.constant.ErrorCode; import cn.besteam.common.exception.BusinessException; import cn.besteam.modules.medical.entity.MwDeviceAgentDevice; import cn.besteam.modules.medical.service.IMwDeviceAgentDeviceService; import cn.besteam.modules.medical.service.IMwTransitConfigService; import cn.besteam.modules.shiro.authc.util.EnvUtils; import cn.besteam.modules.system.biz.SysDepartmentBiz; import cn.besteam.modules.system.dto.*; import cn.besteam.modules.system.entity.SysDepartment; import cn.besteam.modules.system.entity.SysUser; import cn.besteam.modules.system.service.ISysDepartmentService; import cn.besteam.modules.system.service.ISysRolePermissionService; import cn.besteam.modules.system.service.ISysUserService; import cn.besteam.modules.system.vo.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.Map; @RestController @RequestMapping("/api/user") @Api(value = "用户相关") public class ApiUserController { @Autowired private ISysUserService sysUserService; @Autowired private SysDepartmentBiz sysDepartmentBiz; @Autowired private IMwDeviceAgentDeviceService mwDeviceAgentDeviceService; @Autowired private ISysRolePermissionService sysRolePermissionService; @Autowired private IMwTransitConfigService mwTransitConfigService; @Autowired private ISysDepartmentService departmentService; @ApiOperation(value = "APP登录") @OpenApi @PostMapping("/login") @LogApi(value = "APP登录") public Result login(@Validated @RequestBody SysUserLoginDTO dto) { if(null != dto.getSn()){ MwDeviceAgentDevice device = mwDeviceAgentDeviceService.getOne(new QueryWrapper().lambda().eq(MwDeviceAgentDevice::getSn, dto.getSn()).eq(MwDeviceAgentDevice::getStatus, CommonConstant.STATUS_NORMAL)); if (device == null) { Integer deviceValidateStatus = mwDeviceAgentDeviceService.getDeviceValidateStatus(); if (deviceValidateStatus.equals(1)) { throw new BusinessException(ErrorCode.ERR_500, "未授权设备"); } } } AppSysUserVO current = sysUserService.appLogin(dto); fillAppSysUserVO(current, dto.getAccount()); return Result.ok(current); } private void fillAppSysUserVO(AppSysUserVO current, String account) { current.setOfficeList(sysDepartmentBiz.getMyOfficeListByApp(current.getId())); current.setOfficeUserList(sysUserService.getUserListByApp(current.getId())); current.setPermissionList(sysRolePermissionService.getAppPermissionList(current.getRoleId())); current.setTransitConfigList(mwTransitConfigService.listAppSelect(current.getDepartmentId())); if(null == account){ return; } SysUser one = sysUserService.getOne(new QueryWrapper().lambda().eq(SysUser::getAccount, account).eq(SysUser::getDelFlag, 0)); SysDepartment myDepartment = departmentService.getMyDepartment(one.getId()); if(null != myDepartment){ SysDepartment hospital = departmentService.getHospital(myDepartment.getParentId()); if(null != hospital){ SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); current.setExpireDate(null == hospital.getExpireDate() ? "" : sdf.format(hospital.getExpireDate())); current.setHospitalId(hospital.getId()); current.setReminderDays(hospital.getReminderDays()); } } } @ApiOperation(value = "APP扫码登录") @OpenApi @PostMapping("/loginByCode") @LogApi(value = "APP扫码登录") public Result loginByCode(@Validated @RequestBody SysUserLoginByCodeDTO dto) { MwDeviceAgentDevice device = mwDeviceAgentDeviceService.getOne(new QueryWrapper().lambda().eq(MwDeviceAgentDevice::getSn, dto.getSn()).eq(MwDeviceAgentDevice::getStatus, CommonConstant.STATUS_NORMAL)); if (device == null) { Integer deviceValidateStatus = mwDeviceAgentDeviceService.getDeviceValidateStatus(); if (deviceValidateStatus.equals(1)) { throw new BusinessException(ErrorCode.ERR_500, "未授权设备"); } } AppSysUserVO current = sysUserService.appLoginByCode(dto.getCode(), dto.getSn()); fillAppSysUserVO(current, null); return Result.ok(current); } @GetMapping("/current") @ApiOperation("获取当前用户信息") @LogApi(value = "获取当前用户信息") public Result current() { SysUserVO loginUser = sysUserService.current(); AppSysUserVO current = new AppSysUserVO(); BeanUtils.copyProperties(loginUser, current); fillAppSysUserVO(current, null); return Result.ok(current); } @OpenApi @GetMapping("/getValidateCode") @ApiOperation("发送验证码") @LogApi(value = "发送验证码") public Result getValidateCode(@RequestParam("account") String account, @RequestParam("phone") String phone) { return Result.ok(sysUserService.getValidateCode(account, phone, true)); } @OpenApi @PostMapping("/checkValidateCode") @ApiOperation("检查验证码") @LogApi(value = "检查验证码") public Result checkValidateCode(@Validated @RequestBody SysUserForgotPwdDTO dto) { return Result.ok(sysUserService.checkValidateCode(dto.getAccount(), dto.getPhone(), dto.getValidateCode())); } @OpenApi @PostMapping("/resetPassword") @ApiOperation("重置密码") @LogApi(value = "重置密码") public Result resetPassword(@Validated @RequestBody SysUserPwdDTO dto) { return Result.ok(sysUserService.resetPassword(dto.getAccount(), dto.getPhone(), dto.getValidateCode(), dto.getPassword())); } @PostMapping("/updatePassword") @ApiOperation("修改密码") @LogApi(value = "修改密码") public Result updatePassword(@Validated @RequestBody SysUserUpdatePwdDTO dto) { return Result.ok(sysUserService.updatePassword(dto.getOriginPassword(), dto.getPassword())); } @GetMapping(value = "/getMyHospitalList") @ApiOperation(value = "获取我的医院列表", notes = "获取我的医院列表", produces = "application/json") @LogApi(value = "获取我的医院列表") public Result getMyHospitalList() { return Result.ok(sysDepartmentBiz.getMyHospitalList()); } @GetMapping(value = "/getMyOfficeList") @ApiOperation(value = "获取我的科室列表", notes = "获取我的科室列表", produces = "application/json") @LogApi(value = "获取我的科室列表") public Result getMyOfficeList() { return Result.ok(sysDepartmentBiz.getMyOfficeListByApp(EnvUtils.getUser().getId())); } @GetMapping(value = "/getOfficeUserList") @ApiOperation(value = "获取科室人员列表", notes = "获取科室人员列表", produces = "application/json") @LogApi(value = "获取科室人员列表") public Result getMyOfficeUserList() { return Result.ok(sysUserService.getUserListByApp(EnvUtils.getUser().getId())); } @GetMapping(value = "/getMyWarehouseOfficeList") @ApiOperation(value = "获取我的暂存间列表", notes = "获取我的暂存间列表", produces = "application/json") @LogApi(value = "获取我的暂存间列表") public Result getMyWarehouseOfficeList() { return Result.ok(sysDepartmentBiz.getMyWarehouseOfficeList(null)); } @OpenApi @PostMapping(value = "/getPayUrl") @ApiOperation(value = "获取支付连接", notes = "获取支付连接", produces = "application/json") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "医院id", required = true, dataType = "int", format = "query") }) @LogApi(value = "获取支付连接") public Result getPayUrl(@Validated @RequestParam Integer id){ return Result.ok(sysUserService.getPayUrl(id)); } @OpenApi @PostMapping(value = "/NouNouPayCallback") @LogApi(value = "支付成功回调") public void NouNouPayCallback(@RequestBody Map map, HttpServletResponse response){ sysUserService.NouNouPayCallback(map, response); } @OpenApi @PostMapping(value = "/getPayStatus") @ApiOperation(value = "查询支付结果", notes = "查询支付结果", produces = "application/json") @ApiImplicitParams({ @ApiImplicitParam(name = "code", value = "订单号", required = true, dataType = "string", format = "query") }) public Result getPayStatus(@Validated @RequestParam String code){ return Result.ok(sysUserService.getPayStatus(code)); } }