配置加锁解锁

  /**============================================================================
   * 业务锁整套流程
   */
  public BusinessLock(businessName: string): Promise<boolean> {
    //promise
    return new Promise<boolean>(async resolve => {
      //先加锁
      let firstAddLock: any = await this.AddLock(businessName);
      if (firstAddLock.status == 'success') {
        // //加锁成功
        this.businessLockNo = firstAddLock.info;
        resolve(true);
      } else {
        //加锁失败,进行查锁
        let queryLock: any = await this.QueryLock();
        if (queryLock.status == 'success') {
          //查锁成功,判断是否为本人加的锁
          let lockInfo: any = queryLock.info;
          if (lockInfo.LockState == 2) {
            //本人加的锁,锁号更新,并且弹出对话框,询问是否重新加锁
            UI.Confirm(
              '编辑入库单已在其它页面锁定,是否在当前页面重新加锁?',
              '业务锁',
              {
                confirmButtonText: '确定',
                cancelButtonText: '取消'
              }
            )
              .then(async () => {
                //解锁然后重新加锁
                this.businessLockNo = lockInfo.LockBusiNo;
                let unLockInfo: any = await this.UnLock();
                if (unLockInfo.status == 'success') {
                  let addLockInfo: any = await this.AddLock(businessName);
                  if (addLockInfo.status == 'success') {
                    //加锁成功,业务锁流程完毕
                    this.businessLockNo = addLockInfo.info;
                    resolve(true);
                  } else {
                    UI.ShowException(addLockInfo.info);
                    resolve(false);
                  }
                } else {
                  //解锁失败,直接返回
                  resolve(false);
                }
              })
              .catch(() => {
                resolve(false);
              });
          } else {
            //非本人加的锁,直接提示加锁的异常信息
            UI.ShowException(firstAddLock.info);
            resolve(false);
          }
        } else {
          //查锁失败,直接返回
          resolve(false);
        }
      }
    });
  }

  /**
   * 加锁
   */
  public AddLock(businessName: string): Promise<any> {
    return new Promise<any>(async resolve => {
      try {
        let addLockInfo: any = await this.lockMgr.LockBusiness(
          '药品出库',
          this.billNo,
          sj.globalVar.UserID,
          sj.globalVar.StationID,
          businessName,
          this.businessLockNo ? this.businessLockNo : ''
        );
        resolve({ status: 'success', info: addLockInfo });
      } catch (error) {
        resolve({ status: 'error', info: error });
      }
    });
  }

  /**
   * 查锁是否为本人加的
   */
  public QueryLock(): Promise<any> {
    return new Promise<any>(async resolve => {
      //已经被锁定,则判断该锁是不是本人加的锁
      try {
        let queryLockInfo: any = await this.lockMgr.QueryLockBusiness(
          '药品出库',
          this.billNo,
          sj.globalVar.UserID,
          sj.globalVar.StationID,
          this.businessLockNo,
          true,
          sj.globalVar.UnitID
        );
        resolve({ status: 'success', info: queryLockInfo });
      } catch (error) {
        UI.ShowException(error);
        resolve({ status: 'error' });
      }
    });
  }
  /**
   * 解锁
   */
  public UnLock(): Promise<any> {
    return new Promise<any>(async resolve => {
      //已经被锁定,则判断该锁是不是本人加的锁
      try {
        if (this.businessLockNo) {
          let unLockInfo: any = await this.lockMgr.UnLockBusiness(
            '药品出库',
            this.billNo,
            sj.globalVar.UserID,
            sj.globalVar.StationID,
            this.businessLockNo,
            true
          );
          //解锁成功清空锁号
          this.businessLockNo = '';
          resolve({ status: 'success', info: unLockInfo });
        }
        resolve({ status: 'success' });
      } catch (error) {
        UI.ShowException(error);
        resolve({ status: 'error' });
      }
    });
  }

  

posted @ 2019-07-02 19:02  龙旋风  阅读(298)  评论(0)    收藏  举报