SAP-ABAP-企业微信:ZCSM37-后台JOB异常检查主动推送企业微信群

news2024/12/27 1:37:33

场景:异常JOB主动推送企业微信群 (企业微信机器人可百度创建,注意群不能有企业外的人员,否则接口无效)
在这里插入图片描述
在这里插入图片描述


  • 事务代码:ZSM37_CHECK
  • 程序名称:ZSM37_CHECK
  • 程序目的: ZCSM37-后台JOB异常检查
  • 自建表:
  • 开发人员:
    *(修改日志)--------------------------------------------------------
  • 日志号 修改人 修改时间 修改说明 传输号码

  • 001

REPORT zsm37_check.

======================================================================

  • INCLUDE
    ======================================================================
    INCLUDE zsm37_check_top.
    INCLUDE zsm37_check_f01.

======================================================================

  • AT SELECTION-SCREEN.
    ======================================================================
    AT SELECTION-SCREEN OUTPUT.

======================================================================

  • INITIALIZATION
    ======================================================================
    INITIALIZATION.

======================================================================

  • START-OF-SELECTION.
    ======================================================================
    START-OF-SELECTION.

IF p_mins IS INITIAL.
p_mins = 60.
ENDIF.

PERFORM pfm_get_data.
PERFORM pfr_display_alv.

======================================================================

  • END-OF-SELECTION.
    ======================================================================
    END-OF-SELECTION.

&---------------------------------------------------------------------
*& 包含 ZSM37_CHECK_TOP
&---------------------------------------------------------------------

TABLES:tbtco,tbtcp.

DATA: BEGIN OF gt_alv OCCURS 0,
light(4) TYPE c, " 标识
jobname TYPE tbtco-jobname,
progname TYPE progname,
variant TYPE variant,
sdluname TYPE tbtco-sdluname,
sdldate TYPE tbtco-sdldate,
sdltime TYPE tbtco-sdltime,

    date        TYPE tbtco-sdldate,
    time        TYPE tbtco-sdltime,

    prdmins     TYPE tbtco-prdmins,
    prdhours    TYPE tbtco-prdhours,
    prddays     TYPE tbtco-prddays,
    prdweeks    TYPE tbtco-prdweeks,
    prdmonths   TYPE tbtco-prdmonths,
    pl          TYPE char100,
    flag1       TYPE c,
    flag2       TYPE c,
  •    min         TYPE i,
      min_c       TYPE char100,
    
      "当前检查时间
      datum_check TYPE sy-datum,
      uzeit_check TYPE sy-uzeit,
    
    END OF gt_alv.
    

DATA:gv_zuserid TYPE ztxnth-zuserid. "二级账号
DATA:it_raw TYPE truxs_t_text_data.
DATA: gs_layout TYPE lvc_s_layo,
gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat,
stylelin TYPE lvc_s_styl,
alv_grid TYPE REF TO cl_gui_alv_grid.
CONSTANTS: cos_green_light LIKE dv70a-statusicon VALUE ‘@08@’, "绿灯
cos_yellow_light LIKE dv70a-statusicon VALUE ‘@09@’, "黄灯
cos_red_light LIKE dv70a-statusicon VALUE ‘@0A@’. "红灯
DATA: gt_events TYPE slis_t_event, "事件
gs_events LIKE LINE OF gt_events.

DATA:lv_s TYPE i,
lv_e TYPE i.

RANGES:r_date FOR sy-datum,
r_time FOR sy-uzeit.
DEFINE add_field.
gs_fieldcat-FIELDNAME = &1.
gs_fieldcat-scrtext_l = &2.
gs_fieldcat-EDIT = &3.
gs_fieldcat-HOTSPOT = &4.
gs_fieldcat-CHECKBOX = &5.
gs_fieldcat-REF_FIELD = &6.
gs_fieldcat-REF_TABLE = &7.
gs_fieldcat-ICON = &8.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.

END-OF-DEFINITION.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002 .
SELECT-OPTIONS:s_job FOR tbtco-jobname ,
s_uname FOR tbtco-sdluname,
" s_date FOR tbtco-sdlstrtdt ,

  •           s_ser FOR tbtco-reaxserver
             s_pname FOR tbtcp-progname
             .
    

PARAMETERS:p_mins TYPE n LENGTH 5 DEFAULT ‘60’ NO-DISPLAY.

PARAMETERS:p_sed AS CHECKBOX.

SELECTION-SCREEN END OF BLOCK b2.

&---------------------------------------------------------------------
*& 包含 ZSM37_CHECK_F01
&---------------------------------------------------------------------
&---------------------------------------------------------------------
*& Form PFM_GET_DATA
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM pfm_get_data .

"R 活动的(运行中)
"Y 就绪的
"P 已调度的
"S 已释放
"A 已取消(出错终止)
"F 已完成(结束)
"Z Released/Susp.(无中文)

DATA:lt_ztsm37 TYPE TABLE OF ztsm37,
ls_ztsm37 TYPE ztsm37.

DATA:lv_datum_check TYPE sy-datum.
DATA:lv_uzeit_check TYPE sy-uzeit.

"当前检查时间
lv_datum_check = sy-datum.
lv_uzeit_check = sy-uzeit.

"获取已释放状态的JOB和日期
SELECT
jobname,
sdldate,
sdltime,
sdluname,
prdmins,
prdhours,
prddays,
prdweeks,
prdmonths,
status
INTO TABLE @DATA(lt_job)
FROM tbtco
WHERE status = ‘S’ "S 已释放
AND periodic = ‘X’"周期性
AND authckman = @sy-mandt
AND jobname IN @s_job
AND sdluname IN @s_uname.

SORT lt_job BY jobname.
DELETE ADJACENT DUPLICATES FROM lt_job COMPARING jobname.

"更新自建表数据
CLEAR:lt_ztsm37,ls_ztsm37.
LOOP AT lt_job INTO DATA(ls_job).

"获取最后一次执行时间
SELECT SINGLE
MAX( strttime ) AS strttime,
strtdate,
jobname
FROM tbtco
INTO @DATA(ls_job_max)
      WHERE status IN ('R','F')"R 活动的(运行中) "F 已完成(结束)
      AND periodic = 'X'"周期性
      AND jobname = @ls_job-jobname
      AND authckman = @sy-mandt
      AND strtdate = (  SELECT MAX( strtdate ) AS strtdate
      FROM tbtco
      WHERE status IN ('R','F')
      AND periodic = 'X'"周期性
      AND jobname = @ls_job-jobname
      AND authckman = @sy-mandt
      GROUP BY jobname
      )
      GROUP BY strtdate ,jobname.
IF sy-subrc = 0.
  ls_job-sdldate = ls_job_max-strtdate.
  ls_job-sdltime = ls_job_max-strttime.

ELSE.
  CLEAR:ls_job-sdldate,
        ls_job-sdltime.

ENDIF.

MOVE-CORRESPONDING ls_job TO ls_ztsm37.

ls_ztsm37-zcjrq = sy-datum.
APPEND ls_ztsm37 TO lt_ztsm37.

MODIFY lt_job FROM ls_job.
CLEAR:ls_ztsm37,ls_job.

ENDLOOP.

IF lt_ztsm37[] IS NOT INITIAL.
MODIFY ztsm37 FROM TABLE lt_ztsm37.
IF sy-subrc = 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDIF.

"获取前一天的已释放JOB
DATA:lv_datum TYPE sy-datum.
lv_datum = sy-datum - 1.
SELECT
*
FROM ztsm37
INTO CORRESPONDING FIELDS OF TABLE @lt_ztsm37
WHERE jobname IN @s_job
AND sdluname IN @s_uname
AND zcjrq = @lv_datum.

"检查已释放状态是否存在
LOOP AT lt_ztsm37 INTO ls_ztsm37.

CLEAR gt_alv.
MOVE-CORRESPONDING ls_ztsm37 TO gt_alv.

READ TABLE lt_job INTO ls_job WITH KEY jobname = ls_ztsm37-jobname BINARY SEARCH.
IF sy-subrc <> 0.
  gt_alv-light = cos_red_light.
  gt_alv-flag1 = 'X'.
ELSE.
  gt_alv-light = cos_green_light.
ENDIF.

APPEND gt_alv.

ENDLOOP.

"已释放JOB执行频率检查
LOOP AT lt_job INTO ls_job.
READ TABLE gt_alv WITH KEY jobname = ls_job-jobname .
IF sy-subrc <> 0.
MOVE-CORRESPONDING ls_job TO gt_alv.
APPEND gt_alv.
ENDIF.
ENDLOOP.

IF gt_alv[] IS NOT INITIAL.
"获取JOB名称对应的程序和变式
SELECT DISTINCT
jobname,
progname,
variant
FROM tbtcp
INTO TABLE @DATA(lt_tbtcp)
FOR ALL ENTRIES IN @gt_alv
WHERE jobname = @gt_alv-jobname
AND progname IN @s_pname.
SORT lt_tbtcp BY jobname.
ENDIF.

LOOP AT gt_alv.

  • "获取最后一次执行时间
    DATA:lv_date LIKE p0001-begda,
    lv_months LIKE t5a4a-dlymo.
"JOB名称对应的程序名称&&变式
READ TABLE lt_tbtcp INTO DATA(ls_tbtcp) WITH KEY jobname = gt_alv-jobname BINARY SEARCH.
IF sy-subrc = 0.
  gt_alv-progname = ls_tbtcp-progname.
  gt_alv-variant = ls_tbtcp-variant.
ELSE.
  DELETE gt_alv WHERE jobname = gt_alv-jobname.
  CONTINUE.
ENDIF.

IF gt_alv-sdldate IS INITIAL.
  gt_alv-light = cos_red_light.
  gt_alv-flag1 = 'X'.

ELSE.

  lv_date = gt_alv-sdldate.
  lv_months = gt_alv-prdmonths.

  "计算下次执行日期
  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      date      = lv_date
      days      = '00'
      months    = lv_months
      signum    = '+'
      years     = '00'
    IMPORTING
      calc_date = gt_alv-date.

  gt_alv-date = gt_alv-date + gt_alv-prddays + gt_alv-prdweeks * 7.

  "计算下次执行时间
  DATA:lv_prdmins TYPE i  . " 一项批作业的持续时期(以分钟计算)
  lv_prdmins = gt_alv-prdmins + ( gt_alv-prdhours * 60 * 60 ).

  IF lv_prdmins > 86400.                                "一天等于86400秒
    gt_alv-date =  gt_alv-date + 1.
  ENDIF.

  gt_alv-time = gt_alv-sdltime + lv_prdmins.

  IF gt_alv-date < lv_datum_check.
    gt_alv-light = cos_red_light.
    gt_alv-flag2 = 'X'.

  ELSEIF gt_alv-date = lv_datum_check.
    IF gt_alv-time < lv_uzeit_check.
      gt_alv-light = cos_red_light.
      gt_alv-flag2 = 'X'.
    ENDIF.
  ENDIF.

ENDIF.

gt_alv-datum_check = lv_datum_check.
gt_alv-uzeit_check = lv_uzeit_check.

"频率显示
  • prdmonths type tbtco-prdmonths,
    IF gt_alv-prdmonths IS NOT INITIAL.
    IF gt_alv-prdmonths = ‘1’.
    gt_alv-pl = ‘每月’.
    ELSE.
    gt_alv-pl = gt_alv-pl && gt_alv-prdmonths && ‘月’.
    ENDIF.
    ENDIF.

  • prdweeks type tbtco-prdweeks,
    IF gt_alv-prdweeks IS NOT INITIAL.
    IF gt_alv-prdweeks = ‘1’.
    gt_alv-pl = ‘每周’.
    ELSE.
    gt_alv-pl = gt_alv-pl && gt_alv-prdweeks && ‘周’.
    ENDIF.
    ENDIF.

  • prddays type tbtco-prddays,
    IF gt_alv-prddays IS NOT INITIAL .
    IF gt_alv-prddays = ‘1’.
    gt_alv-pl = ‘每天’.
    ELSE.
    gt_alv-pl = gt_alv-pl && gt_alv-prddays && ‘天’.
    ENDIF.
    ENDIF.

  • prdhours type tbtco-prdhours,
    IF gt_alv-prdhours IS NOT INITIAL.
    IF gt_alv-prdhours = ‘1’.
    gt_alv-pl = ‘每小时’.
    ELSE.
    gt_alv-pl = gt_alv-pl && gt_alv-prdhours && ‘小时’.
    ENDIF.
    ENDIF.

  • prdmins type tbtco-prdmins,
    IF gt_alv-prdmins IS NOT INITIAL.
    IF gt_alv-prdmins = ‘1’.
    gt_alv-pl = ‘每分钟’.
    ELSE.
    gt_alv-pl = gt_alv-pl && gt_alv-prdmins && ‘分钟’.
    ENDIF.
    ENDIF.

"计算超时间-分钟
"https://blog.csdn.net/FQHX_116/article/details/128150602?spm=1001.2014.3001.5501 源码
IF gt_alv-flag2 = 'X'.
  CALL FUNCTION 'ZFM_DATE_DIFFERENCE'
    EXPORTING
      iv_date_beg = gt_alv-sdldate
      iv_time_beg = gt_alv-sdltime
      iv_date_end = lv_datum_check
      iv_time_end = lv_uzeit_check
    IMPORTING
      ev_message  = gt_alv-min_c.

ELSEIF  gt_alv-flag1 = 'X'.
  gt_alv-min_c = '未执行'.

ENDIF.

IF p_sed = 'X'.

  IF gt_alv-light = cos_red_light.

    DATA:lv_json     TYPE string,
         lv_message  TYPE  char100,
         lv_status_c TYPE  char1.

    "推送企业微信格式
  • lv_json = ‘{ “msgtype”: “markdown”, “markdown”: { “content”: "### 异常JOB通知\n >JOB名称:’ &&

  • 'XXXXXX \n 程序名称:XXXXXX \n 最后一次执行时间:\n 频率:<font color=“info”>5分钟 \n ’ &&

  • ‘距最后一次执行时间: <font color=“warning”>50分钟 \n 检查时间:" }’.

    “推送企业微信格式
    lv_json = ‘{ “msgtype”: “markdown”, “markdown”: ’ &&
    ‘{ “content”: "### 异常JOB通知\n >JOB名称:’ && gt_alv-jobname &&
    ’ \n 程序名称:’ && gt_alv-progname &&
    ’ \n 变式名称:’ && gt_alv-variant &&
    ’ \n 最后一次执行时间:’
    && gt_alv-sdldate+0(4) &&‘/’&& gt_alv-sdldate+4(2) &&‘/’&& gt_alv-sdldate+6(2) && ‘,’
    && gt_alv-sdltime+0(2) &&‘:’&& gt_alv-sdltime+2(2) &&‘:’&& gt_alv-sdltime+4(2) &&
    ’ \n 频率:<font color=“info”>‘&& gt_alv-pl &&’ \n ’ &&
    ‘距最后一次执行时间: <font color=“warning”>’ && gt_alv-min_c && ' ‘&&
    ’ \n 检查时间:’
    && gt_alv-datum_check+0(4) &&’/‘&& gt_alv-datum_check+4(2) &&’/‘&& gt_alv-datum_check+6(2) && ‘,’
    && gt_alv-uzeit_check+0(2) &&’:‘&& gt_alv-uzeit_check+2(2) &&’:'&& gt_alv-uzeit_check+4(2) &&
    '” }'.

"https://blog.csdn.net/FQHX_116/article/details/128150650?spm=1001.2014.3001.5502 源码
CALL FUNCTION ‘ZFM_SEND_CHECK_JOB’
EXPORTING
iv_json = lv_json
IMPORTING
ev_message = lv_message
ev_status_c = lv_status_c.

    IF lv_status_c = 'S'.
      MESSAGE '异常JOB推送企业微信成功' TYPE 'S'.
    ELSE.
      MESSAGE '异常JOB推送企业微信失败:'&& lv_message TYPE 'S' DISPLAY LIKE 'E'.

    ENDIF.
  ENDIF.

ENDIF.

MODIFY gt_alv.

ENDLOOP.

ENDFORM.

&---------------------------------------------------------------------
*& Form PFR_DISPLAY_ALV
&---------------------------------------------------------------------

  •   ALV展示
    

----------------------------------------------------------------------
FORM pfr_display_alv .

PERFORM frm_set_layout.
PERFORM frm_fieldcat.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-repid "当前程序
is_layout_lvc = gs_layout “界面格式”
it_fieldcat_lvc = gt_fieldcat “字段属性”

  • i_callback_pf_status_set = 'FRM_SET_PF_STATUS'    "状态
    
  • i_callback_user_command  = 'FRM_USER_COMMAND' "控制指令
    
  • it_event_exit      = gt_event_exit
    
  • i_grid_title       = ls_title
    
  • i_grid_settings    = i_grid_settings
    
    TABLES
    t_outtab = gt_alv
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE ‘S’ NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE ‘E’.
    LEAVE LIST-PROCESSING.
    ENDIF.
    ENDFORM.

&---------------------------------------------------------------------
*& Form FRM_SET_LAYOUT_
&---------------------------------------------------------------------

  •   ALV设置
    

----------------------------------------------------------------------
----------------------------------------------------------------------
FORM frm_set_layout .
CLEAR gs_layout.

gs_layout-zebra = ‘X’ . " 使ALV界面呈现颜色交替
" GS_LAYOUT-SEL_MODE = ‘A’ . " 选择模式,"A"在最左端有选择按钮
gs_layout-cwidth_opt = ‘X’ . " 自动优化列宽
ENDFORM.

&---------------------------------------------------------------------
*& Form FRM_FIELDCAT
&---------------------------------------------------------------------

  •  整单删除ALV字段设置
    

----------------------------------------------------------------------
----------------------------------------------------------------------
FORM frm_fieldcat.

add_field ‘LIGHT’ ‘状态灯’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘X’.
add_field ‘JOBNAME’ ‘作业名’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘PROGNAME’ ‘程序名称’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘VARIANT’ ‘变式名称’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘SDLUNAME’ ‘作业创建者’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘SDLDATE’ ‘实际最后一次执行开始’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘SDLTIME’ ‘实际最后一次执行时间’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

add_field ‘DATE’ ‘下次执行开始’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘TIME’ ‘下次执行时间’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

add_field ‘MIN_C’ ‘距最后一次执行时间’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

add_field ‘PL’ ‘频率’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘PRDMINS’ ‘频率:分钟’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘PRDHOURS’ ‘频率:小时’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘PRDDAYS’ ‘频率:天’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘PRDWEEKS’ ‘频率:周’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘PRDMONTHS’ ‘频率:月’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘FLAG1’ ‘已释放状态检查’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘FLAG2’ ‘执行时间检查’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

add_field ‘DATUM_CHECK’ ‘检查日期’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
add_field ‘UZEIT_CHECK’ ‘检查时间’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

ENDFORM.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java+JSP+MySQL基于SSM的物流公司物流订单管理系统-计算机毕业设计

项目介绍 随着我国经济的高速增长&#xff0c;物流快递的数量也在不断的增加&#xff0c;同时面临的就是如何更加方便快捷和高效的管理物流订单的问题&#xff0c;传统模式的物流订单管理模式明显已经不能够满足当下的需求&#xff0c;于是我们提出了基于B/S的贴心物流公司物流…

Redis未授权漏洞利用

1、背景介绍 近期公司内部安装主机安全组件&#xff0c;检测出一些安全漏洞&#xff0c;其中就有利用redis未授权漏洞进行攻击。 2、攻击原理 正常redis默认情况下&#xff0c;会绑定在0.0.0.0:6379&#xff0c;如果没有限制来源IP并且甚至没有密码&#xff0c;那么就会导致…

举个栗子~Minitab 技巧(5):掌握常用快捷键,提高统计分析效率

在日常使用 Minitab 时&#xff0c;大部分小伙伴的习惯是使用鼠标进行点击和拖拽等操作。然而&#xff0c;在使用频率很高的情况下&#xff0c;这种方式会带来很多重复且低效的劳动。 其实&#xff0c;Minitab 软件内置了许多快捷键&#xff0c;可以快速实现新建、打开、保存、…

虹科分析 | 终端安全 | 移动目标防御是“变革性”技术——GARTNER

使用前Gartner连续第二年将移动目标防御&#xff08;MTD&#xff09;作为特色技术&#xff0c;并将Morphisec作为该技术的样本供应商&#xff0c;在其报告《新兴技术影响雷达&#xff1a;安全》中。作者将MTD定义为“…一种技术趋势&#xff0c;其中动态或静态排列变形、转换或…

sentinel中流控规则 并发线程数的实战理解

先看下官网文档关于并发线程数的解释&#xff1a;链接地址 public class FlowThreadDemo {private static AtomicInteger pass new AtomicInteger();private static AtomicInteger block new AtomicInteger();private static AtomicInteger total new AtomicInteger();priva…

linux_mysql安装教程带安装包(亲测有效)

文章目录1.检查当前系统是否安装mysql2.上传mysql安装包/opt/software目录下3.解压安装包4.在安装目录下执行rpm安装5.删除/etc/my.cnf文件中datadir指向的目录下所有内容&#xff0c;6.初始化数据库7.查看临时生成的root用户密码8.启动mysql服务9.登陆mysql数据库10.修改root用…

Fiddler导出JMeter脚本插件原理

目录 一、Fiddler导出JMeter脚本插件原理 二、Fiddler导出JMeter脚本插件的基本使用 结语 一、Fiddler导出JMeter脚本插件原理 既然JMeter本质上是一个xml文档&#xff0c;Fiddler可以抓取HTTP请求包&#xff0c;插件的基本原理就是Fiddler抓取HTTP请求包将HTTP请求信息通过…

【电商项目实战】修改密码(详细篇)

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;SpringBoot电商项目实战 ✨学习社区&#xff1a; &#x1f449;不会压弯的小飞侠 ✨知足上进&#x…

乾元通4G/5G多链路聚合设备在公共安全通信方面解决方案

政府部门对应急指挥系统提出了更高的要求&#xff0c;在特殊情况下需要能够迅速建立紧急指挥中心&#xff0c;通过应急指挥系统统一协调、统一调度相关部门协同工作&#xff0c;达到“及时了解&#xff0c;快速反应&#xff0c;准确决策&#xff0c;统一调度&#xff0c;妥善处…

面试半年,上个月成功拿到阿里offer,全靠我啃烂了学长给的这份笔记

前言 不论是校招还是社招都避免不了各种⾯试、笔试&#xff0c;如何去准备这些东⻄就显得格外重要。不论是笔试还是⾯试都是有章可循的&#xff0c;我这个“有章可循”说的意思只是说应对技术⾯试是可以提前准备&#xff0c;所谓不打无准备的仗就是这个道理。 以下为大家&…

牛血清白蛋白修饰葡萄糖 BSA-glucose,木糖/半乳糖/乳糖偶联牛血清白蛋白

产品名称&#xff1a;牛血清白蛋白修饰葡萄糖 英文名称&#xff1a; BSA-glucose 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 牛血清中的简单蛋白&…

创作纪念日 编程练习 - 斐波那契数列

文章目录我的第一次今日份练习| 斐波那契数列憧憬我的第一次 第一次浏览CSDN的时候刚开始学C的时候&#xff0c;当时的课设是《C & SQL 2008的学生管理系统》&#xff0c;C作前段界面、逻辑处理&#xff0c;SQL作为后端服务器支持的题目&#xff0c;当时不太认真学习&…

化纤企业净利润下滑,纺织企业如何利用APS排产减轻盈余压力

根据国家统计局数据&#xff0c;2022年前三季度&#xff0c;全国规模以上纺织企业工业增加值同比减少0.4%&#xff0c;营业收入同比增长3.1%&#xff0c;利润总额同比减少23.6%&#xff0c;增速均较上年同期有所放缓。 从全产业链看&#xff0c;中下游印染、长丝织造、服装等分…

Qt之读写文件

1.思路 读写文件的基本操作&#xff1a; 读文件 写文件 打开文件 打开文件 读取文件 写入文件 关闭文件 关闭文件 2.QFile实现读写文件 QFile类提供读写文件的接口。 它的构造函数如下&#xff1a; QFile(const QString & name) QFile(QObject * parent) QFile(c…

点击化学 PEG 试剂:1802907-92-1,Mtz-PEG4-NHS,甲基四嗪-四聚乙醇-活性酯

【中文名称】甲基四嗪-四聚乙醇-活性酯 【英文名称】 Methyltetrazine-PEG4-NHS ester&#xff0c;Mtz-PEG4-NHS 【结 构 式】 【CAS号】1802907-92-1 【分子式】C24H31N5O9 【分子量】533.54 【基团部分】Methyltetrazine 【纯度标准】95% 【包装规格】5g&#xff0c;10g&…

安卓有哪些耳机好用?好用的安卓蓝牙耳机推荐

市面上的蓝牙耳机五花八门&#xff0c;许多消费者在选购的时候不知道如何选择&#xff0c;除了苹果以外&#xff0c;其他的都要细心参考一下&#xff0c;由于苹果耳机市场的价格昂贵&#xff0c;不少的人选择其他品牌的替代&#xff0c;作为一位追求性价比的消费者而言&#xf…

HTML5期末大作业:HTML+CSS茶叶官网网页设计实例 企业网站制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Dubbo底层网络连接模型

在Dubbo中&#xff0c;有两个参数⽤来配置服务消费者和服务提供者直接的socket连接个数&#xff1a; shareconnections&#xff1a;表示可共享的socket连接个数connections&#xff1a;表示不共享的socket连接个数 服务A的shareconnections为2时&#xff0c;服务A的消费者会向…

CANoe-vTESTstudio之Waveform编辑器

1. 什么是Waveform编辑器 Waveform Editor,波形编辑器,可以创建曲线(随时间变化值变化的模式)来刺激信号和系统变量。在刺激过程中可以使用checkpoints(检查点)来测试被测系统的行为 简单来说,就是在一个坐标轴上,x轴是时间,y轴是刺激的信号或系统变量值。在指定的时…

算法设计与分析期末复习不挂科

算法的基本概念 算法概念 通俗讲:算法是解决问题的一种方法或一个过程 严格讲:算法是解某一特定问题的一组有穷规则的集合 且满足以下性质: 有限性:算法在执行有限步之后必须终止确定性:算法的每一个步骤都有精确的定义,要执行的每一个动作都是清晰的,无歧义的输入:一个算法有…