| | |
| | | /** |
| | | * 查询类目列表 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('mall:category:list')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:category:list')") |
| | | @GetMapping("/list") |
| | | @ApiOperation(value = "查询类目列表") |
| | | public TableDataInfo list(MallCategory mallCategory) { |
| | |
| | | /** |
| | | * 导出类目列表 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('mall:category:export')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:category:export')") |
| | | @Log(title = "类目", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(HttpServletResponse response, MallCategory mallCategory) { |
| | |
| | | * 获取类目详细信息 |
| | | */ |
| | | @ApiOperation(value = "获取类目详细信息") |
| | | @PreAuthorize("@ss.hasPermi('mall:category:query')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:category:query')") |
| | | @GetMapping(value = "/{id}") |
| | | public AjaxResult getInfo(@PathVariable("id") Long id) { |
| | | return success(mallCategoryService.selectMallCategoryById(id)); |
| | |
| | | * 新增类目 |
| | | */ |
| | | @ApiOperation(value = "新增类目") |
| | | @PreAuthorize("@ss.hasPermi('mall:category:add')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:category:add')") |
| | | @Log(title = "类目", businessType = BusinessType.INSERT) |
| | | @PostMapping |
| | | public AjaxResult add(@RequestBody MallCategory mallCategory) { |
| | |
| | | * 修改类目 |
| | | */ |
| | | @ApiOperation(value = "修改类目") |
| | | @PreAuthorize("@ss.hasPermi('mall:category:edit')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:category:edit')") |
| | | @Log(title = "类目", businessType = BusinessType.UPDATE) |
| | | @PutMapping |
| | | public AjaxResult edit(@RequestBody MallCategory mallCategory) { |
| | |
| | | * 删除类目 |
| | | */ |
| | | @ApiOperation(value = "删除类目") |
| | | @PreAuthorize("@ss.hasPermi('mall:category:remove')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:category:remove')") |
| | | @Log(title = "类目", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public AjaxResult remove(@PathVariable Long[] ids) { |
| | |
| | | /** |
| | | * 查询关键字列表 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('mall:keyword:list')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:keyword:list')") |
| | | @GetMapping("/list") |
| | | public TableDataInfo list(MallKeyword mallKeyword) { |
| | | startPage(); |
| | |
| | | /** |
| | | * 导出关键字列表 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('mall:keyword:export')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:keyword:export')") |
| | | @Log(title = "关键字", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(HttpServletResponse response, MallKeyword mallKeyword) { |
| | |
| | | /** |
| | | * 获取关键字详细信息 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('mall:keyword:query')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:keyword:query')") |
| | | @GetMapping(value = "/{id}") |
| | | public AjaxResult getInfo(@PathVariable("id") Long id) { |
| | | return success(mallKeywordService.selectMallKeywordById(id)); |
| | |
| | | /** |
| | | * 新增关键字 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('mall:keyword:add')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:keyword:add')") |
| | | @Log(title = "关键字", businessType = BusinessType.INSERT) |
| | | @PostMapping |
| | | public AjaxResult add(@RequestBody MallKeyword mallKeyword) { |
| | |
| | | /** |
| | | * 修改关键字 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('mall:keyword:edit')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:keyword:edit')") |
| | | @Log(title = "关键字", businessType = BusinessType.UPDATE) |
| | | @PutMapping |
| | | public AjaxResult edit(@RequestBody MallKeyword mallKeyword) { |
| | |
| | | /** |
| | | * 删除关键字 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('mall:keyword:remove')") |
| | | // @PreAuthorize("@ss.hasPermi('mall:keyword:remove')") |
| | | @Log(title = "关键字", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public AjaxResult remove(@PathVariable Long[] ids) { |
| | |
| | | import com.ltkj.common.annotation.RepeatSubmit; |
| | | import com.ltkj.common.core.domain.AjaxResult; |
| | | import com.ltkj.common.core.domain.entity.SysDept; |
| | | import com.ltkj.common.core.domain.entity.SysRole; |
| | | import com.ltkj.common.core.domain.entity.SysUser; |
| | | import com.ltkj.common.core.redis.RedisCache; |
| | | import com.ltkj.common.enums.DataSourceType; |
| | |
| | | @ApiParam(value = "姓名)") @RequestParam(required = false) String name, |
| | | @ApiParam(value = "开始时间") @RequestParam(required = false) String beginTime, |
| | | @ApiParam(value = "结束时间") @RequestParam(required = false) String endTime, |
| | | @ApiParam(value = "体检类型") @RequestParam(required = false) String tjCategory) { |
| | | @ApiParam(value = "体检类型") @RequestParam(required = false) String tjCategory, |
| | | @ApiParam(value = "体检类型") @RequestParam(required = false) String tcm) { |
| | | // String config = configService.selectConfigByKey("tj_confirm"); |
| | | // DateTime beginTimes = null; |
| | | // DateTime endTimes = null; |
| | |
| | | if (name == null) name = ""; |
| | | if (beginTime == null) beginTime = ""; |
| | | if (endTime == null) endTime = ""; |
| | | return AjaxResult.success(orderService.getCunChuGuoChengCustomerList(tjNumber, page, pageSize, checkStatus, value, beginTime, endTime, name,tjCategory)); |
| | | return AjaxResult.success(orderService.getCunChuGuoChengCustomerList(tjNumber, page, pageSize, checkStatus, value, beginTime, endTime, name,tjCategory,tcm)); |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | @GetMapping("/getRsjList") |
| | | @ApiOperation(value = "总检检查二三级查询接口")//0待1已 |
| | | // @PreAuthorize("@ss.hasPermi('check:check:getList')") |
| | | public AjaxResult getRsjList(@ApiParam(value = "审核状态0待审核1已审核") @RequestParam(required = false) Integer checkStatus, |
| | | @ApiParam(value = "页码数(默认1)") @RequestParam(defaultValue = "1") Integer page, |
| | | @ApiParam(value = "显示条数(默认10)") @RequestParam(defaultValue = "10") Integer pageSize, |
| | | @ApiParam(value = "体检单号") @RequestParam(required = false) String tjNumber, |
| | | @ApiParam(value = "单位") @RequestParam(required = false) Long compId, |
| | | @ApiParam(value = "姓名)") @RequestParam(required = false) String name, |
| | | @ApiParam(value = "开始时间") @RequestParam(required = false) String beginTime, |
| | | @ApiParam(value = "结束时间") @RequestParam(required = false) String endTime, |
| | | @ApiParam(value = "体检类型") @RequestParam(required = false) String tjCategory, |
| | | @ApiParam(value = "体检类型") @RequestParam(required = false) String tcm) { |
| | | |
| | | List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles(); |
| | | String type = "0"; |
| | | if (null != roles && !roles.isEmpty()) { |
| | | List<SysRole> erji = roles.stream().filter(item -> item.getRoleName().contains("二级审核")).collect(Collectors.toList()); |
| | | List<SysRole> sanji = roles.stream().filter(item -> item.getRoleName().contains("三级审核")).collect(Collectors.toList()); |
| | | if (!erji.isEmpty()) type="2"; |
| | | if (!sanji.isEmpty()) type="3"; |
| | | } |
| | | |
| | | String value = String.valueOf(compId); |
| | | if (tjNumber == null) tjNumber = ""; |
| | | if (compId == null) value = ""; |
| | | if (name == null) name = ""; |
| | | if (beginTime == null) beginTime = ""; |
| | | if (endTime == null) endTime = ""; |
| | | return AjaxResult.success(orderService.getEsjCunChuGuoChengCustomerList(tjNumber, page, pageSize, checkStatus, value, |
| | | beginTime, endTime, name,tjCategory,tcm,type)); |
| | | } |
| | | |
| | | } |
| | |
| | | if(sfjysfzh.equalsIgnoreCase("Y")){ |
| | | if(cusIdcard.length()==18){ |
| | | b = MatchUtils.isIdCard(cusIdcard); |
| | | }else { |
| | | return AjaxResult.error("请输入十八位号的证件号!"); |
| | | } |
| | | } |
| | | } |
| | | // else { |
| | | // if(cusIdcard.length()==9){ |
| | | // b = MatchUtils.cardValidate(cusIdcard, tjCustomer.getIdType()); |
| | | // } |
| | | // |
| | | // } |
| | | } else { |
| | | return AjaxResult.error("请选择证件类型"); |
| | | } |
| | | if (!b) return AjaxResult.error("证件号有误"); |
| | | if (!b) return AjaxResult.error("证件号有误,请检查证件号是否有效!"); |
| | | |
| | | |
| | | //判断身份证号格式是否正确 |
| | | if (tjCustomer.getCusPhone().length() != 11) |
| | | return AjaxResult.error("请输入十一位号的手机号!"); |
| | | |
| | | if(sfjysjh.equalsIgnoreCase("Y")){ |
| | | if (!(MatchUtils.isMobileNO(tjCustomer.getCusPhone()))) |
| | | return AjaxResult.error("手机号错误"); |
| | | return AjaxResult.error("手机号错误,请检查手机号是否有效!"); |
| | | } |
| | | |
| | | LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>(); |
| | |
| | | TjCustomer tjCustomer = tjCustomerService.getById(order.getUserId()); |
| | | if (null != tjCustomer) { |
| | | order.setTjCustomerSex(tjCustomer.getCusSex()); |
| | | order.setTjCustomerAge(DateUtil.ageOfNow(tjCustomer.getCusBrithday())); |
| | | if(null !=tjCustomer.getCusBrithday()) |
| | | order.setTjCustomerAge(DateUtil.ageOfNow(tjCustomer.getCusBrithday())); |
| | | order.setTjCustomerName(tjCustomer.getCusName()); |
| | | order.setTjCustomerPhone(tjCustomer.getCusPhone()); |
| | | order.setTjCusIdCard(tjCustomer.getCusIdcard()); |
| | |
| | | TjCustomer tjCustomer = tjCustomerService.getById(order.getUserId()); |
| | | if (null != tjCustomer) { |
| | | order.setTjCustomerSex(tjCustomer.getCusSex()); |
| | | order.setTjCustomerAge(DateUtil.ageOfNow(tjCustomer.getCusBrithday())); |
| | | if(null !=tjCustomer.getCusBrithday()) |
| | | order.setTjCustomerAge(DateUtil.ageOfNow(tjCustomer.getCusBrithday())); |
| | | order.setTjCustomerName(tjCustomer.getCusName()); |
| | | order.setTjCustomerPhone(tjCustomer.getCusPhone()); |
| | | order.setTjCusIdCard(tjCustomer.getCusIdcard()); |
| | |
| | | ExecutorService threadPools = Executors.newFixedThreadPool(cusIds.size()); |
| | | for (String cusId : cusIds) { |
| | | |
| | | // threadPools.execute(new Runnable() { |
| | | // @Override |
| | | // public void run() { |
| | | try { |
| | | getAjaxResults(cusId); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | // } |
| | | // }); |
| | | } |
| | | LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>(); |
| | | wq.in(TjCustomer::getCusIdcard, cusIds); |
| | |
| | | // ExecutorService threadPool = Executors.newFixedThreadPool(list.size()); |
| | | ThreadPoolTaskExecutor executor = threadPoolConfig.threadPoolTaskExecutor(); |
| | | for (Long aLong : list) { |
| | | // threadPool.execute(new Runnable() { |
| | | // @Override |
| | | // public void run() { |
| | | // try { |
| | | // AjaxResult result = getAjaxResult(aLong, sysUser, daoDto.getTjCategory()); |
| | | // threadPool.shutdown(); |
| | | // } catch (IOException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | // }); |
| | | |
| | | Future<AjaxResult> future = executor.submit(new Callable<AjaxResult>() { |
| | | @Override |
| | | public AjaxResult call() throws Exception { |
| | |
| | | if (tjReservation != null) { |
| | | tjOrder.setReservationId(tjReservation.getId()); |
| | | mallOrder = mallOrderService.getOne(new LambdaQueryWrapper<MallOrder>().eq(MallOrder::getReservationId, tjReservation.getId())); |
| | | // if (DateUtil.endOfDay(new Date()).before(tjReservation.getReservationTime())) { |
| | | // return AjaxResult.error("未到预约时间"); |
| | | // } |
| | | // if (DateUtil.endOfDay(tjReservation.getReservationTime()).before(new Date())) { |
| | | // tjReservation.setIsExpire(1); |
| | | // tjReservationService.updateById(tjReservation); |
| | | // return AjaxResult.error("对不起您的预约已超时请重新预约"); |
| | | // } |
| | | if (null != tjReservation.getTeamNo()) tjOrder.setTeamNo(tjReservation.getTeamNo()); |
| | | if (null != tjReservation.getCompanyId()) tjOrder.setFirmId(tjReservation.getCompanyId()); |
| | | if (null != tjReservation.getCompany()) tjOrder.setFirmName(tjReservation.getCompany()); |
| | |
| | | if (StringUtil.isBlank(tjOrder.getFirmId())) { |
| | | tjOrder.setFirmId("0"); |
| | | } |
| | | // |
| | | // tjReservation.setIsExpire(1); |
| | | // tjReservationService.updateById(tjReservation); |
| | | |
| | | //生成体检号 |
| | | // String tjNumber = (sysUser.getUserName() + new SimpleDateFormat("yyMMddHHmmss").format(new Date())); |
| | | // tjNumber = tjNumber.replaceAll(".{6}$", userId.toString().substring(userId.toString().length() - 6)); |
| | | |
| | | |
| | | //获取拼接前缀 |
| | | String makeLisTmhPrefix = configService.selectConfigByKey("make_lis_tmh_prefix"); |
| | | // String tjNumber = (sysUser.getUserName() + idUtils.getTjNumber()); |
| | | // String tjNumber = idUtils.getTjNumber(); |
| | | String sfkqtjhqz = configService.selectConfigByKey("sfkqtjhqz"); |
| | | String makeLisTmhPrefix = ""; |
| | | if(sfkqtjhqz.equalsIgnoreCase("Y")){ |
| | | makeLisTmhPrefix = configService.selectConfigByKey("make_lis_tmh_prefix"); |
| | | } |
| | | |
| | | String tjNumber = idUtils.getNewTjNumberRedisLockAndMysql(); |
| | | if (StringUtil.isNotBlank(makeLisTmhPrefix)) tjNumber = makeLisTmhPrefix + tjNumber; |
| | | |
| | | |
| | | // if (redisCache.hasKey(TJH)) { |
| | | // while (true){ |
| | | // List<String> tjh = redisCache.getCacheList(TJH); |
| | | // if(tjh.contains(tjNumber)){ |
| | | // tjNumber =(sysUser.getUserName() + IdUtils.getTjNumber()); |
| | | // if (StringUtil.isNotBlank(makeLisTmhPrefix)) tjNumber = makeLisTmhPrefix + tjNumber; |
| | | // }else { |
| | | // tjh.add(tjNumber); |
| | | // } |
| | | // } |
| | | // }else { |
| | | // List<String> stringList = tjOrderService. |
| | | // list(new LambdaQueryWrapper<TjOrder>().select(TjOrder::getTjNumber)).stream().map(TjOrder::getTjNumber).collect(Collectors.toList()); |
| | | // stringList.add(tjNumber); |
| | | // redisCache.setCacheList(TJH,stringList); |
| | | // } |
| | | tjOrder.setTjNumber(tjNumber); |
| | | if (null != tjOrder.getPhoto()) { |
| | | File file = new File(tjOrder.getPhoto()); |
| | |
| | | @GetMapping(value = "newgetTransitionList") |
| | | @ApiOperation(value = "最新查询过渡表数据") |
| | | public AjaxResult newgetTransitionList(@RequestParam @ApiParam(value = "客户id") String cusId) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | List<TbTransition> list = transitionService.newgetTransitionList(cusId); |
| | | return AjaxResult.success(list); |
| | | map.put("list", list); |
| | | map.put("tjCategory", transitionService.getTjCategoryByTbTransition(cusId)); |
| | | return AjaxResult.success(map); |
| | | } |
| | | |
| | | @PostMapping(value = "updateTransitionnewPrice") |
| | |
| | | "trim(g.pro_id)=trim(aa.parent_pro_id ) where g.pac_id=#{pacId} AND (g.price_now-aa.ys)>0;") |
| | | List<Map<String,Object>> addTbhuoquxiangmuchajia(@Param("pacId") String pacId, @Param("cusIdCard") String cusIdCard); |
| | | |
| | | |
| | | |
| | | @Select("SELECT DISTINCT b.tj_category FROM tb_transition a JOIN tj_package b ON b.pac_id=a.pac_id " + |
| | | "WHERE a.cus_id=#{cusIdCard} AND ISNULL(a.tj_num)") |
| | | String getTjCategoryByTbTransition(String cusIdCard); |
| | | |
| | | } |
| | |
| | | |
| | | @Select("SELECT count(*) FROM tj_order WHERE tj_number = #{tjNum}") |
| | | int getOrderCountByTjNum(String tjNum); |
| | | |
| | | |
| | | |
| | | //存储过程专用接口(总检) |
| | | List<List<?>> getEsjCunChuGuoChengCustomerList(Map<String,Object> map); |
| | | } |
| | |
| | | BigDecimal getTbTransitionNewPriceByTjNumAndParentId(String tjNum, String proId); |
| | | |
| | | BigDecimal getTbTransitionOrdPriceByTjNumAndParentId(String tjNum, String proId); |
| | | |
| | | String getTjCategoryByTbTransition(String cusIdCard); |
| | | } |
| | |
| | | |
| | | //存储过程专用接口(总检) |
| | | Map<String,Object> getCunChuGuoChengCustomerList(String tjNumber,Integer page,Integer pageSize, |
| | | Integer checkStatus, String compId, String beginTime, String endTime,String tjname,String tjCategory); |
| | | Integer checkStatus, String compId, String beginTime, String endTime,String tjname,String tjCategory,String tcm); |
| | | |
| | | //存储过程专用接口(初审) |
| | | Map<String,Object> getCsCunChuGuoChengCustomerList(String tjNumber,Integer page,Integer pageSize, |
| | |
| | | //存储过程专用接口(初审) |
| | | Map<String,Object> getYxJcList(Integer checkStatus ,String tjNumber,Integer page,Integer pageSize, |
| | | String compId, String beginTime, String endTime,String tjname,String tcm,String deptId); |
| | | |
| | | Map<String,Object> getEsjCunChuGuoChengCustomerList(String tjNumber, Integer page, Integer pageSize, Integer checkStatus, |
| | | String value, String beginTime, String endTime, String name, String tjCategory, String tcm, String type); |
| | | |
| | | } |
| | |
| | | public BigDecimal getTbTransitionOrdPriceByTjNumAndParentId(String tjNum, String proId) { |
| | | return tbTransitionMapper.getTbTransitionOrdPriceByTjNumAndParentId(tjNum,proId); |
| | | } |
| | | |
| | | @Override |
| | | public String getTjCategoryByTbTransition(String cusIdCard) { |
| | | return tbTransitionMapper.getTjCategoryByTbTransition(cusIdCard); |
| | | } |
| | | } |
| | |
| | | |
| | | @Override |
| | | public Map<String,Object> getCunChuGuoChengCustomerList(String tjNumber, Integer page, Integer pageSize, Integer checkStatus, |
| | | String compId, String beginTime, String endTime, String tjname,String tjCategory) { |
| | | String compId, String beginTime, String endTime, String tjname,String tjCategory,String tcm) { |
| | | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("checkStatus",checkStatus); |
| | |
| | | map.put("beginTime",beginTime); |
| | | map.put("endTime",endTime); |
| | | map.put("p_tjCategory",tjCategory); |
| | | map.put("tcm",tcm); |
| | | List<List<?>> list = tjOrderMapper.getCunChuGuoChengCustomerList(map); |
| | | Map<String,Object> map1=new HashMap<>(); |
| | | map1.put("customers",list); |
| | |
| | | map1.put("total",map.get("total")); |
| | | return map1; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String,Object> getEsjCunChuGuoChengCustomerList(String tjNumber, Integer page, Integer pageSize, |
| | | Integer checkStatus, String compId, String beginTime, String endTime, String tjname, |
| | | String tjCategory, String tcm,String type) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("checkStatus",checkStatus); |
| | | map.put("page",page); |
| | | map.put("pageSize",pageSize); |
| | | map.put("tjNumber",tjNumber); |
| | | map.put("compId",compId); |
| | | map.put("tjname",tjname); |
| | | map.put("beginTime",beginTime); |
| | | map.put("endTime",endTime); |
| | | map.put("p_tjCategory",tjCategory); |
| | | map.put("tcm",tcm); |
| | | map.put("type",type); |
| | | List<List<?>> list = tjOrderMapper.getEsjCunChuGuoChengCustomerList(map); |
| | | Map<String,Object> map1=new HashMap<>(); |
| | | map1.put("customers",list); |
| | | map1.put("total",map.get("total")); |
| | | |
| | | return map1; |
| | | } |
| | | } |
| | |
| | | #{beginTime,mode=IN,jdbcType=VARCHAR}, |
| | | #{endTime,mode=IN,jdbcType=VARCHAR}, |
| | | #{p_tjCategory,mode=IN,jdbcType=VARCHAR}, |
| | | #{tcm,mode=IN,jdbcType=VARCHAR}, |
| | | #{total,mode=OUT,jdbcType=INTEGER} |
| | | )} |
| | | </select> |
| | |
| | | )} |
| | | </select> |
| | | |
| | | |
| | | <select id="getEsjCunChuGuoChengCustomerList" parameterType="java.util.Map" statementType="CALLABLE" resultType="java.util.Map"> |
| | | {call tj_esjcheck_list( |
| | | #{checkStatus,mode=IN,jdbcType=INTEGER}, |
| | | #{page,mode=IN,jdbcType=INTEGER}, |
| | | #{pageSize,mode=IN,jdbcType=INTEGER}, |
| | | #{tjNumber,mode=IN,jdbcType=VARCHAR}, |
| | | #{compId,mode=IN,jdbcType=VARCHAR}, |
| | | #{tjname,mode=IN,jdbcType=VARCHAR}, |
| | | #{beginTime,mode=IN,jdbcType=VARCHAR}, |
| | | #{endTime,mode=IN,jdbcType=VARCHAR}, |
| | | #{p_tjCategory,mode=IN,jdbcType=VARCHAR}, |
| | | #{tcm,mode=IN,jdbcType=VARCHAR}, |
| | | #{type,mode=IN,jdbcType=VARCHAR}, |
| | | #{total,mode=OUT,jdbcType=INTEGER} |
| | | )} |
| | | </select> |
| | | |
| | | </mapper> |