package com.ltkj.web.controller.system; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.*; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ltkj.common.core.domain.entity.SysDept; import com.ltkj.common.core.redis.RedisCache; import com.ltkj.common.utils.bean.BeanUtils; import com.ltkj.framework.datasource.DynamicDataSourceContextHolder; import com.ltkj.hosp.domain.*; import com.ltkj.hosp.mapper.TestMapper; import com.ltkj.hosp.service.*; import com.ltkj.hosp.treeUtil.TreeSelect; import com.ltkj.system.service.ISysConfigService; import com.ltkj.system.service.ISysDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import com.ltkj.common.annotation.Log; import com.ltkj.common.core.controller.BaseController; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.enums.BusinessType; import com.ltkj.common.utils.poi.ExcelUtil; /** * 体检项目Controller * * @author ltkj * @date 2022-11-17 */ @RestController @RequestMapping("/hosp/project") @Api(tags = "体检项目管理") public class TjProjectController extends BaseController { @Resource private ITjProjectService tjProjectService; @Resource private ITjStandardService tjStandardService; @Resource private ITjPackageProjectService ppservice; @Resource private TjProConsumablesService proConsumablesService; @Resource private ITjConsumablesService consumablesService; @Resource private ISysDeptService deptService; @Resource private ISysConfigService configService; @Resource private DictProSfxmService dictProSfxmService; @Autowired private ITjRulesService tjRulesService; @Resource private TestMapper testMapper; @Resource private RedisCache redisCache; @GetMapping("/getTjHyBgList") @ApiOperation(value = "查询lis数据库项目信息接口") public AjaxResult getTjHyBgList(@RequestParam(required = false) String pacCode, @RequestParam(required = false) String pacName, @RequestParam(required = false) String pacRemark) { List> maps = testMapper.getTjHyBgList(pacCode, pacName, pacRemark); DynamicDataSourceContextHolder.clearDataSourceType(); return AjaxResult.success(maps); } /** * 选择体检项目选单项时调用的接口 */ @GetMapping("/getDxList") @ApiOperation(value = "选择体检项目选单项时调用的接口") public AjaxResult getDxList() { // LambdaQueryWrapper wq0 = new LambdaQueryWrapper<>(); // wq0.eq(TjProject::getProParentId, 0); List tjProjects = tjProjectService.getDxTjProjectList(); //上面的换sql // final List tjProjects = tjProjectService.getProBySqlAndName(proName, checkType, deptId); if (tjProjects != null) { for (TjProject project : tjProjects) { List projectList = tjProjectService.getTjProjectListBySoneId(String.valueOf(project.getProId())); project.setTjProjectList(projectList); // SysDept sysDept = deptService.selectDeptById(project.getDeptId()); // if (sysDept!=null){ // project.setDeptName(sysDept.getDeptName()); // } } } String key = configService.selectConfigByKey("is_open_sfxm"); Map map=new HashMap<>(); map.put("list",tjProjects); map.put("key",key); return AjaxResult.success(map); } /** * 查询体检项目列表 */ @GetMapping("/getlist") @ApiOperation(value = "查询体检项目列表(树形结构)") public AjaxResult getlist(@RequestParam(required = false) @ApiParam(value = "项目名称") String proName, @RequestParam(required = false) @ApiParam(value = "检查类别") String checkType, @RequestParam(required = false) @ApiParam(value = "部门id") String deptId) { //上面的换sql final List tjProjects = tjProjectService.getProBySqlAndName(proName, checkType, deptId); // if (tjProjects != null) { // for (TjProject project : tjProjects) { // List projectList = tjProjectService.getTjProjectListBySoneId(String.valueOf(project.getProId())); // project.setTjProjectList(projectList); // SysDept sysDept = deptService.selectDeptById(project.getDeptId()); // if (sysDept != null) { // project.setDeptName(sysDept.getDeptName()); // } // // } // } String key = configService.selectConfigByKey("is_open_sfxm"); Map map = new HashMap<>(); map.put("list", tjProjects); map.put("key", key); return AjaxResult.success(map); } /** * 查询项目子项 */ @GetMapping("/getAllChildListById") @ApiOperation(value = "查询项目子项") public AjaxResult getAllChildListById(@RequestParam(required = false)String proId, @RequestParam(required = false) String proName, @RequestParam(required = false) String checkType) { LambdaQueryWrapper wq=new LambdaQueryWrapper<>(); if (proId!=null){ wq.eq(TjProject::getProParentId,proId); } if (proName!=null){ wq.like(TjProject::getProName,proName); } if (checkType!=null){ wq.eq(TjProject::getProCheckType,checkType); } List tjProjects = tjProjectService.list(wq); // List tjProjects = tjProjectService.getAllChildListById(proId); if (tjProjects != null) { for (TjProject project : tjProjects) { SysDept sysDept = deptService.selectDeptById(project.getDeptId()); if (sysDept != null) { project.setDeptName(sysDept.getDeptName()); } } } String key = configService.selectConfigByKey("is_open_sfxm"); Map map = new HashMap<>(); map.put("list", tjProjects); map.put("key", key); return AjaxResult.success(map); } @GetMapping("/getPacTjProjectList") @ApiOperation(value = "维护套餐页面新增项目时调用") public AjaxResult getPacTjProjectList() { List tjProjects = tjProjectService.getPacTjProjectList(); return AjaxResult.success(tjProjects); } /** * 查询体检项目列表 */ @GetMapping("/list") @ApiOperation(value = "查询体检项目列表") public AjaxResult list() { // LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); // wq.eq(TjProject::getProParentId, 0); // wq.eq(TjProject::getProStatus, 0); List tjProjects = tjProjectService.getTjProjectList(); if (tjProjects != null) { for (TjProject project : tjProjects) { List projectList = tjProjectService.getTjProjectListBySoneId(String.valueOf(project.getProId())); project.setTjProjectList(projectList); } return AjaxResult.success(tjProjects); } return AjaxResult.success(null); } @GetMapping("/getPacProList") @ApiOperation(value = "查询体检项目列表") public AjaxResult getPacProList() { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjProject::getProParentId, 0); wq.eq(TjProject::getProStatus, 0); List tjProjects = tjProjectService.list(wq); return AjaxResult.success(tjProjects); } /** * 导出体检项目列表 */ //@PreAuthorize("@ss.hasPermi('hosp:project:export')") @Log(title = "体检项目", businessType = BusinessType.EXPORT) @PostMapping("/export") @ApiOperation(value = "导出体检项目列表") public void export(HttpServletResponse response, TjProject tjProject) { List list = tjProjectService.selectTjProjectList(tjProject); ExcelUtil util = new ExcelUtil(TjProject.class); util.exportExcel(response, list, "体检项目数据"); } /** * 获取体检项目详细信息 */ //@PreAuthorize("@ss.hasPermi('hosp:project:query')") @GetMapping(value = "/{proId}") @ApiOperation(value = "获取体检项目详细信息") public AjaxResult getInfo(@PathVariable("proId") @ApiParam(value = "体检项目id") Long proId) { TjProject tjProject = tjProjectService.getById(proId); if (null != tjProject) { if (tjProject.getProParentId() == 0) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TjProConsumables::getProId, tjProject.getProId()); List list = proConsumablesService.list(wrapper); if (null != list && list.size() > 0) { List list1 = new ArrayList<>(); for (TjProConsumables tjProConsumables : list) { TjConsumables byId = consumablesService.getById(tjProConsumables.getConsumablesId()); list1.add(byId); } tjProject.setConsumablesList(list1); } } else { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjStandard::getProId, proId); tjProject.setTjStandardList(tjStandardService.list(wq)); } //根据每个项目的deptId拿到name 2023/2/7 SysDept sysDept = deptService.selectDeptById(tjProject.getDeptId()); if (sysDept != null) { tjProject.setDeptName(sysDept.getDeptName()); } return AjaxResult.success(tjProject); } return AjaxResult.error(); } /** * 新增体检项目 */ //@PreAuthorize("@ss.hasPermi('hosp:project:add')") @ApiOperation(value = "新增体检项目") @Log(title = "体检项目", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody @ApiParam(value = "体检项目对象") TjProject tjProject) { if (null != tjProject.getConsumablesList() && tjProject.getConsumablesList().size() > 0) { tjProject.setProPrice(BigDecimal.valueOf(0.00)); tjProject.setProStandard(0); } if (null != tjProject.getTjStandardList() && tjProject.getTjStandardList().size() > 0) { tjProject.setProStandard(1); } if (tjProjectService.save(tjProject)) { if (null != tjProject.getSfxmId()) { DictProSfxm proSfxm = new DictProSfxm(); proSfxm.setSfxmId(tjProject.getSfxmId()); proSfxm.setProId(tjProject.getProId()); dictProSfxmService.save(proSfxm); } List consumablesList = tjProject.getConsumablesList(); if (null != consumablesList && consumablesList.size() > 0) { for (TjConsumables tjConsumables : consumablesList) { TjProConsumables proConsumables = new TjProConsumables(); proConsumables.setProId(tjProject.getProId()); proConsumables.setConsumablesId(tjConsumables.getId()); proConsumablesService.save(proConsumables); } } List tjStandardList = tjProject.getTjStandardList(); if (null != tjStandardList && tjStandardList.size() > 0) { for (TjStandard tjStandard : tjStandardList) { TjStandard tjStandard1 = new TjStandard(); BeanUtils.copyBeanProp(tjStandard1, tjStandard); tjStandard1.setProId(tjProject.getProId()); tjStandardService.save(tjStandard1); } tjProject.setProStandard(1); if (null == tjProject.getProPrice()) { tjProject.setProPrice(BigDecimal.valueOf(0.00)); } Long proParentId = tjProject.getProParentId(); if (null != proParentId && proParentId != 0) { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjProject::getProParentId, proParentId); List projectList = tjProjectService.list(wq); if (null != projectList && projectList.size() > 0) { BigDecimal bigDecimal = new BigDecimal("0.00"); for (TjProject project : projectList) { if (project.getProPrice() != null) { bigDecimal = bigDecimal.add(project.getProPrice()); } } if (tjProject.getProPrice() != null) { bigDecimal.add(tjProject.getProPrice()); } TjProject byId = tjProjectService.getById(proParentId); tjProject.setIsSampling(byId.getIsSampling()); tjProjectService.updateById(tjProject); byId.setProPrice(bigDecimal.setScale(2, BigDecimal.ROUND_DOWN)); tjProjectService.updateById(byId); } } } return AjaxResult.success(); } return AjaxResult.error(); } /** * 修改体检项目 */ //@PreAuthorize("@ss.hasPermi('hosp:project:edit')") @Log(title = "体检项目", businessType = BusinessType.UPDATE) @PutMapping @ApiOperation(value = "修改体检项目") public AjaxResult edit(@RequestBody @ApiParam(value = "体检项目对象") TjProject tjProject) { if (tjProject.getProStatus() == 1) { LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjPackageProject::getProId, tjProject.getProId()); List list1 = ppservice.list(wq1); if (null != list1 && list1.size() > 0) { return AjaxResult.error("该项目正在套餐中使用,暂时不能停用"); } } if (tjProject.getProParentId() == 0) { if (tjProjectService.updateById(tjProject)) { if (dictProSfxmService.deletedProSfxm(tjProject.getProId())) { if (null != tjProject.getSfxmId()) { DictProSfxm proSfxm = new DictProSfxm(); proSfxm.setSfxmId(tjProject.getSfxmId()); proSfxm.setProId(tjProject.getProId()); dictProSfxmService.save(proSfxm); } } List list = tjProjectService.getTjProjectListBySoneId(String.valueOf(tjProject.getProId())); if (null != list && list.size() > 0) { for (TjProject project : list) { project.setDeptId(tjProject.getDeptId()); project.setProType(tjProject.getProType()); project.setProCheckMethod(tjProject.getProCheckMethod()); project.setProStatus(tjProject.getProStatus()); project.setIsSampling(tjProject.getIsSampling()); tjProjectService.updateById(project); } } List consumablesList = tjProject.getConsumablesList(); if (null != consumablesList && consumablesList.size() > 0) { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjProConsumables::getProId, tjProject.getProId()); proConsumablesService.remove(wq); for (TjConsumables tjConsumables : consumablesList) { TjProConsumables proConsumables = new TjProConsumables(); proConsumables.setProId(tjProject.getProId()); proConsumables.setConsumablesId(tjConsumables.getId()); proConsumablesService.save(proConsumables); } return AjaxResult.success(); } return AjaxResult.success(); } } TjProject byId1 = tjProjectService.selectTjProjectByProId(tjProject.getProParentId()); if (null != byId1 && !tjProject.getDeptId().equals(byId1.getDeptId())) { return AjaxResult.error("不可更改父项目科室!"); } if (null != byId1) { tjProject.setIsSampling(byId1.getIsSampling()); } if (tjProjectService.updateById(tjProject)) { if (dictProSfxmService.deletedProSfxm(tjProject.getProId())) { if (null != tjProject.getSfxmId()) { DictProSfxm proSfxm = new DictProSfxm(); proSfxm.setSfxmId(tjProject.getSfxmId()); proSfxm.setProId(tjProject.getProId()); dictProSfxmService.save(proSfxm); } } List tjStandardList = tjProject.getTjStandardList(); if (null != tjStandardList && tjStandardList.size() > 0) { for (TjStandard tjStandard : tjStandardList) { if (null == tjStandard.getTjSex()) { tjStandard.setTjSex(null); } tjStandard.setProId(tjProject.getProId()); tjStandardService.saveOrUpdate(tjStandard); } } if (null == tjProject.getProPrice()) { tjProject.setProPrice(BigDecimal.valueOf(0.00)); } Long proParentId = tjProject.getProParentId(); if (null != proParentId) { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjProject::getProParentId, proParentId); List projectList = tjProjectService.list(wq); if (null != projectList && projectList.size() > 0) { BigDecimal bigDecimal = new BigDecimal("0.00"); for (TjProject project : projectList) { bigDecimal = bigDecimal.add(project.getProPrice()); } bigDecimal.add(tjProject.getProPrice()); TjProject byId = tjProjectService.getById(proParentId); byId.setProPrice(bigDecimal.setScale(2, BigDecimal.ROUND_DOWN)); tjProjectService.updateById(byId); } } return AjaxResult.success(); } return AjaxResult.error(); } /** * 删除体检项目 */ // @PreAuthorize("@ss.hasPermi('hosp:project:remove')") @Log(title = "体检项目", businessType = BusinessType.DELETE) @DeleteMapping("/{proIds}") @ApiOperation(value = "删除体检项目(可删除父项目和子项目)") public AjaxResult remove(@PathVariable Long[] proIds) { if (null == proIds || proIds.length <= 0) { return AjaxResult.error("请选择要删除的项目"); } for (Long proId : proIds) { TjProject project1 = tjProjectService.getById(proId); if (null != project1) { if (project1.getProParentId() == 0) { LambdaQueryWrapper wq0 = new LambdaQueryWrapper<>(); wq0.eq(TjProject::getProParentId, proId); List list = tjProjectService.list(wq0); LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjPackageProject::getProId, proId); List list1 = ppservice.list(wq1); if (null != list1 && list1.size() > 0) { return AjaxResult.error("该项目正在套餐中使用,暂时不能删除"); } LambdaQueryWrapper wq2 = new LambdaQueryWrapper<>(); wq2.eq(TjPackageProject::getProId, proId); LambdaQueryWrapper wq3 = new LambdaQueryWrapper<>(); wq3.eq(TjProConsumables::getProId, proId); proConsumablesService.remove(wq3); ppservice.remove(wq2); tjProjectService.removeByIds(list.stream().map(TjProject::getProId).collect(Collectors.toList())); tjProjectService.removeById(project1.getProId()); } else { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjStandard::getProId, proId); tjStandardService.remove(wq); tjProjectService.removeById(project1.getProId()); } } } return AjaxResult.success("删除成功"); } /** * 获取项目树列表 */ @GetMapping("/projectTree") @ApiOperation("获取项目树列表") public AjaxResult projectTree(TjProject tjProject) { final List treeSelects = tjProjectService.selectProjectTreeList(tjProject); // for (TreeSelect treeSelect : treeSelects) { // for (TreeSelect child : treeSelect.getChildren()) { // LambdaQueryWrapper wq=new LambdaQueryWrapper<>(); // wq.eq(TjRules::getProId,child.getId()); // final List list = tjRulesService.list(); // List res=new ArrayList<>(); // for (TjRules tjRules : list) { // TreeSelect a=new TreeSelect(); // a.setId(Long.valueOf(tjRules.getAid())); // a.setLabel(tjRules.getBingzhong()); // res.add(a); // } // child.setChildren(res); // } // } return success(treeSelects); } /** * 查询体检项目子项列表 */ @GetMapping("/getSonsList") @ApiOperation(value = "查询体检项目子项列表") public AjaxResult getSonsList(@RequestParam(required = false) @ApiParam(value = "项目名称") String proName) { LambdaQueryWrapper wq0 = new LambdaQueryWrapper<>(); wq0.ne(TjProject::getProParentId, 0); if (null != proName) { wq0.like(TjProject::getProName, proName); } List tjProjects = tjProjectService.list(wq0); return AjaxResult.success(tjProjects); } /** * 获取体检项目详细信息 */ @GetMapping(value = "/getInfoByProId") @ApiOperation(value = "获取体检项目详细信息") public AjaxResult getInfoByProId(@RequestParam Long proId) { TjProject tjProject = tjProjectService.getById(proId); return AjaxResult.success(tjProject); } // /** // * 获取部门树列表 // */ // @GetMapping("/deptTree") // @ApiOperation("获取部门树列表") // public AjaxResult deptTree(SysDept dept) { // return success(deptService.selectDeptTreeList(dept)); // } }