From fcb416fbd7a3f83c00e61a0078d1ab07c6c538bb Mon Sep 17 00:00:00 2001
From: wxd <123@qq.com>
Date: Tue, 4 Jun 2024 00:44:58 +0800
Subject: [PATCH] =?UTF-8?q?=E8=81=8C=E4=B8=9A=E7=97=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 .../OccupationalDiseaseWithDetailInputDto.cs  |  49 +-
 .../OccupationalDiseaseAppService.cs          | 450 ++++++++++++++----
 2 files changed, 409 insertions(+), 90 deletions(-)
diff --git a/src/Shentun.Peis.Application.Contracts/OccupationalDiseases/OccupationalDiseaseWithDetailInputDto.cs b/src/Shentun.Peis.Application.Contracts/OccupationalDiseases/OccupationalDiseaseWithDetailInputDto.cs
index f8aee49..33e94f2 100644
--- a/src/Shentun.Peis.Application.Contracts/OccupationalDiseases/OccupationalDiseaseWithDetailInputDto.cs
+++ b/src/Shentun.Peis.Application.Contracts/OccupationalDiseases/OccupationalDiseaseWithDetailInputDto.cs
@@ -16,6 +16,39 @@ namespace Shentun.Peis.OccupationalDiseases
         /// 
         public Guid PatientRegisterId { get; set; }
 
+
+        /// 
+        /// 是否需要处理基础信息  默认 处理  Y N
+        /// 
+        public char IsPatientOccupationalDiseaseUpdate { get; set; } = 'Y';
+
+        /// 
+        /// 是否需要处理毒害因素  默认 处理  Y N
+        /// 
+        public char IsPatientPoisonsUpdate { get; set; } = 'Y';
+
+
+        /// 
+        /// 是否需要处理既往病史  默认 处理  Y N
+        /// 
+        public char IsPatientPastMedicalHistorysUpdate { get; set; } = 'Y';
+
+        /// 
+        /// 是否需要处理职业病史  默认 处理  Y N
+        /// 
+        public char IsPatientOccupationalMedicalHistorysUpdate { get; set; } = 'Y';
+
+        /// 
+        /// 是否需要处理职业史  默认 处理  Y N
+        /// 
+        public char IsPatientOccupationalHistorysUpdate { get; set; } = 'Y';
+
+        /// 
+        /// 是否需要处理症状  默认 处理  Y N
+        /// 
+        public char IsPatientSymptomsUpdate { get; set; } = 'Y';
+
+
         /// 
         /// 基础信息
         /// 
@@ -235,6 +268,10 @@ namespace Shentun.Peis.OccupationalDiseases
 
     public class PatientOccupationalHistoryInputDto
     {
+        /// 
+        /// 职业史ID
+        /// 
+        public Guid? Id { get; set; }
 
         /// 
         /// 单位
@@ -275,6 +312,12 @@ namespace Shentun.Peis.OccupationalDiseases
     public class PatientOccupationalMedicalHistoryInputDto
     {
 
+        /// 
+        /// 职业病史ID
+        /// 
+        public Guid? Id { get; set; }
+
+
         /// 
         /// 病名
         /// 
@@ -303,6 +346,10 @@ namespace Shentun.Peis.OccupationalDiseases
 
     public class PatientPastMedicalHistoryInputDto
     {
+        /// 
+        /// 既往病史ID
+        /// 
+        public Guid? Id { get; set; }
 
         /// 
         /// 病名
@@ -329,7 +376,7 @@ namespace Shentun.Peis.OccupationalDiseases
         public string? TreatmentMethods { get; set; }
     }
 
-    public class PatientSymptomInputDto 
+    public class PatientSymptomInputDto
     {
 
         public Guid SymptomId { get; set; }
diff --git a/src/Shentun.Peis.Application/OccupationalDiseases/OccupationalDiseaseAppService.cs b/src/Shentun.Peis.Application/OccupationalDiseases/OccupationalDiseaseAppService.cs
index 3784af6..8693ee8 100644
--- a/src/Shentun.Peis.Application/OccupationalDiseases/OccupationalDiseaseAppService.cs
+++ b/src/Shentun.Peis.Application/OccupationalDiseases/OccupationalDiseaseAppService.cs
@@ -103,6 +103,163 @@ namespace Shentun.Peis.OccupationalDiseases
             _poisonRepository = poisonRepository;
         }
 
+        ///// 
+        ///// 创建职业病信息
+        ///// 
+        ///// 
+        //[HttpPost("api/app/OccupationalDisease/CreateOccupationalDiseaseWithDetail")]
+        //public async Task CreateOccupationalDiseaseWithDetailAsync(OccupationalDiseaseWithDetailInputDto input)
+        //{
+        //    if (input == null)
+        //    {
+        //        throw new UserFriendlyException("请求参数有误");
+        //    }
+
+        //    if (input.PatientRegisterId == Guid.Empty)
+        //        throw new UserFriendlyException("人员ID不正确");
+
+        //    #region 基础信息
+        //    if (input.PatientOccupationalDisease == null)
+        //        throw new UserFriendlyException("职业病基础信息有误");
+
+        //    var patientOccupationalDiseaseInput = ObjectMapper.Map(input.PatientOccupationalDisease);
+
+        //    patientOccupationalDiseaseInput.PatientRegisterId = input.PatientRegisterId;
+
+        //    var patientOccupationalDiseaseEnt = await _patientOccupationalDiseaseRepository.FirstOrDefaultAsync(f => f.PatientRegisterId == input.PatientRegisterId);
+        //    if (patientOccupationalDiseaseEnt == null)
+        //    {
+
+        //        var entity = _patientOccupationalDiseaseManager.CreateAsync(patientOccupationalDiseaseInput);
+        //        await _patientOccupationalDiseaseRepository.InsertAsync(entity, true);
+        //    }
+        //    else
+        //    {
+        //        _patientOccupationalDiseaseManager.UpdateAsync(patientOccupationalDiseaseInput, patientOccupationalDiseaseEnt);
+        //        await _patientOccupationalDiseaseRepository.UpdateAsync(patientOccupationalDiseaseEnt, true);
+        //    }
+        //    #endregion
+
+        //    #region 毒害因素
+
+        //    var patientPoisonsInput = ObjectMapper.Map, List>(input.PatientPoisons);
+        //    await _patientPoisonRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
+        //    List patientPoisonList = new List();
+        //    foreach (var item in patientPoisonsInput)
+        //    {
+        //        if (patientPoisonList.Select(s => s.PoisonId).Contains(item.PoisonId))
+        //        {
+        //            string errPoisonName = "";
+        //            var errPoison = await _poisonRepository.FirstOrDefaultAsync(f => f.Id == item.PoisonId);
+        //            if (errPoison != null)
+        //                errPoisonName = errPoison.DisplayName;
+        //            throw new UserFriendlyException($"接害因素{errPoisonName}不能重复选择");
+        //        }
+        //        patientPoisonList.Add(new PatientPoison
+        //        {
+        //            PatientRegisterId = input.PatientRegisterId,
+        //            PoisonId = item.PoisonId,
+        //            OccupationalAbnormalId = item.OccupationalAbnormalId
+        //        });
+        //    }
+
+        //    await _patientPoisonRepository.InsertManyAsync(patientPoisonList, true);
+        //    #endregion
+
+        //    #region 症状
+
+        //    var patientSymptomsInput = ObjectMapper.Map, List>(input.PatientSymptoms);
+        //    await _patientSymptomRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
+        //    List patientSymptomList = new List();
+        //    foreach (var item in patientSymptomsInput)
+        //    {
+        //        patientSymptomList.Add(new PatientSymptom
+        //        {
+        //            PatientRegisterId = input.PatientRegisterId,
+        //            Degree = item.Degree,
+        //            SymptomId = item.SymptomId,
+        //            TimeLength = item.TimeLength
+        //        });
+        //    }
+
+        //    await _patientSymptomRepository.InsertManyAsync(patientSymptomList, true);
+
+        //    #endregion
+
+        //    #region 职业病史
+
+        //    var patientOccupationalMedicalHistorysInput = ObjectMapper.Map, List>(input.PatientOccupationalMedicalHistorys);
+        //    await _patientOccupationalMedicalHistoryRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
+        //    List patientOccupationalMedicalHistoryList = new List();
+        //    foreach (var item in patientOccupationalMedicalHistorysInput)
+        //    {
+        //        patientOccupationalMedicalHistoryList.Add(new PatientOccupationalMedicalHistory
+        //        {
+        //            PatientRegisterId = input.PatientRegisterId,
+        //            DiagnosisDate = item.DiagnosisDate,
+        //            DiagnosisHospital = item.DiagnosisHospital,
+        //            IsRecovery = item.IsRecovery,
+        //            OccupationalDisease = item.OccupationalDisease,
+        //            TreatmentMethods = item.TreatmentMethods
+        //        });
+        //    }
+
+        //    await _patientOccupationalMedicalHistoryRepository.InsertManyAsync(patientOccupationalMedicalHistoryList, true);
+
+        //    #endregion
+
+        //    #region 既往病史
+
+        //    var patientPastMedicalHistorysInput = ObjectMapper.Map, List>(input.PatientPastMedicalHistorys);
+        //    await _patientPastMedicalHistoryRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
+        //    List PatientPastMedicalHistoryList = new List();
+        //    foreach (var item in patientPastMedicalHistorysInput)
+        //    {
+        //        PatientPastMedicalHistoryList.Add(new PatientPastMedicalHistory
+        //        {
+        //            PatientRegisterId = input.PatientRegisterId,
+        //            DiagnosisDate = item.DiagnosisDate,
+        //            DiagnosisHospital = item.DiagnosisHospital,
+        //            IsRecovery = item.IsRecovery,
+        //            OccupationalDisease = item.OccupationalDisease,
+        //            TreatmentMethods = item.TreatmentMethods
+        //        });
+        //    }
+
+        //    await _patientPastMedicalHistoryRepository.InsertManyAsync(PatientPastMedicalHistoryList, true);
+
+        //    #endregion
+
+        //    #region 职业史
+
+        //    var patientOccupationalHistorysInput = ObjectMapper.Map, List>(input.PatientOccupationalHistorys);
+        //    await _patientOccupationalHistoryRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
+        //    List patientOccupationalHistoryList = new List();
+        //    foreach (var item in patientOccupationalHistorysInput)
+        //    {
+        //        patientOccupationalHistoryList.Add(new PatientOccupationalHistory
+        //        {
+        //            PatientRegisterId = input.PatientRegisterId,
+        //            BeginDate = item.BeginDate,
+        //            EndDate = item.EndDate,
+        //            Org = item.Org,
+        //            Poison = item.Poison,
+        //            ProtectiveMeasures = item.ProtectiveMeasures,
+        //            WorkShop = item.WorkShop,
+        //            WorkType = item.WorkType
+        //        });
+        //    }
+
+        //    await _patientOccupationalHistoryRepository.InsertManyAsync(patientOccupationalHistoryList, true);
+
+        //    #endregion
+
+        //    return await GetOccupationalDiseaseWithDetailByPatientRegisterIdAsync(new PatientRegisterIdInputDto
+        //    {
+        //        PatientRegisterId = input.PatientRegisterId
+        //    });
+        //}
+
         /// 
         /// 创建职业病信息
         /// 
@@ -119,139 +276,253 @@ namespace Shentun.Peis.OccupationalDiseases
                 throw new UserFriendlyException("人员ID不正确");
 
             #region 基础信息
-            if (input.PatientOccupationalDisease == null)
-                throw new UserFriendlyException("职业病基础信息有误");
 
-            var patientOccupationalDiseaseInput = ObjectMapper.Map(input.PatientOccupationalDisease);
+            if (input.IsPatientOccupationalDiseaseUpdate == 'Y')
+            {
+                if (input.PatientOccupationalDisease == null)
+                    throw new UserFriendlyException("职业病基础信息有误");
 
-            patientOccupationalDiseaseInput.PatientRegisterId = input.PatientRegisterId;
+                var patientOccupationalDiseaseInput = ObjectMapper.Map(input.PatientOccupationalDisease);
 
-            var patientOccupationalDiseaseEnt = await _patientOccupationalDiseaseRepository.FirstOrDefaultAsync(f => f.PatientRegisterId == input.PatientRegisterId);
-            if (patientOccupationalDiseaseEnt == null)
-            {
+                patientOccupationalDiseaseInput.PatientRegisterId = input.PatientRegisterId;
 
-                var entity = _patientOccupationalDiseaseManager.CreateAsync(patientOccupationalDiseaseInput);
-                await _patientOccupationalDiseaseRepository.InsertAsync(entity, true);
-            }
-            else
-            {
-                _patientOccupationalDiseaseManager.UpdateAsync(patientOccupationalDiseaseInput, patientOccupationalDiseaseEnt);
-                await _patientOccupationalDiseaseRepository.UpdateAsync(patientOccupationalDiseaseEnt, true);
+                var patientOccupationalDiseaseEnt = await _patientOccupationalDiseaseRepository.FirstOrDefaultAsync(f => f.PatientRegisterId == input.PatientRegisterId);
+                if (patientOccupationalDiseaseEnt == null)
+                {
+
+                    var entity = _patientOccupationalDiseaseManager.CreateAsync(patientOccupationalDiseaseInput);
+                    await _patientOccupationalDiseaseRepository.InsertAsync(entity, true);
+                }
+                else
+                {
+                    _patientOccupationalDiseaseManager.UpdateAsync(patientOccupationalDiseaseInput, patientOccupationalDiseaseEnt);
+                    await _patientOccupationalDiseaseRepository.UpdateAsync(patientOccupationalDiseaseEnt, true);
+                }
             }
             #endregion
 
             #region 毒害因素
-
-            var patientPoisonsInput = ObjectMapper.Map, List>(input.PatientPoisons);
-            await _patientPoisonRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
-            List patientPoisonList = new List();
-            foreach (var item in patientPoisonsInput)
+            if (input.IsPatientPoisonsUpdate == 'Y')
             {
-                if (patientPoisonList.Select(s => s.PoisonId).Contains(item.PoisonId))
+                var patientPoisonsInput = ObjectMapper.Map, List>(input.PatientPoisons);
+                //当前数据
+                List patientPoisonList = await _patientPoisonRepository.GetListAsync(m => m.PatientRegisterId == input.PatientRegisterId);
+                List newPoisonIds = new List();  //新数据
+                foreach (var item in patientPoisonsInput)
                 {
-                    string errPoisonName = "";
-                    var errPoison = await _poisonRepository.FirstOrDefaultAsync(f => f.Id == item.PoisonId);
-                    if (errPoison != null)
-                        errPoisonName = errPoison.DisplayName;
-                    throw new UserFriendlyException($"接害因素{errPoisonName}不能重复选择");
+                    newPoisonIds.Add(item.PoisonId);
+
+                    var isPatientPoison = await _patientPoisonRepository.FirstOrDefaultAsync(f => f.PatientRegisterId == input.PatientRegisterId && f.PoisonId == item.PoisonId);
+                    if (isPatientPoison == null)
+                    {
+                        var patientPoisonEnt = new PatientPoison
+                        {
+                            PatientRegisterId = input.PatientRegisterId,
+                            PoisonId = item.PoisonId,
+                            OccupationalAbnormalId = item.OccupationalAbnormalId
+                        };
+
+                        await _patientPoisonRepository.InsertAsync(patientPoisonEnt, true);
+                    }
+                    else
+                    {
+                        isPatientPoison.OccupationalAbnormalId = item.OccupationalAbnormalId;
+
+                        await _patientPoisonRepository.UpdateAsync(isPatientPoison, true);
+                    }
                 }
-                patientPoisonList.Add(new PatientPoison
-                {
-                    PatientRegisterId = input.PatientRegisterId,
-                    PoisonId = item.PoisonId,
-                    OccupationalAbnormalId = item.OccupationalAbnormalId
-                });
-            }
 
-            await _patientPoisonRepository.InsertManyAsync(patientPoisonList, true);
+                //需要删除的数据
+                var deletePatientPoisonList = patientPoisonList.Where(m => !newPoisonIds.Contains(m.PoisonId)).ToList();
+                await _patientPoisonRepository.DeleteManyAsync(deletePatientPoisonList);
+
+            }
             #endregion
 
             #region 症状
 
-            var patientSymptomsInput = ObjectMapper.Map, List>(input.PatientSymptoms);
-            await _patientSymptomRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
-            List patientSymptomList = new List();
-            foreach (var item in patientSymptomsInput)
+            if (input.IsPatientSymptomsUpdate == 'Y')
             {
-                patientSymptomList.Add(new PatientSymptom
+                var patientSymptomsInput = ObjectMapper.Map, List>(input.PatientSymptoms);
+                //当前数据
+                List patientSymptomList = await _patientSymptomRepository.GetListAsync(m => m.PatientRegisterId == input.PatientRegisterId);
+                List newSymptomIds = new List();  //新数据
+
+                foreach (var item in patientSymptomsInput)
                 {
-                    PatientRegisterId = input.PatientRegisterId,
-                    Degree = item.Degree,
-                    SymptomId = item.SymptomId,
-                    TimeLength = item.TimeLength
-                });
-            }
+                    newSymptomIds.Add(item.SymptomId);
+                    var isPatientSymptom = await _patientSymptomRepository.FirstOrDefaultAsync(f => f.PatientRegisterId == input.PatientRegisterId && f.SymptomId == item.SymptomId);
+                    if (isPatientSymptom == null)
+                    {
+                        var patientSymptomEnt = new PatientSymptom
+                        {
+                            PatientRegisterId = input.PatientRegisterId,
+                            Degree = item.Degree,
+                            SymptomId = item.SymptomId,
+                            TimeLength = item.TimeLength
+                        };
+
+                        await _patientSymptomRepository.InsertAsync(patientSymptomEnt, true);
+                    }
+                    else
+                    {
+                        isPatientSymptom.Degree = item.Degree;
+                        isPatientSymptom.TimeLength = item.TimeLength;
+
+                        await _patientSymptomRepository.UpdateAsync(isPatientSymptom, true);
+                    }
+
+
+                }
 
-            await _patientSymptomRepository.InsertManyAsync(patientSymptomList, true);
+                //需要删除的数据
+                var deletePatientSymptomList = patientSymptomList.Where(m => !newSymptomIds.Contains(m.SymptomId)).ToList();
+                await _patientSymptomRepository.DeleteManyAsync(deletePatientSymptomList);
 
+            }
             #endregion
 
             #region 职业病史
 
-            var patientOccupationalMedicalHistorysInput = ObjectMapper.Map, List>(input.PatientOccupationalMedicalHistorys);
-            await _patientOccupationalMedicalHistoryRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
-            List patientOccupationalMedicalHistoryList = new List();
-            foreach (var item in patientOccupationalMedicalHistorysInput)
+            if (input.IsPatientOccupationalMedicalHistorysUpdate == 'Y')
             {
-                patientOccupationalMedicalHistoryList.Add(new PatientOccupationalMedicalHistory
+                var patientOccupationalMedicalHistorysInput = ObjectMapper.Map, List>(input.PatientOccupationalMedicalHistorys);
+                List patientOccupationalMedicalHistoryList = await _patientOccupationalMedicalHistoryRepository.GetListAsync(m => m.PatientRegisterId == input.PatientRegisterId);
+                List newPatientOccupationalMedicalHistoryIds = new List();  //新数据
+                foreach (var item in patientOccupationalMedicalHistorysInput)
                 {
-                    PatientRegisterId = input.PatientRegisterId,
-                    DiagnosisDate = item.DiagnosisDate,
-                    DiagnosisHospital = item.DiagnosisHospital,
-                    IsRecovery = item.IsRecovery,
-                    OccupationalDisease = item.OccupationalDisease,
-                    TreatmentMethods = item.TreatmentMethods
-                });
-            }
+                    var oldPatientOccupationalMedicalHistoryEnt = await _patientOccupationalMedicalHistoryRepository.FirstOrDefaultAsync(f => f.Id == item.Id);
+
+                    if (item.Id == Guid.Empty || oldPatientOccupationalMedicalHistoryEnt == null)
+                    {
+                        var patientOccupationalMedicalHistoryEnt = new PatientOccupationalMedicalHistory
+                        {
+                            PatientRegisterId = input.PatientRegisterId,
+                            DiagnosisDate = item.DiagnosisDate,
+                            DiagnosisHospital = item.DiagnosisHospital,
+                            IsRecovery = item.IsRecovery,
+                            OccupationalDisease = item.OccupationalDisease,
+                            TreatmentMethods = item.TreatmentMethods
+                        };
+
+                        await _patientOccupationalMedicalHistoryRepository.InsertAsync(patientOccupationalMedicalHistoryEnt, true);
+                    }
+                    else
+                    {
+
+                        newPatientOccupationalMedicalHistoryIds.Add(item.Id);
+
+                        oldPatientOccupationalMedicalHistoryEnt.DiagnosisDate = item.DiagnosisDate;
+                        oldPatientOccupationalMedicalHistoryEnt.DiagnosisHospital = item.DiagnosisHospital;
+                        oldPatientOccupationalMedicalHistoryEnt.IsRecovery = item.IsRecovery;
+                        oldPatientOccupationalMedicalHistoryEnt.OccupationalDisease = item.OccupationalDisease;
+                        oldPatientOccupationalMedicalHistoryEnt.TreatmentMethods = item.TreatmentMethods;
 
-            await _patientOccupationalMedicalHistoryRepository.InsertManyAsync(patientOccupationalMedicalHistoryList, true);
+                        await _patientOccupationalMedicalHistoryRepository.UpdateAsync(oldPatientOccupationalMedicalHistoryEnt, true);
+                    }
 
+                }
+
+                //需要删除的数据
+                var deletePatientOccupationalMedicalHistoryList = patientOccupationalMedicalHistoryList.Where(m => !newPatientOccupationalMedicalHistoryIds.Contains(m.Id)).ToList();
+                await _patientOccupationalMedicalHistoryRepository.DeleteManyAsync(deletePatientOccupationalMedicalHistoryList);
+            }
             #endregion
 
             #region 既往病史
 
-            var patientPastMedicalHistorysInput = ObjectMapper.Map, List>(input.PatientPastMedicalHistorys);
-            await _patientPastMedicalHistoryRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
-            List PatientPastMedicalHistoryList = new List();
-            foreach (var item in patientPastMedicalHistorysInput)
+            if (input.IsPatientPastMedicalHistorysUpdate == 'Y')
             {
-                PatientPastMedicalHistoryList.Add(new PatientPastMedicalHistory
+                var patientPastMedicalHistorysInput = ObjectMapper.Map, List>(input.PatientPastMedicalHistorys);
+                List patientPastMedicalHistoryList = await _patientPastMedicalHistoryRepository.GetListAsync(m => m.PatientRegisterId == input.PatientRegisterId);
+                List newPatientPastMedicalHistoryIds = new List();  //新数据
+                foreach (var item in patientPastMedicalHistorysInput)
                 {
-                    PatientRegisterId = input.PatientRegisterId,
-                    DiagnosisDate = item.DiagnosisDate,
-                    DiagnosisHospital = item.DiagnosisHospital,
-                    IsRecovery = item.IsRecovery,
-                    OccupationalDisease = item.OccupationalDisease,
-                    TreatmentMethods = item.TreatmentMethods
-                });
-            }
+                    var oldPatientPastMedicalHistoryEnt = await _patientPastMedicalHistoryRepository.FirstOrDefaultAsync(f => f.Id == item.Id);
 
-            await _patientPastMedicalHistoryRepository.InsertManyAsync(PatientPastMedicalHistoryList, true);
+                    if (item.Id == Guid.Empty || oldPatientPastMedicalHistoryEnt == null)
+                    {
+                        var patientPastMedicalHistoryEnt = new PatientPastMedicalHistory
+                        {
+                            PatientRegisterId = input.PatientRegisterId,
+                            DiagnosisDate = item.DiagnosisDate,
+                            DiagnosisHospital = item.DiagnosisHospital,
+                            IsRecovery = item.IsRecovery,
+                            OccupationalDisease = item.OccupationalDisease,
+                            TreatmentMethods = item.TreatmentMethods
+                        };
+
+                        await _patientPastMedicalHistoryRepository.InsertAsync(patientPastMedicalHistoryEnt, true);
+                    }
+                    else
+                    {
+                        newPatientPastMedicalHistoryIds.Add(item.Id);
 
+
+                        oldPatientPastMedicalHistoryEnt.DiagnosisDate = item.DiagnosisDate;
+                        oldPatientPastMedicalHistoryEnt.DiagnosisHospital = item.DiagnosisHospital;
+                        oldPatientPastMedicalHistoryEnt.IsRecovery = item.IsRecovery;
+                        oldPatientPastMedicalHistoryEnt.OccupationalDisease = item.OccupationalDisease;
+                        oldPatientPastMedicalHistoryEnt.TreatmentMethods = item.TreatmentMethods;
+
+                        await _patientPastMedicalHistoryRepository.UpdateAsync(oldPatientPastMedicalHistoryEnt, true);
+                    }
+                }
+                //需要删除的数据
+                var deletePatientPastMedicalHistoryList = patientPastMedicalHistoryList.Where(m => !newPatientPastMedicalHistoryIds.Contains(m.Id)).ToList();
+                await _patientPastMedicalHistoryRepository.DeleteManyAsync(deletePatientPastMedicalHistoryList);
+
+            }
             #endregion
 
             #region 职业史
 
-            var patientOccupationalHistorysInput = ObjectMapper.Map, List>(input.PatientOccupationalHistorys);
-            await _patientOccupationalHistoryRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
-            List patientOccupationalHistoryList = new List();
-            foreach (var item in patientOccupationalHistorysInput)
+            if (input.IsPatientOccupationalHistorysUpdate == 'Y')
             {
-                patientOccupationalHistoryList.Add(new PatientOccupationalHistory
+                var patientOccupationalHistorysInput = ObjectMapper.Map, List>(input.PatientOccupationalHistorys);
+                List patientOccupationalHistoryList = await _patientOccupationalHistoryRepository.GetListAsync(m => m.PatientRegisterId == input.PatientRegisterId);
+                List newPatientOccupationalHistoryIds = new List();  //新数据
+                foreach (var item in patientOccupationalHistorysInput)
                 {
-                    PatientRegisterId = input.PatientRegisterId,
-                    BeginDate = item.BeginDate,
-                    EndDate = item.EndDate,
-                    Org = item.Org,
-                    Poison = item.Poison,
-                    ProtectiveMeasures = item.ProtectiveMeasures,
-                    WorkShop = item.WorkShop,
-                    WorkType = item.WorkType
-                });
-            }
+                    var oldPatientOccupationalHistoryEnt = await _patientOccupationalHistoryRepository.FirstOrDefaultAsync(f => f.Id == item.Id);
+
+                    if (item.Id == Guid.Empty || oldPatientOccupationalHistoryEnt == null)
+                    {
+                        var patientOccupationalHistoryEnt = new PatientOccupationalHistory
+                        {
+                            PatientRegisterId = input.PatientRegisterId,
+                            BeginDate = item.BeginDate,
+                            EndDate = item.EndDate,
+                            Org = item.Org,
+                            Poison = item.Poison,
+                            ProtectiveMeasures = item.ProtectiveMeasures,
+                            WorkShop = item.WorkShop,
+                            WorkType = item.WorkType
+                        };
+
+                        await _patientOccupationalHistoryRepository.InsertAsync(patientOccupationalHistoryEnt, true);
+                    }
+                    else
+                    {
+                        newPatientOccupationalHistoryIds.Add(item.Id);
+
+                        oldPatientOccupationalHistoryEnt.BeginDate = item.BeginDate;
+                        oldPatientOccupationalHistoryEnt.EndDate = item.EndDate;
+                        oldPatientOccupationalHistoryEnt.Org = item.Org;
+                        oldPatientOccupationalHistoryEnt.Poison = item.Poison;
+                        oldPatientOccupationalHistoryEnt.ProtectiveMeasures = item.ProtectiveMeasures;
+                        oldPatientOccupationalHistoryEnt.WorkShop = item.WorkShop;
+                        oldPatientOccupationalHistoryEnt.WorkType = item.WorkType;
 
-            await _patientOccupationalHistoryRepository.InsertManyAsync(patientOccupationalHistoryList, true);
+                        await _patientOccupationalHistoryRepository.UpdateAsync(oldPatientOccupationalHistoryEnt, true);
+                    }
 
+                }
+
+                //需要删除的数据
+                var deletePatientOccupationalHistoryList = patientOccupationalHistoryList.Where(m => !newPatientOccupationalHistoryIds.Contains(m.Id)).ToList();
+                await _patientOccupationalHistoryRepository.DeleteManyAsync(deletePatientOccupationalHistoryList);
+            }
             #endregion
 
             return await GetOccupationalDiseaseWithDetailByPatientRegisterIdAsync(new PatientRegisterIdInputDto
@@ -261,6 +532,7 @@ namespace Shentun.Peis.OccupationalDiseases
         }
 
 
+
         /// 
         /// 获取职业病信息 根据人员登记ID
         ///