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.utils.bean.BeanUtils; import com.ltkj.hosp.domain.*; 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; /** * 查询体检项目列表 */ @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) { LambdaQueryWrapper wq0 = new LambdaQueryWrapper<>(); wq0.eq(TjProject::getProParentId, 0); if(null !=proName){ wq0.like(TjProject::getProName,proName); } if(null !=checkType){ wq0.like(TjProject::getProCheckType,checkType); } if(null !=deptId){ wq0.like(TjProject::getDeptId,deptId); } List tjProjects = tjProjectService.list(wq0); if (tjProjects != null) { for (TjProject project : tjProjects) { LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjProject::getProParentId, project.getProId()); List projectList = tjProjectService.list(wq1); project.setTjProjectList(projectList); //根据每个项目的deptId拿到name 2023/2/7 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("/list") @ApiOperation(value = "查询体检项目列表") public AjaxResult list() { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjProject::getProParentId, 0); wq.eq(TjProject::getProStatus, 0); List tjProjects = tjProjectService.list(wq); if (tjProjects != null) { for (TjProject project : tjProjects) { LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjProject::getProParentId,project.getProId()); List projectList = tjProjectService.list(wq1); project.setTjProjectList(projectList); } return AjaxResult.success(tjProjects); } return AjaxResult.success(null); } /** * 导出体检项目列表 */ //@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.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) { LambdaQueryWrapperwq=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.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("/deptTree") // @ApiOperation("获取部门树列表") // public AjaxResult deptTree(SysDept dept) { // return success(deptService.selectDeptTreeList(dept)); // } }