ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java
@@ -1032,7 +1032,8 @@ StringBuilder builder = new StringBuilder(); if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue; builder.append(" (").append(index).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n"); builder.append(" (").append(index).append(")").append(detail.getJcxm()).append(": ") .append(result.replaceAll("\n", "").trim()).append("\n"); index++; result = builder.toString(); @@ -1192,7 +1193,8 @@ if (StrUtil.isNotBlank(result)) { StringBuilder builder = new StringBuilder(); if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue; builder.append(" (").append(index1).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n"); builder.append(" (").append(index1).append(")").append(detail.getJcxm()).append(": ") .append(result.replaceAll("\n", "").trim()).append("\n"); index1++; result = builder.toString(); ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java
@@ -1652,13 +1652,14 @@ @GetMapping("/getzongjianyishengchakanyichangxiangmu") @ApiOperation(value = "总检查看异常项目接口") public AjaxResult getzongjianyishengchakanyichangxiangmu(@RequestParam String tjNum) { try { if (StrUtil.isNotBlank(tjNum)) { TjOrder one = orderService.getOrderByTjNum(tjNum); if (one == null) { return AjaxResult.error("暂无数据!!"); } yichangxiangmu(tjNum); LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>(); wq.eq(TjOrderYcxm::getTjh, tjNum); List<TjOrderYcxm> list = ycxmService.list(wq); @@ -1670,9 +1671,32 @@ } } return AjaxResult.error(); } catch (Exception ex) { //throw new RuntimeException(ex); log.error(ex.getMessage()); return AjaxResult.error(); } } private static AjaxResult getOrderYcxmList(List<TjOrderYcxm> list) { try { List<Map<String, Object>> maps = getYcxmMapList(list); if (!maps.isEmpty()) { List<Map<String, Object>> collect1 = maps.stream() .sorted((map1, map2) -> map2.get("proName").toString().compareTo(map1.get("proName").toString())) .collect(Collectors.toList()); return AjaxResult.success(collect1); } return AjaxResult.success(maps); } catch (Exception ex) { // throw new RuntimeException(ex); log.error(ex.getMessage()); return AjaxResult.error(); } } private static List<Map<String, Object>> getYcxmMapList(List<TjOrderYcxm> list) { try { Map<String, List<TjOrderYcxm>> map = list.stream().collect(Collectors.groupingBy(TjOrderYcxm::getParentName)); List<Map<String, Object>> maps = new ArrayList<>(); for (Map.Entry<String, List<TjOrderYcxm>> entry : map.entrySet()) { @@ -1706,37 +1730,17 @@ parent.put("sone", dels); maps.add(parent); } // List<Map<String, Object>> mapList = zongjianyishengchakanyichangxiangmu(tjNum); // List<Map<String, Object>> collect = mapList.stream() // .filter(b -> maps.stream() // .noneMatch(a -> a.get("proName").equals(b.get("proName")))) // 过滤掉在 maps 中存在的相同元素 // .collect(Collectors.toList()); // if(!collect.isEmpty()){ // maps.addAll(collect); // } if (!maps.isEmpty()) { List<Map<String, Object>> collect1 = maps.stream() .sorted((map1, map2) -> map2.get("proName").toString().compareTo(map1.get("proName").toString())) .collect(Collectors.toList()); return AjaxResult.success(collect1); return maps; } catch (NumberFormatException ex) { // throw new RuntimeException(ex); log.error(ex.getMessage()); return null; } return AjaxResult.success(maps); } @GetMapping("/delzongjianyishengchakanyichangxiangmu") @ApiOperation(value = "总检删除异常项目接口") public AjaxResult delzongjianyishengchakanyichangxiangmu(@RequestParam String id) { ycxmService.removeById(id); return AjaxResult.success(); } private AjaxResult zongjianyishengchakanyichangxiangmu(String tjNumber) { List<Map<String, Object>> list = new ArrayList<>(); try { List<TjOrderYcxm> tjOrderYcxms = new ArrayList<>(); TjOrder order = orderService.getOrderByTjNum(tjNumber); if (null != order) { @@ -1800,9 +1804,79 @@ dels.add(tjOrderDetail); } } if (!dels.isEmpty()) { parent.put("proName", remark.getProName()); parent.put("jyjc", remark.getJyjc()); parent.put("sone", dels); list.add(parent); } } } if (!tjOrderYcxms.isEmpty()) { Collections.reverse(tjOrderYcxms); return getOrderYcxmList(tjOrderYcxms); } } } return AjaxResult.success(list); } catch (Exception ex) { // throw new RuntimeException(ex); log.error(ex.getMessage()); return AjaxResult.success(list); } } private void yichangxiangmu(String tjNumber) { try { List<TjOrderYcxm> tjOrderYcxmList= ycxmService.selectListByTjh(tjNumber); if(null !=tjOrderYcxmList && !tjOrderYcxmList.isEmpty()){ List<Map<String, Object>> list = new ArrayList<>(); TjOrder order = orderService.getOrderByTjNum(tjNumber); if (null != order) { List<TjOrderRemark> remarkList = orderRemarkService.getzongjianyishengchakanyichangxiangmu(tjNumber); List<TjOrderDetail> tjOrderDetails = detailService.getzongjianyishengchakanyichangxiangmu(tjNumber); if (null != remarkList && !remarkList.isEmpty()) { for (TjOrderRemark remark : remarkList) { Map<String, Object> parent = new HashMap<>(); if (null != tjOrderDetails && !tjOrderDetails.isEmpty()) { List<TjOrderDetail> dels = new ArrayList<>(); for (TjOrderDetail tjOrderDetail : tjOrderDetails) { if (remark.getProsId().equals(tjOrderDetail.getProsId())) { if (null != tjOrderDetail.getProId() && null != tjOrderDetail.getYcbz()) { if (!tjOrderDetail.getDeptId().equals("2")) { List<Map<String, Object>> maps = rulesService.getyichangxiangmujianyiguize(tjOrderDetail.getProId().toString() , tjOrderDetail.getProName().replaceAll("[((][^))]*[))]", "") .replaceAll("[ 测定检测]", "").replaceAll("\\[.*?\\]", ""), tjOrderDetail.getYcbz().replaceAll(" ", ""), tjNumber , tjOrderDetail.getProName().replaceAll("[((][^))]*[\u4e00-\u9fa5]+[^))]*[))]", "") .replaceAll("[ 测定检测]", "").replaceAll("\\[.*?\\]", "") , tjOrderDetail.getProResult()); if (null != maps && !maps.isEmpty()) { tjOrderDetail.setAdvices(maps); } } else { String[] split = tjOrderDetail.getProResult().split("。|,|,"); List<Map<String, Object>> mapList = new ArrayList<>(); for (String s : split) { s = s.replaceAll("\n", ""); Map<String, Object> maps = tjProAdvicerulesService.getyichangxiangmujianyiguizeJianCha(remark.getKs(), s, "0"); if (null != maps && !maps.isEmpty()) { Object bt = maps.get("bt"); Object nr = maps.get("nr"); if (null != bt || null != nr) mapList.add(maps); } } tjOrderDetail.setAdvices(mapList); } } dels.add(tjOrderDetail); } } if (!dels.isEmpty()) { parent.put("proName", remark.getProName()); @@ -1812,11 +1886,45 @@ } } } } } List<Map<String, Object>> maps = getYcxmMapList(tjOrderYcxmList); List<Map<String, Object>> collect = list.stream() .filter(b -> maps.stream() .noneMatch(a -> a.get("proName").equals(b.get("proName")))) // 过滤掉在 maps 中存在的相同元素 .collect(Collectors.toList()); if(!collect.isEmpty()){ for (Map<String, Object> map : collect) { for (TjOrderDetail detail : (List<TjOrderDetail>) map.get("sone")) { TjOrderYcxm ycxm = new TjOrderYcxm(); ycxm.setTjh(tjNumber); ycxm.setParentName(map.get("proName").toString()); ycxm.setJcxm(detail.getProName()); ycxm.setJcjg(detail.getProResult()); ycxm.setCkfw(detail.getStanId()); ycxm.setDw(detail.getProAdvice()); ycxm.setJynr(JSONUtil.toJsonStr(detail.getAdvices())); ycxm.setJyjc(map.get("jyjc").toString()); ycxmService.save(ycxm); } } return AjaxResult.success(list); } } } catch (Exception ex) { log.error(ex.getMessage()); } } @GetMapping("/delzongjianyishengchakanyichangxiangmu") @ApiOperation(value = "总检删除异常项目接口") public AjaxResult delzongjianyishengchakanyichangxiangmu(@RequestParam String id) { ycxmService.removeById(id); return AjaxResult.success(); } @GetMapping("/chushenyemianchakanxiangmujieguo") @ApiOperation(value = "初审页面查看项目结果接口") ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjOrderController.java
@@ -1351,20 +1351,23 @@ // 查询 对接Lis、Pacs申请如果类型包含在配置内则使用对接lis、pacs //导入人员是否收费 String drrysfsf = configService.selectConfigByKey("drrysfsf"); if (lisApiMethod.isUseLisAndPacsRegister(tjOrder)) { log.info("签到登记进入未收费方法"); // 这是上面个人方法引入数据 tjFlowingWater.setPayStasus(1L); if(StringUtil.isNotBlank(drrysfsf) && drrysfsf.equalsIgnoreCase("Y")){ if(null != tjReservation){ return isUseLisAndPacsRegister(tjOrder, tjCustomer, tjReservation, tjFlowingWater, sysUser, discount, tjNumber); }else { newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater); tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber())); remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString()); List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber()); xdPictureService.saveBatch(xdPictureList); List<TjOrderDetail> detailList = tjOrderDetailService.getCaiYangDengJi(tjOrder.getOrderId()); log.info("签到登记:采样数据查询个数"+detailList.size()); addCaiYangDengJi(detailList, !detailList.isEmpty(), tjOrder, sysUser, null); AjaxResult error = isRequestCommonHisApi(tjOrder, tjCustomer, tjFlowingWater); if (error != null) return error; return AjaxResult.success(tjNumber); } } return isUseLisAndPacsRegister(tjOrder, tjCustomer, tjReservation, tjFlowingWater, sysUser, discount, tjNumber); } else { newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater); AjaxResult error = isRequestCommonHisApi(tjOrder, tjCustomer, tjFlowingWater); @@ -1380,6 +1383,66 @@ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error(); } private AjaxResult isUseLisAndPacsRegister(TjOrder tjOrder, TjCustomer tjCustomer, TjReservation tjReservation, TjFlowingWater tjFlowingWater, SysUser sysUser, BigDecimal discount, String tjNumber) { log.info("签到登记进入未收费方法"); // 这是上面个人方法引入数据 tjFlowingWater.setPayStasus(1L); newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater); tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber())); remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString()); List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber()); xdPictureService.saveBatch(xdPictureList); List<TjOrderDetail> detailList = tjOrderDetailService.getCaiYangDengJi(tjOrder.getOrderId()); log.info("签到登记:采样数据查询个数"+detailList.size()); addCaiYangDengJi(detailList, !detailList.isEmpty(), tjOrder, sysUser, null); return AjaxResult.success(tjNumber); } public void newSaveextracted(TjOrder tjOrder, TjCustomer tjCustomer, BigDecimal discount, SysUser sysUser, TjReservation tjReservation, TjFlowingWater tjFlowingWater) { tjAskMedicalHistoryService.updateTjAskMedicalHistoryByCusId(tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjCustomer.getCusId())); if (null != tjOrder.getTjCategory() && tjOrder.getTjCategory().equals("13")) { tjOrderDetailService.saveJSYTjOrderDetailsByCusId(tjCustomer.getCusIdcard(), String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), tjOrder.getCardId(), String.valueOf(tjFlowingWater.getTjSerialNumber())); } else { tjOrderDetailService.saveTjOrderDetailsByCusId(tjCustomer.getCusIdcard(), String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), tjOrder.getCardId()); } tjOrderDetailService.saveTjPureToneTesByCusId(tjCustomer.getCusIdcard(), tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), tjOrder.getCardId()); //添加remark表数据 if (null != tjOrder.getTjCategory() && tjOrder.getTjCategory().equals("13")) { remarkService.saveJSYTjOrderRemarkByOrderId(tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjOrder.getOrderId())); } else { remarkService.saveTjOrderRemarkByOrderId(tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjOrder.getOrderId())); } //判断是否交钱 if ("1".equals(tjOrder.getTjType())) { if (null != tjReservation && tjReservation.getPayType() == 1) { tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber())); remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString()); List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber()); xdPictureService.saveBatch(xdPictureList); } } if (tjFlowingWater.getPayStasus() == 1L) { tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber())); tjFlowingWater.setPaidIn(tjOrder.getTjFlowingWater().getPaidIn()); tjFlowingWater.setCopeWith(tjOrder.getTjFlowingWater().getCopeWith()); tjFlowingWater.setPayType(4L); tjFlowingWaterService.updateById(tjFlowingWater); remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString()); // asyncService.addTjChargingStandard(tjOrder, transitionService.getTbTransitionListByCusId(tjCustomer.getCusIdcard(), tjOrder.getCardId()), sysUser); List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber()); xdPictureService.saveBatch(xdPictureList); } } private AjaxResult isRequestCommonHisApi(TjOrder tjOrder, TjCustomer tjCustomer, TjFlowingWater tjFlowingWater) { String s = configService.selectConfigByKey("is_request_common_his_api"); @@ -2836,50 +2899,6 @@ map.put("huizong", huiZong); map.put("info", info); return AjaxResult.success().put("data", map); } public void newSaveextracted(TjOrder tjOrder, TjCustomer tjCustomer, BigDecimal discount, SysUser sysUser, TjReservation tjReservation, TjFlowingWater tjFlowingWater) { tjAskMedicalHistoryService.updateTjAskMedicalHistoryByCusId(tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjCustomer.getCusId())); if (null != tjOrder.getTjCategory() && tjOrder.getTjCategory().equals("13")) { tjOrderDetailService.saveJSYTjOrderDetailsByCusId(tjCustomer.getCusIdcard(), String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), tjOrder.getCardId(), String.valueOf(tjFlowingWater.getTjSerialNumber())); } else { tjOrderDetailService.saveTjOrderDetailsByCusId(tjCustomer.getCusIdcard(), String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), tjOrder.getCardId()); } tjOrderDetailService.saveTjPureToneTesByCusId(tjCustomer.getCusIdcard(), tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), tjOrder.getCardId()); //添加remark表数据 if (null != tjOrder.getTjCategory() && tjOrder.getTjCategory().equals("13")) { remarkService.saveJSYTjOrderRemarkByOrderId(tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjOrder.getOrderId())); } else { remarkService.saveTjOrderRemarkByOrderId(tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjOrder.getOrderId())); } //判断是否交钱 if ("1".equals(tjOrder.getTjType())) { if (null != tjReservation && tjReservation.getPayType() == 1) { tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber())); remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString()); List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber()); xdPictureService.saveBatch(xdPictureList); } } if (tjFlowingWater.getPayStasus() == 1L) { tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber())); tjFlowingWater.setPaidIn(tjOrder.getTjFlowingWater().getPaidIn()); tjFlowingWater.setCopeWith(tjOrder.getTjFlowingWater().getCopeWith()); tjFlowingWater.setPayType(4L); tjFlowingWaterService.updateById(tjFlowingWater); remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString()); // asyncService.addTjChargingStandard(tjOrder, transitionService.getTbTransitionListByCusId(tjCustomer.getCusIdcard(), tjOrder.getCardId()), sysUser); List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber()); xdPictureService.saveBatch(xdPictureList); } } ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjProAdvicerulesController.java
@@ -45,7 +45,7 @@ /** * 查询体检项目建议规则新表列表 */ @PreAuthorize("@ss.hasPermi('hosp:advicerules:list')") // @PreAuthorize("@ss.hasPermi('hosp:advicerules:list')") @GetMapping("/list") @ApiOperation(value = "查询体检项目建议规则新表列表") public TableDataInfo list(TjProAdvicerules tjProAdvicerules) { @@ -57,7 +57,7 @@ /** * 导出体检项目建议规则新表列表 */ @PreAuthorize("@ss.hasPermi('hosp:advicerules:export')") // @PreAuthorize("@ss.hasPermi('hosp:advicerules:export')") @Log(title = "体检项目建议规则新表", businessType = BusinessType.EXPORT) @PostMapping("/export") @ApiOperation(value = "导出体检项目建议规则新表列表") @@ -109,7 +109,7 @@ /** * 获取体检项目建议规则新表详细信息 */ @PreAuthorize("@ss.hasPermi('hosp:advicerules:query')") // @PreAuthorize("@ss.hasPermi('hosp:advicerules:query')") @GetMapping(value = "/{id}") @ApiOperation(value = "获取体检项目建议规则新表详细信息") public AjaxResult getInfo(@PathVariable("id") Long id) { @@ -119,7 +119,7 @@ /** * 新增体检项目建议规则新表 */ @PreAuthorize("@ss.hasPermi('hosp:advicerules:add')") // @PreAuthorize("@ss.hasPermi('hosp:advicerules:add')") @Log(title = "体检项目建议规则新表", businessType = BusinessType.INSERT) @PostMapping @ApiOperation(value = "新增体检项目建议规则新表") @@ -137,7 +137,7 @@ /** * 修改体检项目建议规则新表 */ @PreAuthorize("@ss.hasPermi('hosp:advicerules:edit')") // @PreAuthorize("@ss.hasPermi('hosp:advicerules:edit')") @Log(title = "体检项目建议规则新表", businessType = BusinessType.UPDATE) @PutMapping @ApiOperation(value = "修改体检项目建议规则新表") ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjRulesController.java
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjOrderYcxmMapper.java
@@ -4,6 +4,9 @@ import com.ltkj.hosp.domain.TjOrderYcxm; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; /** * ClassName: TjOrderYcxmMapper <br/> @@ -17,4 +20,7 @@ @Delete("DELETE FROM tj_order_ycxm WHERE tjh=#{tjh}") void delOrderYcXmJyByTjh(String tjh); @Select("select * FROM tj_order_ycxm WHERE tjh=#{tjNumber}") List<TjOrderYcxm> selectListByTjh(String tjNumber); } ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjOrderYcxmService.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ltkj.hosp.domain.TjOrderYcxm; import java.util.List; /** * ClassName: TjOrderYcxmService <br/> * Description: <br/> @@ -13,4 +15,6 @@ public interface TjOrderYcxmService extends IService<TjOrderYcxm> { void delOrderYcXmJyByTjh(String tjh); List<TjOrderYcxm> selectListByTjh(String tjNumber); } ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjOrderYcxmServiceImpl.java
@@ -7,6 +7,8 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Collections; import java.util.List; /** * ClassName: TjOrderYcxmServiceImpl <br/> @@ -24,4 +26,9 @@ public void delOrderYcXmJyByTjh(String tjh) { mapper.delOrderYcXmJyByTjh(tjh); } @Override public List<TjOrderYcxm> selectListByTjh(String tjNumber) { return mapper.selectListByTjh(tjNumber); } }