Browse Source

사용자 사인데이터 조회, 저장 api 추가

KimHyoJung 4 năm trước cách đây
mục cha
commit
11bb9a3b52

+ 59 - 0
CLIP.e-Form.Consent.Dac/UserDac.cs

@@ -66,5 +66,64 @@ namespace CLIP.eForm.Consent.Dac {
     //{
     //    return mapper.QueryForList<ImageServerPropsVO>("getImageServerProps", param);
     //}
+
+    #region 사용자 서명 이미지 저장 코드
+
+    /// <summary>
+    /// 사용자에 대한 서명이미지를 수정한다
+    /// </summary>
+    /// <param name="mapper"></param>
+    /// <param name="param"></param>
+    /// <returns></returns>
+    public String setSignImage(ISqlMapper mapper, Hashtable param)
+    {
+      return mapper.QueryForObject<String>("", param);
+    }
+
+    /// <summary>
+    /// 사용자에 대한 서명이미지를 저장한다.
+    /// </summary>
+    /// <param name="mapper"></param>
+    /// <param name="param"></param>
+    /// <returns></returns>
+    public String insSignImage(ISqlMapper mapper, Hashtable param)
+    {
+      return mapper.QueryForObject<String>("INS_USER_SIGNIMAGE", param);
+    }
+
+    /// <summary>
+    /// 사용자의 이전 서명 이미지의 유효기간을 마감시킨다
+    /// </summary>
+    /// <param name="mapper"></param>
+    /// <param name="param"></param>
+    /// <returns></returns>
+    public String setUserSignToDd(ISqlMapper mapper, Hashtable param)
+    {
+      return mapper.QueryForObject<String>("SET_USER_SIGNTODD", param);
+    }
+
+    /// <summary>
+    /// 사용자 서명데이터를 조회한다.
+    /// </summary>
+    /// <param name="mapper"></param>
+    /// <param name="param"></param>
+    /// <returns></returns>
+    public UserSignDataVo getUserSignDataInfo(ISqlMapper mapper, Hashtable param)
+    {
+      return mapper.QueryForObject<UserSignDataVo>("GET_USER_SIGN_DATA_INFO", param);
+    }
+
+    /// <summary>
+    /// 사용자 사인데이터를 업데이트한다.
+    /// </summary>
+    /// <param name="mapper"></param>
+    /// <param name="param"></param>
+    /// <returns></returns>
+    public UserSignDataVo setUserSignData(ISqlMapper mapper, Hashtable param)
+    {
+      return mapper.QueryForObject<UserSignDataVo>("SET_USER_SIGN_DATA", param);
+    }
+
+    #endregion
   }
 }

+ 1 - 0
CLIP.e-Form.Consent.Entity/CLIP.e-Form.Consent.Entity.csproj

@@ -63,6 +63,7 @@
   <ItemGroup>
     <Compile Include="AgmtVo.cs" />
     <Compile Include="CategoryForDropdownVO.cs" />
+    <Compile Include="UserSignDataVo.cs" />
     <Compile Include="SingleReturnData.cs" />
     <Compile Include="ClnDateForDropdownVO.cs" />
     <Compile Include="ConsentBySearchVO.cs" />

+ 53 - 0
CLIP.e-Form.Consent.Entity/UserSignDataVo.cs

@@ -0,0 +1,53 @@
+using System;
+using System.ComponentModel;
+
+namespace CLIP.eForm.Consent.Entity {
+  /// <summary>
+  /// 환자정보 엔터티
+  /// </summary>
+  /// <remarks>
+  /// <p>[설계자]</p>
+  /// <p>  클립소프트 기술부 4팀 이창훈 (chlee@clipsoft.co.kr)</p>
+  /// <p>[원본 작성자]</p>
+  /// <p>  클립소프트 기술부 이인희</p>
+  /// <p>[수정 작성자]</p>
+  /// <p></p>
+  /// <p>----------------------------------------------------------------------------------------</p>
+  /// <p>[HISTORY]</p>
+  /// <p> 2016-06-27 : 최초작성</p>
+  /// <p>----------------------------------------------------------------------------------------</p>
+  /// </remarks>  
+  [Serializable]
+  public class UserSignDataVo
+  {
+    public UserSignDataVo()
+    {
+      foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
+      {
+        if (property.DisplayName == "signImgeSeqNo")
+        {
+          property.SetValue(this, 0);
+        }
+      }
+    }
+
+    //기관코드
+    public string instCd { get; set; }
+
+    //사인 이미지 순번
+    public int signImgeSeqNo { get; set; }
+
+
+    //유효기간 시작일
+    public string userId { get; set; }
+
+    //사인이미지
+    public byte[] signData { get; set; }
+
+    //유효기간 시작일자
+    public string signImgeFromDd { get; set; }
+
+    //사용자이름
+    public string userNm { get; set; }
+  }
+}

+ 141 - 1
CLIP.e-Form.Consent.Web/HospitalSvc.asmx.cs

@@ -1279,6 +1279,146 @@ namespace CLIP.eForm.Consent.WebService {
       return result;
     }
 
+    #region 사용자 서명이미지 저장 코드
 
+    /// <summary>
+    /// 사용자에 대한 서명 이미지를 저장한다.
+    /// </summary>
+    /// <param name="instCd"></param>
+    /// <param name="userId"></param>
+    /// <param name="signSeq"></param>
+    /// <param name="inptId"></param>
+    /// <param name="signImage">base64로 변환된 사인이미지 데이터</param>
+    /// <returns></returns>
+    [WebMethod(Description = "서명 이미지 저장")]
+    public String setSignImage(string instCd, string userId, string signSeq, string inptId, string signImage)
+    {
+      ISqlMapper mapper = IbatisMapper;
+      UserSignDataVo signData = null;
+      byte[] decodedImage = Convert.FromBase64String(signImage);
+
+      string result = "0";
+      try
+      {
+        using (UserDac dac = new UserDac())
+        {
+          Hashtable param = new Hashtable();
+
+          //받아온 사용자의 사인데이터를 조회
+          param.Add("instCd", instCd);
+          param.Add("userId", userId);
+          signData = dac.getUserSignDataInfo(mapper, param);
+
+          //사인데이터가 있을 경우
+          if (signData != null)
+          {
+            string today = DateTime.Now.ToString("yyyyMMdd");
+            string yesterday = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
+            //해당 사인데이터가 오늘 저장된 것이 아니라면 오늘날짜로 새로 저장하고 이전 데이터의 유효기간을 마감시킨다.
+            if (!signData.signImgeFromDd.Equals(today))
+            {
+              insSignImage(instCd, userId, signData.signImgeSeqNo + 1, decodedImage, inptId, dac, mapper);
+              setSignToDd(instCd, userId, signData.signImgeSeqNo, yesterday, "N", inptId, dac, mapper);
+            }
+            else
+            {
+              // 사인데이터가 오늘 저장된 것이라면 사인데이터를 업데이트 해준다.
+              param = new Hashtable();
+              param.Add("instCd", instCd);
+              param.Add("userId", userId);
+              param.Add("curSeqNo", signData.signImgeSeqNo);
+              param.Add("signData", decodedImage);
+              param.Add("inptUser", inptId);
+              dac.setUserSignData(mapper, param);
+            }
+          }
+          else
+          {
+            //사인데이터가 없으면 그대로 저장
+            insSignImage(instCd,
+              userId,
+              int.TryParse(signSeq, out int res) ? res : 1,
+              decodedImage,
+              inptId, 
+              dac,
+              mapper);
+          }
+        }
+        result = "1";
+        return result;
+      }
+      catch (Exception ex)
+      {
+        CLIP.eForm.Server.Diagnostics.LogHelper.LoggingHandler.Error(string.Format("CLIP.eForm setSignImage error: {0}", ex.Message));
+        throw ex;
+      }
+    }
+
+    /// <summary>
+    /// 서명이미지를 생성한다.
+    /// </summary>
+    /// <param name="instCd"></param>
+    /// <param name="userId"></param>
+    /// <param name="nextSeqNo"></param>
+    /// <param name="signImage"></param>
+    /// <param name="inptId"></param>
+    /// <param name="dac"></param>
+    /// <param name="mapper"></param>
+    private void insSignImage(string instCd, string userId, int nextSeqNo, byte[] signImage, string inptId, UserDac dac, ISqlMapper mapper)
+    {
+      Hashtable param = new Hashtable();
+      param.Add("instCd", instCd);
+      param.Add("userId", userId);
+      param.Add("nextSeqNo", nextSeqNo);
+      param.Add("signData", signImage);
+      param.Add("inputUserId", inptId);
+      dac.insSignImage(mapper, param);
+    }
+
+    /// <summary>
+    /// 사용자 사인데이터의 ToDd를 설정한다
+    /// </summary>
+    /// <param name="instCd"></param>
+    /// <param name="userId"></param>
+    /// <param name="curSeqNo"></param>
+    /// <param name="toDd"></param>
+    /// <param name="repryn"></param>
+    /// <param name="inptUser"></param>
+    /// <param name="dac"></param>
+    /// <param name="mapper"></param>
+    private void setSignToDd(string instCd, string userId, int curSeqNo, string toDd, string repryn, string inptUser, UserDac dac, ISqlMapper mapper)
+    {
+      Hashtable param = new Hashtable();
+      param.Add("instCd", instCd);
+      param.Add("userId", userId);
+      param.Add("curSeqNo", curSeqNo);
+      param.Add("yesterDay", toDd);
+      param.Add("repryn", repryn);
+      param.Add("inptUser", inptUser);
+
+      dac.setUserSignToDd(mapper, param);
+    }
+
+    /// <summary>
+    /// 사용자에 대한 서명정보 조회
+    /// </summary>
+    /// <param name="instCd"></param>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    [WebMethod(Description = "서명 이미지 조회")]
+    public UserSignDataVo getUserSignDataInfo(string instCd, string userId)
+    {
+      UserSignDataVo result = null;
+      UserDac dac = new UserDac();
+      Hashtable param = new Hashtable();
+      param.Add("instCd", instCd);
+      param.Add("userId", userId);
+
+      result = dac.getUserSignDataInfo(IbatisMapper, param);
+
+      return result;
+    }
+
+    #endregion
   }
-}
+}

+ 9 - 0
CLIP.e-Form.Consent.Web/OracleQuery/CLIP.e-Form.Hospital.ResultMap.xml

@@ -18,6 +18,7 @@
     <typeAlias type="CLIP.eForm.Consent.Entity.MobileLoginResult, CLIP.e-Form.Consent.Entity" alias="MobileLoginResult"/>
     <typeAlias type="CLIP.eForm.Consent.Entity.UserLoginDeptList, CLIP.e-Form.Consent.Entity" alias="UserLoginDeptList"/>
     <typeAlias type="CLIP.eForm.Consent.Entity.MobileUserInfo, CLIP.e-Form.Consent.Entity" alias="MobileUserInfo"/>
+    <typeAlias type="CLIP.eForm.Consent.Entity.UserSignDataVo, CLIP.e-Form.Consent.Entity" alias="UserSignDataVo"/>
   </alias>
 
   <resultMaps>
@@ -268,5 +269,13 @@
       <result property="jobkindcd" column="jobkindcd"/>
       <result property="jobkindnm" column="jobkindnm"/>
     </resultMap>
+    <resultMap id="UserSignDataMap" class="UserSignDataVo">
+      <result property="instCd"     column="instcd"     nullValue="" />
+      <result property="signImgeSeqNo"       column="signimgeseqNo"       nullValue="" />
+      <result property="userId"       column="userid"       nullValue="" />
+      <result property="signData"       column="signdata"       nullValue="" />
+      <result property="signImgeFromDd"       column="signimgefromdd"       nullValue="" />
+      <result property="userNm"       column="usernm"       nullValue="" />
+    </resultMap>
   </resultMaps>
 </sqlMap>

+ 88 - 0
CLIP.e-Form.Consent.Web/OracleQuery/CLIP.e-Form.Hospital.User.xml

@@ -689,5 +689,93 @@
             AND HARDCDNO IN (6580, 6581, 6582, 6584)
       ]]>
     </statement>
+
+    <!--사인데이터를 생성-->
+    <statement id="INS_USER_SIGNIMAGE" parameterClass="System.Collections.Hashtable" resultMap="UserSignDataMap">
+      <![CDATA[
+      insert into EMR.MRFMSIGNIMGE a (a.instcd
+        , a.userid
+        , a.SIGNIMGESEQNO
+        , a.REPRYN
+        , a.SIGNDATA
+        , a.SIGNIMGEFROMDD
+        , a.SIGNIMGETODD
+        , a.FSTRGSTRID
+        , a.LASTUPDTRID
+        , a.RGSTINSTCD
+        )
+        values( #instCd#
+            , #userId#
+            , #nextSeqNo#
+            , 'Y'
+            , #signData#
+            , to_char(sysdate, 'YYYYMMDD')
+            , '99991231'
+            , #inputUserId#
+            , #inputUserId#
+            , #instCd#
+        )
+      ]]>
+    </statement>
+
+    <!--이전 사인데이터의 유효기간 마감 처리-->
+    <statement id="SET_USER_SIGNTODD" parameterClass="System.Collections.Hashtable" resultMap="UserSignDataMap">
+      <![CDATA[
+      UPDATE EMR.MRFMSIGNIMGE a
+           SET a.SIGNIMGETODD = #yesterDay#
+             , a.LASTUPDTRID = #inptUser#
+             , a.REPRYN = #repryn#
+             , a.LASTUPDTDT = systimestamp
+         WHERE a.instcd = #instCd# AND a.userid = #userId#
+               AND a.SIGNIMGESEQNO = #curSeqNo# AND a.REPRYN = 'Y'
+      ]]>
+    </statement>
+
+    <!--사용자에 대한 사인데이터를 조회한다.-->
+    <statement id="GET_USER_SIGN_DATA_INFO" parameterClass="System.Collections.Hashtable" resultMap="UserSignDataMap">
+      <![CDATA[
+      SELECT img.instcd
+        , img.userid
+        , img.signimgeseqno
+        , IMG.SIGNIMGEFROMDD
+        , img.signdata
+        , (
+            SELECT
+                USERB.USERNM
+              FROM
+                COM.ZSUMUSRB USERB,
+                (
+                  SELECT
+                    USERID,
+                    MAX(USERFROMDD) AS USERFROMDD
+                  FROM
+                    COM.ZSUMUSRB
+                  WHERE
+                    USERID = #userId#
+                  GROUP BY
+                    USERID) MAX_USERB
+              WHERE userb.userid = max_userb.userid
+              AND userb.userfromdd = max_userb.userfromdd
+          ) usernm
+        FROM EMR.MRFMSIGNIMGE img
+        WHERE userid = #userId#
+        AND img.instcd = #instCd#
+        AND REPRYN = 'Y'
+        AND TO_CHAR(SYSDATE, 'YYYYMMDD') BETWEEN SIGNIMGEFROMDD AND SIGNIMGETODD 
+      ]]>
+    </statement>
+    
+    <!--같은날 사용자 사인데이터를 저장하면 그날 사인데이터에 업데이트한다.-->
+    <statement id="SET_USER_SIGN_DATA" parameterClass="System.Collections.Hashtable" resultMap="UserSignDataMap">
+      <![CDATA[
+      UPDATE EMR.MRFMSIGNIMGE IMG
+        SET IMG.SIGNDATA = #signData#
+          , IMG.LASTUPDTRID = #inptUser#
+          , IMG.LASTUPDTDT = systimestamp
+        WHERE IMG.INSTCD = #instCd#
+        AND IMG.USERID = #userId#
+        AND IMG.SIGNIMGESEQNO = #curSeqNo#
+      ]]>
+    </statement>
   </statements>
 </sqlMap>