/* ------------------------------------------------------------------------ * Return 0 Successful * -1 fatal error * -2 no continue operation * -3 read only * ------------------------------------------------------------------------- */ public int Create(string registryID, string archive) { int returnState = 0; archiveNum = archive; #region In offline if (Globals.offline) { string tmpfile = DocFile(registryID); emrDoc.Load(tmpfile); File.Delete(tmpfile); return(returnState); } #endregion using (gjtEmrService.emrServiceXml es = new gjtEmrService.emrServiceXml()) { #region Get emrDocument and emrNotes XmlNode node = emrDoc.DocumentElement; XmlNode emrNotes = emrDoc.CreateElement(EmrConstant.ElementNames.EmrNotes); Boolean ret; try { string machineName = Globals.localMachineName; string machineIP = Globals.localMachineIP; string msg = es.SetTrafficLightToRed(registryID, ref machineIP, ref machineName); if (msg != null) { if (machineIP.Trim() != Globals.localMachineIP.Trim()) { string error = "病历被他人打开编辑中,一般不要同时操作同一病历\r\rIP地址:" + machineIP + "\r\r主机名:" + machineName; if (!ThisAddIn.CanOption(ElementNames.ContinueAsEmrOpened)) { error += "\r\r进入只读状态!!!"; MessageBox.Show(error, ErrorMessage.Warning); returnState = -3; } } } ret = es.GetEmrDocument(registryID, ref node, ref emrNotes); } catch (Exception ex) { Globals.logAdapter.Record("EX741852967", ex.Message + ">>" + ex.ToString(), true); return(-1); } if (ret == EmrConstant.Return.Failed) { MessageBox.Show(ErrorMessage.WebServiceError, ErrorMessage.Error); return(-1); } #endregion #region Check if local documents are newer than in database if (Globals.autoCheckSync && !ThisAddIn.CanOption(ElementNames.ContinueAsEmrOpened)) { DateTime localLwt = DateTime.Now; if (ThisAddIn.HasNotesInLocal(registryID, ref localLwt)) { long lastWriteTime = 0; if (node.Attributes[AttributeNames.LastWriteTime] != null) { lastWriteTime = Convert.ToInt64(node.Attributes[AttributeNames.LastWriteTime].Value); } DateTime remoteLwt = DateTime.FromFileTime(lastWriteTime); if (localLwt.CompareTo(remoteLwt) > 0) { DialogResult dr = MessageBox.Show("本地病历记录比数据库的更新:\r\r本地:" + localLwt.ToString() + " 数据库:" + remoteLwt.ToString() + "\r\r同步为本地病历吗?\r如果选择同步应十分小心,要确认本地病历确实是最新的。" + "\r因为有时因各机器时钟不一致,可能造成假象。一旦同步成功,不能恢复!", ErrorMessage.Warning, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (dr == DialogResult.Yes) { #region Do synchronization string msg = ThisAddIn.SynchronizeOne(registryID, archiveNum, node); if (msg == null) { emrDocFile = udt.MakeEmrDocumentFileName(registryID, Globals.workFolder); string tmpfile = Path.Combine(Globals.currentDirectory, ResourceName.Mytmp); if (File.Exists(tmpfile)) { File.Delete(tmpfile); } udt.jj.DecodeEmrDocument(emrDocFile, tmpfile); emrDoc.Load(tmpfile); return(returnState); } MessageBox.Show(msg, ErrorMessage.Error); return(-1); #endregion } else if (dr == DialogResult.Cancel) { return(-2); } } } } #endregion #region Create local storage for documents. string docLocation = ThisAddIn.GetDocLocation(registryID); foreach (XmlNode emrNote in emrNotes) { string noteDoc = udt.MakeWdDocumentFileName(docLocation, emrNote.Attributes[0].Value); udt.jj.StringToWordDocument(noteDoc, emrNote); if (emrNote.InnerText.Length >= 2 && emrNote.InnerText.Substring(0, 2) == "UE") { if (Globals.localDocumentEncode) { udt.jj.EncodeEmrDocument(noteDoc); } } else { if (!Globals.localDocumentEncode) { string tmpfile = Path.Combine(Globals.currentDirectory, ResourceName.Mytmp); udt.jj.DecodeEmrDocument(noteDoc, tmpfile); File.Delete(noteDoc); File.Move(tmpfile, noteDoc); } } } emrDoc.LoadXml(node.OuterXml); emrDocFile = udt.MakeEmrDocumentFileName(registryID, Globals.workFolder); emrDoc.Save(emrDocFile); udt.jj.EncodeEmrDocument(emrDocFile); return(returnState); #endregion } }