/// <summary> /// 退货 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Press(object sender, EventArgs e) { try { if (snList.Count == 0) { throw new Exception("请添加要退货的序列号!"); } ReturnInfo rInfo = new ReturnInfo(); AssReturnInputDto inputDto = new AssReturnInputDto { POID = txtPOID.Text, UserId = UserId, sns = snList }; rInfo = _autofacConfig.AssPurchaseOrderService.ReturnAss(inputDto); if (rInfo.IsSuccess) { ShowResult = ShowResult.Yes; Toast("退货成功!"); if (IsFromPO) { Close(); } } else { Toast(rInfo.ErrorInfo); } } catch (Exception ex) { Toast(ex.Message); } }
/// <summary> /// 采购退货 /// </summary> /// <param name="inputDto">采购退货相关信息</param> /// <returns></returns> public ReturnInfo ReturnAss(AssReturnInputDto inputDto) { ReturnInfo RInfo = new ReturnInfo(); StringBuilder sb = new StringBuilder(); try { //先从Asset表得到属于这个POID的资产的全部SN,放入List<string> var allSn = from instorage in SMOWMSDbContext.AssPurchaseOrderInstorages join assetse in SMOWMSDbContext.Assetss on instorage.SN equals assetse.SN where assetse.ISINWAREHOUSE == 1 && instorage.POID == inputDto.POID select instorage.SN; List <string> allList = allSn.ToList(); //2个List<string>取交集,如果所传的SN都包括,则继续 List <string> bothList = allList.Intersect(inputDto.sns).ToList(); //取出SN在范围内的所有资产 var assets = _assetsRepository.GetAll().Where(a => bothList.Contains(a.SN)); //遍历,修改状态为已不在库 foreach (var asset in assets) { //修改状态为已不在库 asset.ISINWAREHOUSE = 0; _unitOfWork.RegisterDirty(asset); //添加退货关联表 AssPurchaseOrderReturn poReturn = new AssPurchaseOrderReturn { POID = inputDto.POID, SN = asset.SN, TEMPLATEID = asset.TEMPLATEID, // Time = DateTime.Now }; _unitOfWork.RegisterNew(poReturn); 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); } var countDictionary = _assetsRepository.GetCountBySnList(bothList); if (countDictionary != null) { foreach (var templateId in countDictionary.Keys) { var asspoRow = _assPoRowRepository.GetByPOIDandTemplateID(inputDto.POID, templateId) .FirstOrDefault(); if (asspoRow != null) { asspoRow.QUANTRETREATED = asspoRow.QUANTRETREATED + countDictionary[templateId]; _unitOfWork.RegisterDirty(asspoRow); } } } 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); } }