package com.ltkj.web.controller.system; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ltkj.common.core.redis.RedisCache; import com.ltkj.framework.config.MatchUtils; import com.ltkj.hosp.domain.*; import com.ltkj.hosp.service.*; import com.ltkj.system.service.ISysConfigService; import com.ltkj.web.controller.his.HisApiMethod; import com.ltkj.web.controller.lis.LisApiMethod; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; 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; import com.ltkj.common.core.page.TableDataInfo; /** * 体检采样管理Controller * * @author ltkj_赵佳豪&李格 * @date 2023-04-11 */ @Slf4j @RestController @RequestMapping("/sampling/sampling") @Api(tags = "PC端 体检采样管理") public class TjSamplingController extends BaseController { @Resource private ITjSamplingService tjSamplingService; @Resource private ITjCustomerService customerService; @Resource private ITjProjectService projectService; @Resource private TjAsyncService asyncService; @Resource private RedisCache redisCache; @Autowired private ITjOrderService orderService; @Autowired private ITbTransitionService tbTransitionService; @Autowired private LisApiMethod lisApiMethod; @Autowired private ISysConfigService configService; @Autowired private SamplingServiceApi samplingService; @Autowired private HisApiMethod hisApiMethod; @Autowired private LtkjJianchajianyanTreeService treeService; @Autowired private TbLisSqService tbLisSqService; @Autowired private LtkjJfxmgljyxmzdService jfxmgljyxmzdService; /** * 查询体检采样管理列表 */ //@PreAuthorize("@ss.hasPermi('sampling:sampling:list')") @GetMapping("/list") @ApiOperation(value = "查询体检采样管理列表(自带默认)") public TableDataInfo list(TjSampling tjSampling) { startPage(); List list = tjSamplingService.selectTjSamplingList(tjSampling); if (null != list && list.size() > 0) { for (TjSampling sampling : list) { TjCustomer customer = customerService.getById(sampling.getCusId()); if (null != customer) { sampling.setCustomer(customer); } } } return getDataTable(list); } @GetMapping("/getList") @ApiOperation(value = "查询采样未签收列表()") public AjaxResult getList(@RequestParam @ApiParam(value = "0是1否") Integer isSignFor, @RequestParam(required = false) @ApiParam(value = "体检号") String tjNum, @RequestParam(required = false) @ApiParam(value = "客户姓名") String name, @ApiParam(value = "页码数(默认1)") @RequestParam(defaultValue = "1") Integer pageNum, @ApiParam(value = "显示条数(默认10)") @RequestParam(defaultValue = "10") Integer pageSize, @ApiParam(value = "开始时间") @RequestParam(required = false) String beginTime, @ApiParam(value = "结束时间") @RequestParam(required = false) String endTime) { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); List> arrayList = new ArrayList<>(); wq.orderByDesc(TjSampling::getApplicationTime); if (null != beginTime && !"".equals(beginTime) && null != endTime && !"".equals(endTime)) wq.between(TjSampling::getApplicationTime, beginTime, endTime); if (null != tjNum) { wq.eq(TjSampling::getTjNum, tjNum); wq.eq(TjSampling::getIsSignFor, isSignFor); List list = tjSamplingService.list(wq); List> extracted = extracted(arrayList, list, pageNum, pageSize); //________________________解决搜索数据不对 Map map = new HashMap<>(); map.put("list", extracted); map.put("total", arrayList.size()); return AjaxResult.success(map); //________________________解决搜索数据不对 } if (null != name) { wq.like(TjSampling::getCusName, name); wq.eq(TjSampling::getIsSignFor, isSignFor); List list = tjSamplingService.list(wq); List> extracted = extracted(arrayList, list, pageNum, pageSize); //________________________解决搜索数据不对 Map map = new HashMap<>(); map.put("list", extracted); map.put("total", arrayList.size()); return AjaxResult.success(map); //________________________解决搜索数据不对 } List> cacheMapValue = null; if (isSignFor == 0) { cacheMapValue = redisCache.getCacheMapValue("sampling", "yqs"); } if (isSignFor == 1) { cacheMapValue = redisCache.getCacheMapValue("sampling", "wqs"); } asyncService.saveSampling(); List> collect = null; Map map = new HashMap<>(); if (null == cacheMapValue || cacheMapValue.size() == 0) { wq.eq(TjSampling::getIsSignFor, isSignFor); List list = tjSamplingService.list(wq); collect = extracted(arrayList, list, pageNum, pageSize); map.put("total", arrayList.size()); } else { collect = cacheMapValue.stream().skip((long) (pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); map.put("total", cacheMapValue.size()); } map.put("list", collect); return AjaxResult.success(map); } private List> extracted(List> arrayList, List list, Integer pageNum, Integer pageSize) { if (null != list && list.size() > 0) { Map> stringListMap = list.stream().collect(Collectors.groupingBy(TjSampling::getCusId)); for (Map.Entry> entry : stringListMap.entrySet()) { Map map = new HashMap<>(); TjCustomer customer = customerService.getById(entry.getKey()); if (customer == null) { continue; } customer.setCusName(MatchUtils.hideCusName(customer.getCusName())); customer.setCusPhone(MatchUtils.hidePhoneNum(customer.getCusPhone())); customer.setCusIdcard(MatchUtils.hideIdCardNum(customer.getCusIdcard())); customer.setTjNumber(entry.getValue().get(0).getTjNum()); customer.setApplicationTime(entry.getValue().get(0).getApplicationTime()); List samplings = entry.getValue(); if (null != samplings && samplings.size() > 0) { List projectList = new ArrayList<>(); for (TjSampling sampling : samplings) { sampling.setCusName(MatchUtils.hideCusName(sampling.getCusName())); TjProject project = projectService.getById(sampling.getProId()); if (null != project && project.getProParentId() == 0) { projectList.add(sampling); } } map.put("list", projectList); } map.put("customer", customer); arrayList.add(map); } } List> collect = null; if (null != arrayList && arrayList.size() > 0) { collect = arrayList.stream().skip((long) (pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); } return collect; } /** * 获取采样客户列表 * * @param isSignFor * @param tjNumber * @param name * @param pageNum * @param pageSize * @param beginTime * @param endTime * @return */ @GetMapping("/getCusList") @ApiOperation(value = "获取采样客户列表") public AjaxResult getCusList(@RequestParam(defaultValue = "1") @ApiParam(value = "0是1否") Integer isSignFor, @RequestParam(required = false) @ApiParam(value = "体检号") String tjNumber, @RequestParam(required = false) @ApiParam(value = "客户姓名") String name, @RequestParam(required = false) @ApiParam(value = "单位") String dw, @ApiParam(value = "页码数(默认1)") @RequestParam(defaultValue = "1") Integer pageNum, @ApiParam(value = "显示条数(默认10)") @RequestParam(defaultValue = "10") Integer pageSize, @ApiParam(value = "开始时间") @RequestParam(required = false) String beginTime, @ApiParam(value = "结束时间") @RequestParam(required = false) String endTime) { Page samplingPage = new Page<>(pageNum, pageSize); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TjSampling::getIsSignFor, isSignFor); if (null != tjNumber && StrUtil.isNotBlank(tjNumber)) wrapper.like(TjSampling::getTjNum, tjNumber); if (null != name && StrUtil.isNotBlank(name)) wrapper.like(TjSampling::getCusName, name); if (null != beginTime && null != endTime && StrUtil.isNotBlank(beginTime) && StrUtil.isNotBlank(endTime)) wrapper.between(TjSampling::getApplicationTime, beginTime, endTime); if (StrUtil.isNotBlank(dw)){ LambdaQueryWrapper wqq=new LambdaQueryWrapper<>(); wqq.like(TjOrder::getFirmId,dw); wqq.select(TjOrder::getTjNumber); List orderList = orderService.list(wqq); if(null !=orderList && !orderList.isEmpty()){ List list = orderList.stream().map(TjOrder::getTjNumber).collect(Collectors.toList()); wrapper.in(TjSampling::getTjNum, list); } } wrapper.groupBy(TjSampling::getTjNum); wrapper.orderByDesc(TjSampling::getCreateTime); // wrapper.last("LIMIT " + (pageNum - 1) * pageSize + "," + pageSize); Page page = tjSamplingService.page(samplingPage, wrapper); List list = page.getRecords(); ArrayList tjCustomers = new ArrayList<>(); for (TjSampling tjSampling : list) { TjCustomer customer = customerService.getById(tjSampling.getCusId()); if(null !=customer){ TjOrder order = orderService.getOrderByTjNum(tjSampling.getTjNum()); if(null !=order){ customer.setCompName(order.getFirmName()); customer.setCusName(customer.getCusName()); customer.setCusPhone(MatchUtils.hidePhoneNum(customer.getCusPhone())); customer.setCusIdcard(MatchUtils.hideIdCardNum(customer.getCusIdcard())); customer.setTjNumber(tjSampling.getTjNum()); customer.setApplicationTime(tjSampling.getApplicationTime()); tjCustomers.add(customer); } } } HashMap hashMap = new HashMap<>(); hashMap.put("list", tjCustomers); hashMap.put("total", page.getTotal()); return AjaxResult.success(hashMap); } /** * 根据客户获取采样列表 * * @param tjNumber * @return */ @GetMapping("/getCusCyList") @ApiOperation(value = "根据客户获取采样列表") public AjaxResult getCusCyList(@RequestParam @ApiParam(value = "客户id") String tjNumber, @RequestParam(defaultValue = "1") @ApiParam(value = "0是1否") Integer isSignFor) { if (tjNumber == null || StrUtil.isBlank(tjNumber)) return AjaxResult.error("参数错误,未传参数"); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); String config = configService.selectConfigByKey("sfkqdyhis"); if (config.equals("Y")){ // LambdaQueryWrapper wrapper6 = new LambdaQueryWrapper<>(); // wrapper6.eq(TjSampling::getTjNum, tjNumber); // wrapper6.eq(TjSampling::getIsSignFor,isSignFor); // wrapper6.and(i -> i.isNull(TjSampling::getParentId).or().eq(TjSampling::getIsMerge,1)); // wrapper6.isNull(TjSampling::getJyxh); // List list1 = tjSamplingService.list(wrapper6); // if (!list1.isEmpty()){ if (true){ LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); wrapper1.eq(TjOrder::getTjNumber,tjNumber); TjOrder tjOrder = orderService.getOne(wrapper1); hisApiMethod.Getlabreginfoinfo(tjOrder.getCardId(),new SimpleDateFormat("yyyy-MM-dd").format(tjOrder.getCreateTime())); LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.eq(TbLisSq::getCardId,tjOrder.getCardId()); List list = tbLisSqService.list(wrapper2); for (TbLisSq lisSq : list) { if (!lisSq.getSqdbh().contains("jk")) continue; String jyxmdm = lisSq.getJyxmdm(); LambdaQueryWrapper wrapper4 = new LambdaQueryWrapper<>(); wrapper4.eq(TjProject::getLisXmbm,jyxmdm); TjProject project = projectService.getOne(wrapper4); if (project != null){ LambdaUpdateWrapper wrapper5 = new LambdaUpdateWrapper<>(); String jyxh = ""; if (StrUtil.isNotBlank(lisSq.getJyxhHb())) jyxh = lisSq.getJyxhHb(); else jyxh = lisSq.getJyxh(); wrapper5.set(TjSampling::getJyxh,jyxh); wrapper5.set(TjSampling::getJyxmdm,lisSq.getJyxmdm()); wrapper5.eq(TjSampling::getProId,project.getProParentId()); wrapper5.eq(TjSampling::getTjNum,tjNumber); tjSamplingService.update(wrapper5); } } // JSONArray array = hisApiMethod.Getlabreginfoinfo(tjOrder.getCardId()); // if (array != null && !array.isEmpty()){ // for (Object o : array) { // JSONObject jsonObject = (JSONObject) o; // String sqdh = jsonObject.getStr("sqdh"); // String jyxh = jsonObject.getStr("jyxh"); // LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); // wrapper2.eq(LtkjJianchajianyanTree::getCardId,tjOrder.getCardId()); // wrapper2.eq(LtkjJianchajianyanTree::getType,"检验"); // wrapper2.eq(LtkjJianchajianyanTree::getSqdh,sqdh); // List list = treeService.list(wrapper2); // List hisXms = list.stream().map(LtkjJianchajianyanTree::getHisXmdm).collect(Collectors.toList()); // LambdaQueryWrapper wrapper3 = new LambdaQueryWrapper<>(); // wrapper3.in(TjProject::getHisXmbm,hisXms); // wrapper3.ne(TjProject::getProParentId,0); // wrapper3.groupBy(TjProject::getProParentId); // List proParentIds = projectService.list(wrapper3).stream().map(TjProject::getProParentId).collect(Collectors.toList()); // LambdaQueryWrapper wrapper4 = new LambdaQueryWrapper<>(); // wrapper4.in(TjProject::getProId,proParentIds); // List proIds = projectService.list(wrapper4).stream().map(TjProject::getProId).collect(Collectors.toList()); // LambdaUpdateWrapper wrapper5 = new LambdaUpdateWrapper<>(); // wrapper5.set(TjSampling::getJyxh,jyxh); // wrapper5.in(TjSampling::getProId,proIds); // wrapper5.eq(TjSampling::getTjNum,tjNumber); // tjSamplingService.update(wrapper5); // } // } } } // if (config.equals("Y")) // wrapper.eq(TjSampling::getJyxh,""); wrapper.eq(TjSampling::getTjNum, tjNumber); wrapper.eq(TjSampling::getIsSignFor,isSignFor); wrapper.and(i -> i.isNull(TjSampling::getParentId).or().eq(TjSampling::getIsMerge,1)); // wrapper.eq(TjSampling::getIsPay,1); // if (isSignFor == 1) // wrapper.eq(TjSampling::getIsApply,0); wrapper.orderByDesc(TjSampling::getIsMerge); List list = tjSamplingService.list(wrapper); if (list.isEmpty()){ logger.info("jtNum ->{}",tjNumber); // return AjaxResult.error("未查询到数据,人员未缴费或没有未采样项目"); return AjaxResult.error("参数错误,未查询到数据"); } // for (TjSampling sampling : list) { // TjCustomer customer = customerService.getById(sampling.getCusId()); // TjOrder order = orderService.getOrderByTjNum(sampling.getTjNum()); // if(null !=order)sampling.setCardId(order.getCardId()); // sampling.setCustomer(customer); // } if (list.size() >= 2) { // 进行合并 List stringList = list.stream().map(TjSampling::getId).collect(Collectors.toList()); // log.info("提取id ->{}",stringList); for (String s : stringList) { if (tjSamplingService.isMergeItem(s) != 0) { list.removeIf(item -> Objects.equals(item.getId(), s)); } } String lis_tmh_prefix = configService.selectConfigByKey("make_lis_tmh_prefix"); Map> map = list.stream().filter(i->StrUtil.isNotBlank(i.getSpecimenTypeCode())).collect(Collectors.groupingBy(item -> item.getSpecimenTypeCode())); for (Map.Entry> entry : map.entrySet()) { List entryValue = entry.getValue(); tjSamplingService.mergeCaiYangTran(entryValue.stream().map(TjSampling::getId).collect(Collectors.toList()),lis_tmh_prefix); } } wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TjSampling::getTjNum, tjNumber); wrapper.eq(TjSampling::getIsSignFor,isSignFor); wrapper.and(i -> i.isNull(TjSampling::getParentId).or().eq(TjSampling::getIsMerge,1)); // wrapper.orderByDesc(TjSampling::getIsMerge); wrapper.orderByAsc(TjSampling::getSpecimenTypeCode,TjSampling::getIsMerge); list = tjSamplingService.list(wrapper); for (TjSampling sampling : list) { TjCustomer customer = customerService.getById(sampling.getCusId()); TjOrder order = orderService.getOrderByTjNum(sampling.getTjNum()); if(null !=order)sampling.setCardId(order.getCardId()); sampling.setCustomer(customer); } return AjaxResult.success(list); } @PostMapping("/mergeCaiYang") @ApiOperation(value = "采样登记合并项目接口") public AjaxResult mergeCaiYang(@RequestBody List ids) { String lis_tmh_prefix = configService.selectConfigByKey("make_lis_tmh_prefix"); return tjSamplingService.mergeCaiYangTran(ids,lis_tmh_prefix); } @PostMapping("/chexiaoCaiYang") @ApiOperation(value = "撤销采样登记合并项目接口") @Transactional public AjaxResult chexiaoCaiYang(@RequestBody List ids) { if (null != ids && !ids.isEmpty()) { int pdsfczhbxm = tjSamplingService.pdsfczhbxm(ids); if (pdsfczhbxm != ids.size()) return AjaxResult.error("存在未合并的项目不可撤销!!!"); tjSamplingService.deletedTjSamplingListByHb(ids); tjSamplingService.updateHeBingXm(ids); return AjaxResult.success("撤销成功!!!"); } return AjaxResult.error("请选择你要撤销的项目!!!"); } /** * 导出体检采样管理列表 */ //@PreAuthorize("@ss.hasPermi('sampling:sampling:export')") @Log(title = "体检采样管理", businessType = BusinessType.EXPORT) @PostMapping("/export") @ApiOperation(value = "导出体检采样管理列表") public void export(HttpServletResponse response, TjSampling tjSampling) { List list = tjSamplingService.selectTjSamplingList(tjSampling); ExcelUtil util = new ExcelUtil(TjSampling.class); util.exportExcel(response, list, "体检采样管理数据"); } /** * 获取体检采样管理详细信息 */ //@PreAuthorize("@ss.hasPermi('sampling:sampling:query')") @GetMapping(value = "/{id}") @ApiOperation(value = "获取体检采样管理详细信息") public AjaxResult getInfo(@PathVariable("id") String id) { return success(tjSamplingService.selectTjSamplingById(id)); } /** * 新增体检采样管理 */ //@PreAuthorize("@ss.hasPermi('sampling:sampling:add')") @Log(title = "体检采样管理", businessType = BusinessType.INSERT) @PostMapping @ApiOperation(value = "新增体检采样管理") public AjaxResult add(@RequestBody TjSampling tjSampling) { return toAjax(tjSamplingService.insertTjSampling(tjSampling)); } /** * 修改体检采样管理 */ //@PreAuthorize("@ss.hasPermi('sampling:sampling:edit')") @Log(title = "体检采样管理", businessType = BusinessType.UPDATE) @PutMapping @ApiOperation(value = "修改体检采样管理") public AjaxResult edit(@RequestBody TjSampling tjSampling) { return toAjax(tjSamplingService.updateById(tjSampling)); } /** * 删除体检采样管理 */ //@PreAuthorize("@ss.hasPermi('sampling:sampling:remove')") @Log(title = "体检采样管理", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") @ApiOperation(value = "删除体检采样管理") public AjaxResult remove(@PathVariable String[] ids) { return toAjax(tjSamplingService.deleteTjSamplingByIds(ids)); } /** * 确认采样接口 */ @PostMapping("/confirmSampling") @ApiOperation(value = "确认采样接口") @Transactional public AjaxResult confirmSampling(@RequestBody List ids) { String config = configService.selectConfigByKey("sfkqdyhis"); String mergeRequest = configService.selectConfigByKey("use_lis_pacs_is_auto_merge_request"); return samplingService.confirmApi(ids,config,mergeRequest); } }