public async Task <ResponseObject <bool> > Copy(TBMMaterialFileCopyModel requestObject) { var user = TokenManager.GetCurentUserbyToken(Request.Headers); return(await _service.Copy(requestObject, user)); }
/// <summary> /// 复制物料 /// </summary> /// <param name="ID"></param> /// <param name="currentUser"></param> /// <returns></returns> public async Task <ResponseObject <bool> > Copy(TBMMaterialFileCopyModel copyModel, CurrentUser currentUser) { try { _db.Instance.BeginTran(); foreach (var ID in copyModel.Ids) { TBMMaterialFileDbModel source = await _db.Instance.Queryable <TBMMaterialFileDbModel>().Where(p => p.ID == ID && p.CompanyId == currentUser.CompanyID).FirstAsync(); if (source.PackageID != null) { throw new Exception("包型对应的物料,不能复制"); } if (source != null) { var sameName = _db.Instance.Queryable <TBMMaterialFileDbModel>().Where(p => p.MaterialName.StartsWith(source.MaterialName) && p.CompanyId == currentUser.CompanyID).ToList(); int index = 1; string aimName = string.Empty; int len = source.MaterialName.Length + 4; foreach (var item in sameName.Where(p => p.MaterialName != source.MaterialName).OrderBy(p => p.MaterialName)) { if (item.MaterialName.Length <= len) { continue; } string tempName = item.MaterialName.Substring(len); if (int.TryParse(tempName, out index)) { index++; aimName = string.Concat(source.MaterialName, "copy", index.ToString().PadLeft(2, '0')); if (sameName.Any(p => p.MaterialName == aimName)) { aimName = string.Empty; } else { break; } } } if (aimName == string.Empty) { aimName = string.Concat(source.MaterialName, "copy01"); } var sameCode = _db.Instance.Queryable <TBMMaterialFileDbModel>().Where(p => p.MaterialCode.StartsWith(source.MaterialCode) && p.CompanyId == currentUser.CompanyID).ToList(); int indexCode = 1; string aimCode = string.Empty; int lenCode = source.MaterialCode.Length + 4; foreach (var item in sameCode.Where(p => p.MaterialCode != source.MaterialCode).OrderBy(p => p.MaterialCode)) { if (item.MaterialCode.Length <= lenCode) { continue; } string tempCode = item.MaterialCode.Substring(lenCode); if (int.TryParse(tempCode, out indexCode)) { indexCode++; aimCode = string.Concat(source.MaterialCode, "copy", indexCode.ToString().PadLeft(2, '0')); if (sameCode.Any(p => p.MaterialCode == aimCode)) { aimCode = string.Empty; } else { break; } } } if (aimCode == string.Empty) { aimCode = string.Concat(source.MaterialCode, "copy01"); } if (aimName.Length > 50) { throw new Exception($"'{source.MaterialName}'物料名称复制后大于50,不允许复制"); } if (aimCode.Length > 20) { throw new Exception($"'{source.MaterialCode}'物料代码复制后大于20,不允许复制"); } source.MaterialCode = aimCode; source.MaterialName = aimName; source.ID = 0; _db.Instance.Insertable <TBMMaterialFileDbModel>(source).ExecuteCommand(); } } _db.Instance.CommitTran(); ClearCache(currentUser); return(ResponseUtil <bool> .SuccessResult(true)); } catch (Exception ex) { _db.Instance.RollbackTran(); return(ResponseUtil <bool> .FailResult(false, ex.Message)); } }