public ActionResult CreateAddress(string data) { AddressNamePattern pattern = string.IsNullOrWhiteSpace(data) ? null : Newtonsoft.Json.JsonConvert.DeserializeObject <AddressNamePattern>(data, new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore, NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }); if (CurrUser.CompanySysNo > 0) { pattern.CompanySysNo = CurrUser.CompanySysNo; } string message = ""; bool isSuccess = CompanyService.CreateAddress(pattern, CurrUser.UserSysNo, CurrUser.UserName, out message); AjaxResult result = new AjaxResult { Success = isSuccess, Message = message, Data = null }; return(Json(result)); }
private static void BuildAddSaveChildrenAddress(List <Address> pAddList, AddressNamePattern childPattern, int userSysNo, string userName) { if (childPattern == null) { return; } foreach (var p in pAddList) { if (p.SysNo < 1) { continue; } //p.EditUserName 中暂存了子节点最大的编码 List <Address> addList = BuildAddress(childPattern, p, p.EditUserName); AddressDA.InsertAddress(p.CompanySysNo, p.SysNo, ref addList, userSysNo, userName); if (childPattern.ChildPattern != null) { childPattern.ChildPattern.CompanySysNo = childPattern.CompanySysNo; } BuildAddSaveChildrenAddress(addList, childPattern.ChildPattern, userSysNo, userName); } }
private static List <Address> BuildAddress(AddressNamePattern pattern, Address parent, string beginAddressCode) { string beginNo = pattern.BeginNo.Trim().ToUpper(); string endNo = pattern.EndNo.Trim().ToUpper(); string nameTemplate = pattern.PreName + "{0}" + pattern.SufName; if (pattern.ParentNoAsPreName) { nameTemplate = parent.Number + pattern.PreName + "{0}" + pattern.SufName; } List <Address> addList = new List <Address>(); string code = null; string parentPathName = parent.PathName; if (parent.ParentSysNo.GetValueOrDefault() == 0) { parentPathName = parent.Name; } if (pattern.NoType == AddressNameNoType.Digit) { int bNo = int.Parse(beginNo); int eNo = int.Parse(endNo); for (int i = bNo; i <= eNo; i++) { if (string.IsNullOrWhiteSpace(beginAddressCode)) { code = parent.Code + "00"; } else { code = GenerateCode(beginAddressCode, beginAddressCode.Length, 3); } beginAddressCode = code; string number = i.ToString().PadLeft(pattern.NoLength, '0'); string name = string.Format(nameTemplate, number); Address add = new Address() { CompanySysNo = pattern.CompanySysNo, Grade = pattern.Grade, Number = i.ToString(), Name = name, ParentSysNo = parent.SysNo, Code = code, PathName = parentPathName + ">" + name, }; addList.Add(add); } } else { char bNo = char.Parse(beginNo); char eNo = char.Parse(endNo); for (char i = bNo; i <= eNo; i++) { if (string.IsNullOrWhiteSpace(beginAddressCode)) { code = parent.Code + "00"; } else { code = GenerateCode(beginAddressCode, beginAddressCode.Length, 3); } beginAddressCode = code; string number = i.ToString().PadLeft(pattern.NoLength, 'A'); string name = string.Format(nameTemplate, number); Address add = new Address() { CompanySysNo = pattern.CompanySysNo, Grade = pattern.Grade, Number = i.ToString(), Name = name, ParentSysNo = pattern.ParentSysNo, Code = code, PathName = parentPathName + ">" + name, }; addList.Add(add); } } return(addList); }
public static bool CreateAddress(AddressNamePattern pattern, int userSysNo, string userName, out string message) { message = null; bool result = CheckAddressPattern(pattern, out message); if (!result) { return(false); } int companySysNo = pattern.CompanySysNo; if (companySysNo <= 0) { message = "客户信息不存在,请选择客户后再创建地址信息。"; return(false); } object locker = GetCompanyAddressCreateLockerByKey(companySysNo); lock (locker) { if (CompanyAddressCreateCount.ContainsKey(companySysNo)) { CompanyAddressCreateCount[companySysNo] = CompanyAddressCreateCount[companySysNo] + 1; } else { CompanyAddressCreateCount.Add(companySysNo, 1); } try { Address parent = AddressDA.LoadAddress(pattern.ParentSysNo); if (parent == null || parent.CompanySysNo != companySysNo) { message = "按规则创建地址时,请指定父级地址。如果是根地址,则只能单个创建。"; return(false); } string beginAddressCode = AddressDA.GetChildrenMaxCode(companySysNo, pattern.ParentSysNo); List <Address> addList = BuildAddress(pattern, parent, beginAddressCode); AddressDA.InsertAddress(companySysNo, pattern.ParentSysNo, ref addList, userSysNo, userName); if (pattern.ChildPattern != null) { pattern.ChildPattern.CompanySysNo = companySysNo; } Task task = new Task(() => { var aList = addList; var p = pattern.ChildPattern; var uno = userSysNo; var uname = userName; BuildAddSaveChildrenAddress(aList, p, uno, uname); }); task.Start(); } finally { CompanyAddressCreateCount[companySysNo] = CompanyAddressCreateCount[companySysNo] - 1; } } return(true); }
private static bool CheckAddressPattern(AddressNamePattern pattern, out string message) { message = null; if (pattern.NoType == AddressNameNoType.Char) { string beginNo = pattern.BeginNo == null ? "" : pattern.BeginNo.Trim(); if (beginNo.Length != 1) { message = "起始编号为空或格式不正确,为字母时只能包括一个字母。"; return(false); } string endNo = pattern.EndNo == null ? "" : pattern.EndNo.Trim(); if (endNo.Length != 1) { message = "结束编号为空或格式不正确,为字母时只能包括一个字母。"; return(false); } beginNo = beginNo.ToUpper(); pattern.BeginNo = beginNo; endNo = endNo.ToUpper(); pattern.EndNo = endNo; if (beginNo[0] < 'A' || endNo[0] > 'Z') { message = "开始和结束编号为空或格式不正确,为字母时只能包括一个字母。"; return(false); } if (beginNo[0] > endNo[0]) { message = "结束编号不能大于开始编号。"; return(false); } } else { int beginNo = 0; if (!int.TryParse(pattern.BeginNo, out beginNo) || beginNo < 0) { message = "起始编号为空或格式不正确,编号为数字且不能小于0。"; return(false); } int endNo = 0; if (!int.TryParse(pattern.EndNo, out endNo) || endNo < 0) { message = "结束编号为空或格式不正确,编号为数字且不能小于0。"; return(false); } if (beginNo > endNo) { message = "结束编号不能大于结束编号。"; return(false); } } if (!string.IsNullOrWhiteSpace(pattern.PreName) && pattern.PreName.Length > 10) { message = pattern.ParentNoAsPreName ? "与父级编号的分隔符长度不能超过10个字符" : "名称前缀不能超过10个字符!"; return(false); } if (!string.IsNullOrWhiteSpace(pattern.SufName) && pattern.SufName.Length > 10) { message = "名称后缀不能超过10个字符!"; return(false); } bool result = false; if (pattern.ChildPattern != null) { result = CheckAddressPattern(pattern.ChildPattern, out message); if (!result) { return(result); } } return(true); }