Ejemplo n.º 1
0
        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));
            }
        }