Skip to content

业务

🕒 Published at:

业务表

HIS

问题

js

-->护理交班
疑问字段:
交班护士现在取的签名人,有待考量


缺少字段:
patients里缺少现状,背景,评估,建议,
patients里的患者状态statusNo不能只传一个,否则无法回显,或者一个状态对应patients里的一条,需要讨论
状态缺少 明日手术

未交班的接口/ts-pfs-nur-ipt/queryNurseHandoverStay缺少startShiftDate,endShiftDate入参

费用

0:原始记录
1:被红冲后的原始记录
2:冲正记录(也就是红冲的那一条负数量的记录)
3:取消冲正记录(把红冲冲回来的那一条记录(正记录))
4:被取消冲正记录(原始记录被红冲又被取消冲正后的状态)

bug 页面登记

  1. 模板管理-协定处方缺少响应式
  2. 模板管理-处方模板左侧树缺少滚动条
  3. 质控管理-质控规则库缺少响应式 (表格无响应式)

功能

修改记录, 要求签署前不存在修改记录, 则会导致, 签署前, 不需要赋值修改记录栈, 切换病历时, 修改记录栈不赋值又会有问题, 需要接口介入

如果不管这个,修改记录栈, 在切换时, 应该需要重新赋值

记录申请修改状态, 是申请修改, 则在点击修改记录时, 或者病历编辑时, 推送最新的修改记录

nativehandle="${obj.NativeHandle}" 编辑器.NavigateByUserTrackInfo(+obj.NativeHandle);

controlDom.medicalRecordViewPatientInfo=globalState.patientInfo;
controlDom.medicalRecordViewVisitInfo=globalState.visitInfo;

病历

xxx 文件夹 存 业务活动记录 业务活动记录又相当于一个分类存文档段, 数据源/组等 数据组又是数据源的一个分组 也就是 xxx 文件夹>业务活动记录>数据组>数据源 xxx 文件夹>业务活动记录>其他

skywalking

带上时间, 当行数据 (服务名,耗时)跳转到慢sql日志进行查询

权限管理-

人员管理-点人头 取消再勾选其他的,保存会让两个都勾选

skywalking的旧qiankun配置

js
mount(props) {
  app.config.globalProperties.qiankunParentNode = document.getElementById(process.env.VUE_APP_CONTAINER).parentNode;
  // 设置主应用下发的方法
  // ElementUi.Select.directives.Clickoutside._onMouse() //启动ui框架的鼠标按下和松开事件
  global.appLoading = true;
  const loading = document.getElementById('loading');
  loading ? (loading.style.display = 'none') : '';
  Object.keys(props.fn).forEach(method => {
    app.config.globalProperties[`$${method}`] = props.fn[method];
  });
  window.$goLogin = props.fn.goLogin; // 注册返回到登录
  global.userInfo = props.data.userInfo;
  global.software = props.data.software;
  if (!localStorage.getItem('token')) {
    localStorage.setItem('token', global.userInfo.token);
    localStorage.setItem('THPMSCookie', global.userInfo.token);
  }
  const lineRoutes = props.data.lineRoutes;
  const qkRouters = [];
  for (const v of lineRoutes) {
    // 遍历路由
    let url = v.alink ? v.alink.split('?')[0] : '';
    if (
        url !== '#' &&
        url !== '/' &&
        url.indexOf(props.data.baseRoute) == 0 &&
        url.indexOf('editor-web/bi/biEditor') == -1
    ) {
      url = '/' + url.split(props.data.baseRoute)[1];
      let _dir = url;
      if (url.indexOf('_') > -1) {
        _dir = url.split('_')[0];
      }

      //兼容中医附一老菜单
      const _dirArr = _dir.split('/');
      const same = _dirArr.slice(-2);
      if (same[0] == same[1]) {
        _dirArr.splice(-1, 1);
        _dir = _dirArr.join('/');
      }

      //需要缓存的集合
      const aliveRoutes = [
        '/intg/processManagement', //编排管理
        '/apiResources/apiOverview', //api网关
        '/intg/link', //集成链路
        '/access/supplier-manage' //供应商管理
        // '/intg/overview'//集成概况
      ];
      const keepAlive = aliveRoutes.includes(_dir);

      const d = {
        name: v.id,
        path: url,
        component: resolve => require(['@/views' + _dir], resolve),
        props: true,
        meta: {
          firstEnter: true,
          keepAlive,
          title: v.menuname, //页面标题
          canMultipleOpen: true //支持根据参数不同多开不同页签
        }
      };
      if (v.redirect !== undefined) {
        d.redirect = v.redirect;
      }
      qkRouters.push(d);
    }
  }
  global.appLoading = false;

  //监听主应用下发用户信息
  window.axiosPromiseArr = [];
  let routePath = '';

  props.onGlobalStateChange((state, prevState) => {
    //更换主题
    if (state.action == 'changeTheme') {
      setThemeColor(state.color);
    }
    //切换路由清空axiosPromiseArr数组
    if (state.routePath != routePath) {
      routePath = state.routePath;
      if (window.axiosPromiseArr.length > 0) {
        window.axiosPromiseArr = [];
      }
    }
  });
  // 设置通讯
  app.config.globalProperties.$onGlobalStateChange = props.onGlobalStateChange;
  app.config.globalProperties.$setGlobalState = props.setGlobalState;

  mountApp(props);

  //主应用主题传递
  let themeColor = null;
  if (props.fn.getTheme) {
    themeColor = props.fn.getTheme();
  } else {
    //兼容老版本
    require('./assets/css/element-variables.scss');
  }
  if (themeColor) {
    setThemeColor(themeColor);
  }
},

1 类型

1对象:对象选择只能选择开始节点定义的对象,对象有是否集合的开关,

2全局变量:只能选择全局变量属性

3常量:常量选择配置的常量列表

4自定义:自定义可以修改参数名称和配置参数值)

2 参数编码

3 参数值(如果类型为对象或者全局变量或常量时,则不让修改,为自定义参数时可以修改)

一体化运维

实时日志: 从打开页面开始实时输出的日志

查看/预览: 从点击的时候,服务器已经写入的日志

安装部署

待优化:

  1. 赤霄不能与 mysql 装同一台服务器,需要做互斥功能

  2. 排查错误

    1. 如果 404,
      1. 先看是否是前后端分离项目(看包结构)
      2. 如果是前后端分离,就看 nginx 配置和前端目录是否存在
    2. 如果服务挂了
      1. 去对应服务器看服务进程是否存在 ps -ef|grep 服务名的关键字(模糊匹配)
      2. 不存在就看错误日志 cat 错误日志目录
      3. 找到错误原因,改好后重启服务systemctl restart 服务名
  3. 初始弹窗

    1. 选择环境, 架构, 操作系统, 安装的目标客户(项目),
    2. 根据弹窗存在本地的数据
      1. projectCodeInfo, 只用了projectCode (项目编码) 和licenseKey (产品授权码, 一体化集成用)
      2. projectCode 项目编码
      3. systemOperate 系统架构
      4. architecture 操作系统
      5. DeployEnvironment 安装环境
      6. ModeIndex 部署模式
      7. remark 备注
    3. 查询上一次记录存在本地的数据
      1. 第二步的信息
        1. DataSourceList 数据源配置取值 deployPlanContent. DatasourceDeployConfig
        2. ServerList 服务器配置 deployPlanContent. ServerDeployConfig
      2. 第三步的信息
        1. ServerResourceConfiguration 产品服务配置 取值 deployPlanContent. ServerResourceConfiguration
        2. dataList 所有要安装的产品中间件数据库的产品信息 取值 deployPlanContent.productDeployConfig
        3. 各个中间件信息 取值遍历 deployPlanContent.middlewareDeployConfig
  4. 第一步

    1. 根据 globalconfig 拿到相关依赖,判断依赖是否存在,并且依赖的依赖是否存在
    2. 调用版本号接口,判断插件是否需要更新,并与插件建立连接
    3. 下载更新插件
    4. 点下一步
      1. 判断插件是否需要更新,
      2. 插件更新 sh 脚本 (未等待更新成功),
      3. 判断依赖列表中是否都有versionPackagePath
  5. 第二步

    1. 配置服务器
    2. 执行系统调优 (isOpt) 根据是否数据库服务器 (isSql) 取反, 传给插件进行处理
    3. 导出模板,导出的是空文件
    4. 安装并测试钩子,
      1. 先判断本地是否有对应的钩子,
        1. 没有就右下角弹出钩子的下载进度, 钩子下载完毕后, 组装数据 hostName=serverPath+ serverName (用于后续展示)
        2. 有就插件把参数传给后端, 后端进行系统调优, 服务器互访(为了方便联调)等操作, 并探测服务器是否能够联通 (钩子是根据架构和操作系统区分的,接口做的,取默认版本或者第一个)
    5. 点击下一步
      1. 校验信息是否填写完毕
      2. 校验钩子版本是否是最新的
      3. 单台服务器, 校验系统性能调优是否选择“是", 否则提示
  6. 第三步

    1. 配置中间件,数据库, 根据中间件/数据库的 code 码分别存值
    2. 配置产品,存到 ServerResourceConfiguration
    3. 点下一步
      1. 校验中间件, 数据库, 产品, 自定义变量的数据是否填写完毕,
      2. 保存部署记录
      3. 将部分依赖数据库的中间件改造为产品, 存在middleToProductList 中, 在middlewareOrProductFormat 中处理
  7. 第四步

    1. 读取 ServerResourceConfiguration,serverList,dataSourceList,dataList
    2. 点下一步
      1. 按照installSql(), middleware, installProduct() 的顺序排序进行安装, 默认按表格顺序, middleware 使用 sort 函数进行特殊处理, 解决部分依赖关系
      2. 计算安装时间,
        1. 调用 /getInstallTime接口, 强依赖productCode 字段, 根据 packageSize,predictInstallTime(预估安装时间,也就是上一次安装用间),downloadPackageTime 计算安装时间
        2. 调用 /upload/isPackageArr 接口判断本地是否有包,有包才算 remainder(预估下载时间),downloadPackageTime(预估组包时间,调用预下载打包时后端存储)
  8. 第五步

    1. websocket 连接建立完毕, 调用speed 函数, speed 函数调用installDownloadProgressText 函数, 根据下载 redis 的时间评估所有产品的安装时间
    2. 0 preDownloadLocalFile 判断本地是否有包
    3. 5 10 预下载 15 20 打包, 25 下分片 30 合包
    4. 35 处理包逻辑
      1. 如果是产品/数据库 调用插件处理包逻辑
      2. 如果是中间件, redisColony.js redis 下载逻辑: 上传 redis 日志
        1. 45 非redis集群上传 redis+它的日志 到服务器
        2. 50 redis集群 (redis 且高可用模式) 上传 redis 主/从/哨兵 + 他们的日志到服务器
        3. 65 中间件改产品
    5. 65-90 uploadProduct.js 产品下载逻辑: 上传产品数据库文件 + (lvs/微服务/nginx) 与他们的日志
    6. 如果预下载失败,点更改版本,调用 /preProject/deploy/plan/version/${id} 获取最新的 versionPackagePath 再预下载
    7. 如果安装失败,弹框重新安装或继续
    8. 高可用模式下, 安装完毕后把 nginx 刷到 lvs 里去,
    9. 产品安装完毕, 调用updateVersionInstallTime 更新预计安装时间
  9. 安装完成, 上传插件生成的日志 (安装的时候滚动的那个日志)

安装

ctrl+p搜install.js

arrange/components/components/minxins/install.js

  • 选择产品界面逻辑:

  • 产品清单依赖模块列表的dataList数据移除了,查询的时候,就会把产品清单对应的产品勾选取消,但是仅查询的时候会进行清除,因此需要将当前列表的数据的show改为false

  • globalconfig里会返回serviceList,这是微服务列表,用来组装产品的包,会放到db_config的files里

  • 确认安装逻辑:

  • install.js组装安装前所需数据,并进行安装

  • 添加中间件所需步骤:

  • 在store/install.js中添加中间件信息,和设置的mutation

  • 在middleware文件夹中添加新文件组装成安装必须的数据

  • 在installTable.js中组装确认安装中显示的数据

  • 在middlewareList.vue中添加服务器资源中显示的个性化中间件,中间件组件放在middlewareComponents文件夹中

  • 在middlewareList.vue外面一层的index.vue中添加sessionStorage.removeItem('seata')

  • 如果涉及数据库,需要在install中将它添加进产品,现在已经处理,需要在中间件vue组件中添加middle.toLowerCase()}_mysql_db_host的数据,参考seata

  • installTableStep.js中的sort方法排列安装顺序(已移除,换为表格顺序datalist)

  • 判断包需要更新的逻辑:

  • 需要packageId,Id,版本号,versionRandom一致才不会更新,否则就会去云中台尝试拉取新的包

组装安装信息

先在installTable.js中组装安装的数据,再去confirmInstall.vue的checkFn中进行下载安装和预估安装时间

javascript
Content.vue saveConfig保存配置文件中等同的信息


如果需要新增一个中间件需要同时在
index.vue的destroyed         //清空中间件的缓存

utils/installTable/middleware文件夹 //存储中间件配置,用于生成配置文件

utils/installTable/installTable.js//安装数据和提供给外部的数据
    modeIndex                //对应安装模式 1简易 2高可用
    saveMiddlewareList       //强依赖omp产品(一体化运维) ,对应produces
    installMiddleware        //用于组装[安装部署-确认安装的中间件表格]:port对应端口,code对应编码,url对应下载地址,host对应传递给,都必须
        
utils/installTable/installTableStep.js    
    sortFn                    //用于排列中间件的优先级,马上会统一到produce.js中
    
store/index                  //存中间件信息,同时本地化存储
    
produce.js //排列产品和中间件的顺序,用于处理依赖关系

//其他操作
lastPlan                 //查询上一次部署记录,存在本地

middlewareComponents   //中间件组件,可以判断是否是集群或单机

堡垒机使用

javascript
//找到对应服务器后
//切换到根目录
cd /

//切换到云中台目录
cd /data/middle/base-env/nginx/html/SHARE_RESOURCE
//切换到一体化运维目录
cd /usr/local/nginx/html/omp

//退回到父目录进行备份 
//复制,原目录还在
cd ..
cp -r SHARE_RESOURCE SHARE_RESOURCE_bak_0522
//移动,原目录不在了
mv SHARE_RESOURCE SHARE_RESOURCE_bak_0522
mkdir SHARE_RESOURCE

//进入云中台目录
cd SHARE_RESOURCE
//删除当前目录下的所有文件
rm -rf *
//上传文件
rz
//解压到当前目录
unzip

SSO

登录界面,用resource1

login-form.js是登录界面的template和js

mobile-form.js是移动端的登录界面的template和js

layout.html是正常登录界面

bjca.html是北京CA的

统一认证的菜单管理,资源id就是配按钮权限的,对应按钮的id

js
一套编码规则,指定哪些机构隶属于同一个集团,查机构即为查集团下所有机构数据
?
一个集团下,多个机构,一个机构多个院区,可能出现出现多个收费项目,如何处理
方案:按机构分类

需要转换机构为集团
以机构->院区->业务域做树
解析接口,获取接口参数


es     搜索
redis 缓存
js
脚本升级 (脚本文件,文件中包含sql命令之类的,后端解析执行)
服务升级 (后端的新版本传上去)

云中台
	负责安装部署 安装就是把dist文件放到服务器去
  选择安装产品
  传入服务器信息(excel)
  什么都搞完
  执行安装命令装中间件之类的
  (下载到本地的目录是根据exe插件决定的,同时exe可以上传资源到服务器(可配置))

一个包包含 
  nginx配置
  前端包
  服务器文件
  全局配置

`

qi