public BaseResultEntity Post(ImportSubscriberRequestEntity req) { Logger.LogDebug("ImportSubscriber Request:" + JsonHelper.SerializeObject(req), "ImportSubscriberController", "Post"); BaseResultEntity ret = new BaseResultEntity() { Code = 0, ErrMsg = "" }; try { #region 请求数据校验 var _pro = _projectBLL.GetModels(x => x.ID == req.ProjectID).FirstOrDefault(); if (_pro == null) { ret.Code = 401; ret.ErrMsg = "项目ID不存在!"; return(ret); } else if (req.ProjectGroup == null) { ret.Code = 402; ret.ErrMsg = "项目分组不能为空!"; return(ret); } foreach (var shake in req.ShakingNumberList) { if (shake.ShakingNumber == null) { ret.Code = 403; ret.ErrMsg = "摇号编号不能为空!"; return(ret); } if (shake.Subscriber == null) { ret.Code = 404; ret.ErrMsg = "摇号编号为" + shake.ShakingNumber + "的认购人信息不能为空!"; return(ret); } if (shake.ShakingNumberSequance <= 0) { ret.Code = 405; ret.ErrMsg = "摇号编号为" + shake.ShakingNumber + "摇号序号不能为空或小于1!"; return(ret); } if (shake.SelectHouseSequance <= 0) { ret.Code = 405; ret.ErrMsg = "摇号编号为" + shake.ShakingNumber + "选房序号不能为空或小于1!"; return(ret); } if (shake.Subscriber.Name == null || shake.Subscriber.IdentityNumber == null || shake.Subscriber.Telephone == null || shake.Subscriber.Address == null || shake.Subscriber.MaritalStatus == null || shake.Subscriber.ZipCode == null || shake.Subscriber.ResidenceArea == null || shake.Subscriber.WorkArea == null) { ret.Code = 406; ret.ErrMsg = "摇号编号为" + shake.ShakingNumber + "认购人信息不完整!"; return(ret); } } #endregion #region 创建项目分组 int _projectGroupID = 0; try { if (_projectGroupBLL.GetModels(x => x.ProjectID == req.ProjectID && x.ProjectGroupName == req.ProjectGroup).FirstOrDefault() == null) //项目分组不存在 { var _progrp = new ProjectGroup() { ProjectID = req.ProjectID, ProjectGroupName = req.ProjectGroup, CreateTime = DateTime.Now, LastUpdate = DateTime.Now }; _projectGroupBLL.Add(_progrp); } _projectGroupID = _projectGroupBLL.GetModels(x => x.ProjectID == req.ProjectID && x.ProjectGroupName == req.ProjectGroup).FirstOrDefault().ID; } catch (Exception ex) { Logger.LogException("创建项目分组时发生异常!", "ImportSubscriberController", "Post", ex); ret.Code = 999; ret.ErrMsg = ex.Message; return(ret); } #endregion var _subList = new List <Subscriber>(); var _existSubList = new List <Subscriber>(); var _familyList = new List <SubscriberFamilyMemberEntity>(); var _shakeList = new List <ShakingNumberResult>(); #region 创建认购人 var _dbSubList = _subscriberBLL.GetModels(x => 1 == 1).ToList(); foreach (var shake in req.ShakingNumberList) { try { var _sub = _dbSubList.FirstOrDefault(x => x.IdentityNumber == shake.Subscriber.IdentityNumber); if (_sub == null) //认购人不存在 { var _subscriber = new Subscriber() { Name = shake.Subscriber.Name, IdentityNumber = shake.Subscriber.IdentityNumber, Telephone = shake.Subscriber.Telephone, Address = shake.Subscriber.Address, ZipCode = shake.Subscriber.ZipCode, MaritalStatus = shake.Subscriber.MaritalStatus, ResidenceArea = shake.Subscriber.ResidenceArea, WorkArea = shake.Subscriber.WorkArea, FamilyMemberNumber = shake.FamilyMemberList == null ? 0 : shake.FamilyMemberList.Count(), CreateTime = DateTime.Now, LastUpdate = DateTime.Now }; _subList.Add(_subscriber); if (shake.FamilyMemberList != null && shake.FamilyMemberList.Count() > 0) { _familyList.AddRange(shake.FamilyMemberList); } } else { _existSubList.Add(_sub); } } catch (Exception ex) { Logger.LogException("创建摇号编号为" + shake.ShakingNumber + "的认购人时发生异常!", "ImportSubscriberController", "Post", ex); ret.Code = 999; ret.ErrMsg = ex.Message; return(ret); } } _subscriberBLL.AddRange(_subList); #endregion #region 创建认购人家庭成员 var _ttlSubList = _subscriberBLL.GetModels(x => 1 == 1).ToList(); var _dbFamilyList = new List <SubscriberFamilyMember>(); foreach (var family in _familyList) { try { var _sub = _ttlSubList.FirstOrDefault(x => x.IdentityNumber == family.SubscriberIdentityNumber); if (_sub != null) { var _fam = new SubscriberFamilyMember() { SubscriberID = _sub.ID, Name = family.Name, IdentityNumber = family.IdentityNumber, Relationship = family.Relationship, Area = family.Area, CreateTime = DateTime.Now, LastUpdate = DateTime.Now }; _dbFamilyList.Add(_fam); } } catch (Exception ex) { _subscriberBLL.DeleteRange(_subList); //回滚新建认购人 Logger.LogException("创建身份证为" + family.IdentityNumber + "的认购人家庭成员时发生异常!", "ImportSubscriberController", "Post", ex); ret.Code = 999; ret.ErrMsg = ex.Message; return(ret); } } _subscriberFamilyBLL.AddRange(_dbFamilyList); #endregion #region 创建认购人项目关联关系 var _subProMapList = new List <SubscriberProjectMapping>(); foreach (var sub in _subList)//添加新认购人Mapping { var _subProMap = new SubscriberProjectMapping() { SubscriberID = sub.ID, ProjectID = req.ProjectID, CreateTime = DateTime.Now, LastUpdate = DateTime.Now }; _subProMapList.Add(_subProMap); } var _existSubMap = _subscriberProjectMapBLL.GetModels(x => x.ProjectID == req.ProjectID).ToList(); foreach (var sub in _existSubList)//添加已存在认购人Mapping { if (!_existSubMap.Any(x => x.SubscriberID == sub.ID)) { var _subProMap = new SubscriberProjectMapping() { SubscriberID = sub.ID, ProjectID = req.ProjectID, CreateTime = DateTime.Now, LastUpdate = DateTime.Now }; _subProMapList.Add(_subProMap); } } _subProMapList.OrderBy(x => x.SubscriberID); _subscriberProjectMapBLL.AddRange(_subProMapList); #endregion #region 创建摇号结果 var _dbSubProMap = _subscriberProjectMapBLL.GetModels(x => x.ProjectID == req.ProjectID).ToList(); var _existShakingList = _shakingNumberBLL.GetModels(x => x.ProjectGroup.ProjectID == req.ProjectID).ToList(); var _dbshakingNumberList = new List <ShakingNumberResult>(); foreach (var shake in req.ShakingNumberList) { try { var _subProMap = _dbSubProMap.FirstOrDefault(x => x.Subscriber.IdentityNumber == shake.Subscriber.IdentityNumber); if (_subProMap != null && _projectGroupID != 0 && !_existShakingList.Any(x => x.SubscriberProjectMapping.Subscriber.IdentityNumber == shake.Subscriber.IdentityNumber)) { var _shake = new ShakingNumberResult() { ProjectGroupID = _projectGroupID, SubscriberProjectMappingID = _subProMap.ID, ShakingNumberSequance = shake.ShakingNumberSequance, SelectHouseSequance = shake.SelectHouseSequance, ShakingNumber = shake.ShakingNumber, NoticeTime = 0, IsError = false, IsContacted = false, IsCallBack = false, IsMessageSend = false, CreateTime = DateTime.Now, LastUpdate = DateTime.Now }; _dbshakingNumberList.Add(_shake); } } catch (Exception ex) { _subscriberProjectMapBLL.DeleteRange(_subProMapList); //回滚新建认购人项目关联 Logger.LogException("创建摇号编号为" + shake.ShakingNumber + "的摇号结果时发生异常!", "ImportSubscriberController", "Post", ex); ret.Code = 999; ret.ErrMsg = ex.Message; return(ret); } } _shakingNumberBLL.AddRange(_dbshakingNumberList); #endregion } catch (Exception ex) { Logger.LogException("导入认购人和摇号信息时发生异常!", "ImportSubscriberController", "Post", ex); ret.Code = 999; ret.ErrMsg = ex.Message; } return(ret); }