Exemple #1
0
 /// <summary>
 /// 退库
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnSave_Press(object sender, EventArgs e)
 {
     try
     {
         string WareId = "";
         string STID   = "";
         string SLID   = "";
         if (txtSLID.Tag != null)
         {
             string[] Ids = txtSLID.Tag.ToString().Split('/');
             if (Ids.Length == 3)
             {
                 WareId = Ids[0];
                 STID   = Ids[1];
                 SLID   = Ids[2];
             }
             else
             {
                 throw new Exception("请输入正确的");
             }
         }
         else
         {
             throw new Exception("请先选择库位!");
         }
         if (snList.Count == 0)
         {
             throw new Exception("请添加要退库的序列号!");
         }
         ReturnInfo          rInfo    = new ReturnInfo();
         AssRetiringInputDto inputDto = new AssRetiringInputDto
         {
             SOID   = txtSOID.Text,
             SLID   = SLID,
             STID   = STID,
             WAREID = WareId,
             UserId = UserId,
             SnList = snList
         };
         rInfo = _autofacConfig.AssSalesOrderService.RetiringAss(inputDto);
         if (rInfo.IsSuccess)
         {
             ShowResult = ShowResult.Yes;
             Toast("退库成功!");
             if (IsFromSO)
             {
                 Close();
             }
         }
         else
         {
             Toast(rInfo.ErrorInfo);
         }
     }
     catch (Exception ex)
     {
         Toast(ex.Message);
     }
 }
        /// <summary>
        /// 销售退库
        /// </summary>
        /// <param name="inputDto">销售退库相关信息</param>
        /// <returns></returns>
        public ReturnInfo RetiringAss(AssRetiringInputDto inputDto)
        {
            //
            ReturnInfo    RInfo = new ReturnInfo();
            StringBuilder sb    = new StringBuilder();

            string ValidateInfo = Helper.BasicValidate(inputDto).ToString();

            sb.Append(ValidateInfo);
            if (sb.Length == 0)
            {
                try
                {
                    //先根据SOID,得到<templateId,List<sn>>的Dictionary

                    //取得各个templateId有多少SN

                    //更改Row中的数值

                    //更改Assets表中的状态为在库,库位等对应修改
                    //根据sns,得到<templateId,sn数>的Dictionary
                    string SOID  = inputDto.SOID;
                    var    allSn = from outbound in SMOWMSDbContext.AssSalesOrderOutbounds
                                   join assetse in SMOWMSDbContext.Assetss on outbound.SN equals assetse.SN
                                   where assetse.ISINWAREHOUSE == 0 && outbound.SOID == SOID
                                   select outbound.SN;
                    List <string> allList = allSn.ToList();
                    //更改Row中的数值
                    List <string> bothList      = allList.Intersect(inputDto.SnList).ToList();
                    var           assDictionary = _AssetsRepository.GetCountBySnListEx(bothList);
                    foreach (var templateId in assDictionary.Keys)
                    {
                        var row = _assSoRowRepository.GetBySOIDandTemplateID(inputDto.SOID, templateId).FirstOrDefault();
                        if (row != null)
                        {
                            row.QUANTRETREATED = row.QUANTRETREATED + assDictionary[templateId];
                            _unitOfWork.RegisterDirty(row);
                        }
                    }
                    //更改Assets表中的状态为在库

                    var assets = _AssetsRepository.GetAll().Where(a => bothList.Contains(a.SN));

                    //遍历,修改状态为在库

                    foreach (var asset in assets)
                    {
                        //修改状态为在库
                        asset.ISINWAREHOUSE = 1;
                        asset.WAREID        = inputDto.WAREID;
                        asset.STID          = inputDto.STID;
                        asset.SLID          = inputDto.SLID;
                        _unitOfWork.RegisterDirty(asset);
                        //添加出货关联表
                        AssSalesOrderRetiring soRetiring = new AssSalesOrderRetiring()
                        {
                            SOID       = SOID,
                            SN         = asset.SN,
                            TEMPLATEID = asset.TEMPLATEID,
//                            Time = DateTime.Now
                        };
                        _unitOfWork.RegisterNew(soRetiring);

                        var pr = new AssProcessRecord
                        {
                            ASSID          = asset.ASSID,
                            CREATEDATE     = DateTime.Now,
                            CREATEUSER     = inputDto.UserId,
                            HANDLEDATE     = DateTime.Now,
                            HANDLEMAN      = inputDto.UserId,
                            MODIFYDATE     = DateTime.Now,
                            MODIFYUSER     = inputDto.UserId,
                            PROCESSCONTENT = inputDto.UserId + "退库了" + asset.ASSID + ",数量为1",
                            PROCESSMODE    = (int)PROCESSMODE.退库,
                            QUANTITY       = 1
                        };
                        _unitOfWork.RegisterNew(pr);
                    }
                    bool result = _unitOfWork.Commit();
                    RInfo.IsSuccess = result;
                    RInfo.ErrorInfo = "";
                    return(RInfo);
                }
                catch (Exception ex)
                {
                    _unitOfWork.Rollback();
                    sb.Append(ex.Message);
                    RInfo.IsSuccess = false;
                    RInfo.ErrorInfo = sb.ToString();
                    return(RInfo);
                }
            }
            else
            {
                RInfo.IsSuccess = false;
                RInfo.ErrorInfo = sb.ToString();
                return(RInfo);
            }
        }