/// <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(); AssSalesInputDto inputDto = new AssSalesInputDto { SOID = txtSOID.Text, UserId = UserId, sns = snList }; rInfo = _autofacConfig.AssSalesOrderService.SaleAss(inputDto); if (rInfo.IsSuccess) { ShowResult = ShowResult.Yes; // Toast("出库成功!"); snList.Clear(); SNTable.Rows.Clear(); var so = _autofacConfig.AssSalesOrderService.GetById(txtSOID.Text); if (so != null) { if (IsFromSO) { if (so.STATUS == (int)SalesOrderStatus.已完成) { Toast("出库完成!"); Close(); } else { Toast("出库成功!"); } } else { if (so.STATUS == (int)SalesOrderStatus.已完成) { Toast("出库完成!"); txtSOID.Text = ""; txtSOID.Tag = null; } else { Toast("出库成功!"); } } } } else { Toast(rInfo.ErrorInfo); } } catch (Exception ex) { Toast(ex.Message); } }
/// <summary> /// 销售资产 /// </summary> /// <param name="inputDto">相关信息</param> /// <returns></returns> public ReturnInfo SaleAss(AssSalesInputDto inputDto) { ReturnInfo RInfo = new ReturnInfo(); StringBuilder sb = new StringBuilder(); try { //先判断所有sn是否在库 //先得到所有在库的sn集合 var allInSn = _AssetsRepository.GetAll().Where(a => a.ISINWAREHOUSE == 1).Select(a => a.SN).ToList(); foreach (var sn in inputDto.sns) { if (!allInSn.Contains(sn)) { RInfo.IsSuccess = false; RInfo.ErrorInfo = "序列号" + sn + "不在库!"; return(RInfo); } } //根据sns,得到<templateId,sn数>的Dictionary var assDictionary = _AssetsRepository.GetCountBySnList(inputDto.sns); //记录现在追加的行项完成数 int nowComplete = 0; //更改Row中的数值 foreach (var templateId in assDictionary.Keys) { var row = _assSoRowRepository.GetBySOIDandTemplateID(inputDto.SOID, templateId).FirstOrDefault(); if (row != null) { row.QUANTOUT = row.QUANTOUT + assDictionary[templateId]; if (row.QUANTSALED < row.QUANTOUT) { RInfo.IsSuccess = false; RInfo.ErrorInfo = "模板" + templateId + "的出库量出过销售量!"; return(RInfo); } else { if (row.QUANTSALED == row.QUANTOUT) { row.STATUS = (int)SalesOrderStatus.已完成; nowComplete++; } else { row.STATUS = (int)SalesOrderStatus.出库中; } } _unitOfWork.RegisterDirty(row); } } var assSo = _assSalesOrderRepository.GetById(inputDto.SOID).FirstOrDefault(); if (assSo != null) { assSo.STATUS = (int)SalesOrderStatus.出库中; //得到采购单未完成行项数 var uncompleteCount = _assSoRowRepository.GetBySOID(inputDto.SOID).Count(a => a.STATUS != (int)SalesOrderStatus.已完成); if (uncompleteCount == nowComplete) { //如果全部完成了,修改销售单状态为"已完成" assSo.STATUS = (int)SalesOrderStatus.已完成; _unitOfWork.RegisterDirty(assSo); } } //更改Assets表中的状态为不在库 var allList = _AssetsRepository.GetAll().Select(a => a.SN).ToList(); List <string> bothList = allList.Intersect(inputDto.sns).ToList(); var assets = _AssetsRepository.GetAll().Where(a => bothList.Contains(a.SN)); //遍历,修改状态为已不在库 foreach (var asset in assets) { //修改状态为已不在库 asset.ISINWAREHOUSE = 0; _unitOfWork.RegisterDirty(asset); //添加出货关联表 AssSalesOrderOutbound soOutbound = new AssSalesOrderOutbound() { SOID = inputDto.SOID, SN = asset.SN, TEMPLATEID = asset.TEMPLATEID, // Time = DateTime.Now }; _unitOfWork.RegisterNew(soOutbound); 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); } }