using Newtonsoft.Json; using NLog; using POSV.Card; using POSV.Proxy.Base; using POSV.Proxy.Common; using POSV.Stock; using POSV.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using static POSV.Proxy.Common.CefOperationDelegation; namespace POSV.Proxy.Stock { public class CostControlList : FromBase { public CostControlList() { this.LOGGER = LogManager.GetLogger(GetType().FullName); } //==========================全局变量=========================== private readonly Logger LOGGER = null; private string m_displayType = "新增"; private StoreCostTicketDetailResponse storeCostTicketDetailResponse = new StoreCostTicketDetailResponse(); /// /// 状态 /// public int m_Status = -1;//状态 /// /// 选中的单据ID /// public string m_TicketId = null;//选中的单据ID /// /// 单号 /// public string m_No = null;//单号 /// /// 查询开始时间 /// public DateTime m_StartPicker = Convert.ToDateTime(DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd 00:00:00")); /// /// 查询结束时间 /// public DateTime m_EndPicker = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")); /// /// 分页参数 /// public PageObject m_pageObject = new PageObject(); /// /// 最后汇总时间 /// public const string FINALSUMMARYTIME = "FinalSummaryTime"; /// /// 单据信息数据 /// public List m_ProductList = null; public string m_SummData = ""; /// /// 状态string /// public string StatusStr { get { switch (m_Status) { case 0: return "待审核"; case 1: return "已审核"; case 2: return "已作废"; default: return "全部"; } } } /// /// 页面类型 /// public string DisplayType { get => m_displayType; set => m_displayType = value; } /// /// 当前单据数据 /// public StoreCostTicketDetailResponse StoreCostTicketDetailResponse { get => storeCostTicketDetailResponse; set => storeCostTicketDetailResponse = value; } public string GetStoreCostTicketDetailResponse() { return JsonConvert.SerializeObject(StoreCostTicketDetailResponse); } /// /// 辅助 /// public void AuxiliaryTABKey() { InputSimulatorUtils.SendKey(KeyCodes.Map["tab"]); } /// /// 跳转 /// public void LoadModule(string str) { if (string.IsNullOrEmpty(str)) { return; } if (this.m_LoadPageEvent == null) { return; } switch (str) { case "新增经营会计报表": this.m_LoadPageEvent("custom://form/AddCostControl.html"); break; case "经营会计报表": this.m_LoadPageEvent("custom://form/CostControlList.html"); break; case "审核经营会计报表": this.m_LoadPageEvent("custom://form/AddCostControl.html"); break; case "修改经营会计报表": this.m_LoadPageEvent("custom://form/AddCostControl.html"); break; case "查看经营会计报表": this.m_LoadPageEvent("custom://form/AddCostControl.html"); break; default: this.m_LoadPageEvent("custom://form/CostControlList.html"); break; } } /// /// 前端传入 查询参数 /// public void SetQueryCondition(string _status, string _no, string _startPicker, string _endPicker) { int status = -1; int.TryParse(_status, out status); this.m_Status = status; this.m_No = _no; if (!string.IsNullOrEmpty(_startPicker) && !string.IsNullOrEmpty(_endPicker)) { this.m_StartPicker = DateTime.Parse(_startPicker); this.m_EndPicker = DateTime.Parse(_endPicker); } } /// /// 获取查询参数 /// /// public string GetQueryCondition() { ReturnInfo returnInfo = new ReturnInfo(); var _data = new { No = m_No, Status = m_Status, StartPicker = m_StartPicker.ToString("yyyy-MM-dd HH:mm:ss"), EndPicker = m_EndPicker.ToString("yyyy-MM-dd HH:mm:ss") }; returnInfo.Code = ReturnState.Succeed; returnInfo.Data = _data; return JsonConvert.SerializeObject(returnInfo); } /// /// 查询单据 /// public string BtnQuery() { return JsonConvert.SerializeObject(this.CostControlListQuery()); } /// /// 获取经营成本模板 /// /// 汇总日期 public string GetTicketTemplate() { if (this.DisplayType == "审核" || this.DisplayType == "查看") { this.UpdataStoreCostTicketDetailResponse(); ReturnInfo _Return = new ReturnInfo(); _Return.Code = 0; this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f => { f.NotCalculate = true; }); this.StoreCostTicketDetailResponse.ProductChange.ForEach(f => { f.NotCalculate = true; }); _Return.Data = this.StoreCostTicketDetailResponse; return JsonConvert.SerializeObject(_Return); } else if (this.DisplayType == "修改") { this.UpdataStoreCostTicketDetailResponse(); ReturnInfo _Return = new ReturnInfo(); _Return.Code = 0; var _data = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(this.StoreCostTicketDetailResponse)); this.TicketTemplateQuery(DateTime.Parse(StoreCostTicketDetailResponse.SummaryDate)); this.StoreCostTicketDetailResponse.No = _data.No; this.StoreCostTicketDetailResponse.CreateDate = _data.CreateDate; this.StoreCostTicketDetailResponse.ProductChange.ForEach(f => { if (f.CostType == 0) { var _todayStock = _data.ProductChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.TodayStock; f.TodayStock = _todayStock == null ? 0 : (decimal)_todayStock; } else if (f.CostType == 1) { var _todayIn = _data.ProductChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.TodayIn; f.TodayIn = _todayIn == null ? 0 : (decimal)_todayIn; } else { var _cost = _data.ProductChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.Cost; f.Cost = _cost == null ? 0 : (decimal)_cost; } }); this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f => { if (f.CostType == 0) { var _todayStock = _data.ProductMoreChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.TodayStock; f.TodayStock = _todayStock == null ? 0 : (decimal)_todayStock; } else if (f.CostType == 1) { var _todayIn = _data.ProductMoreChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.TodayIn; f.TodayIn = _todayIn == null ? 0 : (decimal)_todayIn; } else { var _cost = _data.ProductMoreChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.Cost; f.Cost = _cost == null ? 0 : (decimal)_cost; } }); this.StoreCostTicketDetailResponse.ProductFixedChange.ForEach(f => { var _money = _data.ProductFixedChange.FirstOrDefault(a => a.ItemId == f.ItemId)?.Money; f.Money = _money == null ? 0 : (decimal)_money; }); this.StoreCostTicketDetailResponse.ProductOtherChange.ForEach(f => { var _money = _data.ProductOtherChange.FirstOrDefault(a => a.ItemId == f.ItemId)?.Money; f.Money = _money == null ? 0 : (decimal)_money; }); _Return.Data = this.StoreCostTicketDetailResponse; return JsonConvert.SerializeObject(_Return); } else { return JsonConvert.SerializeObject(this.TicketTemplateQuery(GetChoosableDate())); } } /// /// 最后可汇总时间 /// public DateTime GetChoosableDate() { DateTime _itme = DateTime.Now; if (string.IsNullOrEmpty(this.m_SummData)) { if (!string.IsNullOrEmpty(Global.Instance.GlobalConfigStringValue(FINALSUMMARYTIME))) { try { _itme = DateTime.Parse(Global.Instance.GlobalConfigStringValue(FINALSUMMARYTIME)); } catch { } } } else { _itme = DateTime.Parse(this.m_SummData); this.m_SummData = string.Empty; } return _itme; } /// /// ProductChange计算后数据 /// public string SetProductCalculate(string StrJson) { return JsonConvert.SerializeObject(this.ProductCalculate(StrJson)); } /// /// ProductMore计算后数据 /// public string SetProductMoreCalculate(string StrJson) { return JsonConvert.SerializeObject(this.ProductMoreCalculate(StrJson)); } /// /// ProductOther计算后数据 /// public string SetProductOtherCalculate(string StrJson) { return JsonConvert.SerializeObject(this.ProductOtherCalculate(StrJson)); } /// /// ProductFixedChange计算后数据 /// public string SetProductFixedChangeCalculate(string StrJson) { return JsonConvert.SerializeObject(this.ProductFixedChangeCalculate(StrJson)); } public string GetProductCalculateData(string id) { ReturnInfo returnInfo = new ReturnInfo(); var _data = this.StoreCostTicketDetailResponse.ProductChange.FirstOrDefault(f => f.ProductId == id); if (_data == null) { returnInfo.ErrorMessage = "编辑的商品无法找到源数据"; return JsonConvert.SerializeObject(returnInfo); } returnInfo.Data = _data; returnInfo.Code = ReturnState.Succeed; return JsonConvert.SerializeObject(returnInfo); } public string GetProductMoreCalculateData(string id) { ReturnInfo returnInfo = new ReturnInfo(); var _data = this.StoreCostTicketDetailResponse.ProductMoreChange.FirstOrDefault(f => f.ProductId == id); if (_data == null) { returnInfo.ErrorMessage = "编辑的商品无法找到源数据"; return JsonConvert.SerializeObject(returnInfo); } returnInfo.Data = _data; returnInfo.Code = ReturnState.Succeed; return JsonConvert.SerializeObject(returnInfo); } public string GetProductOtherCalculateData(string id) { ReturnInfo returnInfo = new ReturnInfo(); var _data = this.StoreCostTicketDetailResponse.ProductOtherChange.FirstOrDefault(f => f.ItemId == id); if (_data == null) { returnInfo.ErrorMessage = "编辑的项无法找到源数据"; return JsonConvert.SerializeObject(returnInfo); } returnInfo.Data = _data; returnInfo.Code = ReturnState.Succeed; return JsonConvert.SerializeObject(returnInfo); } public string GetProductFixedChangeCalculateData(string id) { ReturnInfo returnInfo = new ReturnInfo(); var _data = this.StoreCostTicketDetailResponse.ProductFixedChange.FirstOrDefault(f => f.ItemId == id); if (_data == null) { returnInfo.ErrorMessage = "编辑的项无法找到源数据"; return JsonConvert.SerializeObject(returnInfo); } returnInfo.Data = _data; returnInfo.Code = ReturnState.Succeed; return JsonConvert.SerializeObject(returnInfo); } /// /// 退出 /// public void BtnExit() { } /// /// 保存 /// public string Save() { ReturnInfo m_request = new ReturnInfo(); StoreCostTicketSaveRequest saveRequest = new StoreCostTicketSaveRequest(); saveRequest.StoreId = Global.Instance.Authc.StoreId; saveRequest.Operator = Global.Instance.BusinessPlanLog.WorkerNo; saveRequest.storeCostTicketDetailResponse = this.StoreCostTicketDetailResponse; var _data = StockUtils.StoreCostTicketSave(saveRequest); if (_data.Item1) { m_request.Code = ReturnState.Succeed; } else { if (_data.Item3 != null) { m_request.ErrorMessage = _data.Item3.Message; } else { m_request.ErrorMessage = _data.Item2; } } return JsonConvert.SerializeObject(m_request); } /// /// 选中当前行 /// /// public void SetSelectedRow(string _TicketId) { this.m_TicketId = _TicketId; } /// /// 审核单据 /// /// public string AuditStoreCostTicket() { StoreCostTicketUpdateStatusRequest storeCostTicketUpdate = new StoreCostTicketUpdateStatusRequest(); storeCostTicketUpdate.Operator = Global.Instance.BusinessPlanLog.WorkerNo;//制单人 storeCostTicketUpdate.StoreId = Global.Instance.Authc.StoreId; storeCostTicketUpdate.TicketId = this.StoreCostTicketDetailResponse.Id; storeCostTicketUpdate.Type = 1; return JsonConvert.SerializeObject(this.StoreCostTicketUpdateStatusResponse(storeCostTicketUpdate)); } public string Cancellation() { StoreCostTicketUpdateStatusRequest storeCostTicketUpdate = new StoreCostTicketUpdateStatusRequest(); storeCostTicketUpdate.Operator = Global.Instance.BusinessPlanLog.WorkerNo;//制单人 storeCostTicketUpdate.StoreId = Global.Instance.Authc.StoreId; storeCostTicketUpdate.TicketId = this.m_TicketId; storeCostTicketUpdate.Type = 2; return JsonConvert.SerializeObject(this.StoreCostTicketUpdateStatusResponse(storeCostTicketUpdate)); } public string StoreCostTicketUpdate() { StoreCostTicketUpdateRequest storeCostTicketUpdate = new StoreCostTicketUpdateRequest(); storeCostTicketUpdate.storeCostTicketDetailResponse = this.StoreCostTicketDetailResponse; storeCostTicketUpdate.StoreId = Global.Instance.Authc.StoreId; storeCostTicketUpdate.Operator = Global.Instance.BusinessPlanLog.WorkerNo; return JsonConvert.SerializeObject(this.StoreCostTicketUpdate(storeCostTicketUpdate)); } public void UpdataStoreCostTicketDetailResponse() { if (!string.IsNullOrEmpty(this.m_TicketId)) { StoreCostTicketDetail(this.m_TicketId); } } public void SetSummData(string _summData) { this.m_SummData = _summData; this.m_ReloadFormEvent(); } public void SetDescription(string str) { this.StoreCostTicketDetailResponse.Description = str; } //==========================私有函数=========================== /// /// 查询数据 /// private ReturnInfo> CostControlListQuery() { ReturnInfo> _Return = new ReturnInfo>(); try { var request = new StoreCostTicketRequest(); request.StoreId = Global.Instance.Authc.StoreId; if (!string.IsNullOrEmpty(this.m_No)) { request.No = this.m_No; request.Status = -1; } else { request.Status = this.m_Status; request.StartTime = this.m_StartPicker.ToString("yyyy-MM-dd HH:mm:ss"); request.EndTime = this.m_EndPicker.ToString("yyyy-MM-dd HH:mm:ss"); } request.PageNumber = this.m_pageObject.PageNumber; request.PageSize = this.m_pageObject.PageSize; var response = StockUtils.StoreCostTicket(request); //成功 if (response.Item1) { List storeCostTicketResponse = response.Item3.List; foreach (StoreCostTicketResponse ticketResponse in storeCostTicketResponse) { switch (ticketResponse.Status) { case 0: ticketResponse.StatusName = "待审核"; break; case 1: ticketResponse.StatusName = "已审核"; break; case 2: ticketResponse.StatusName = "已作废"; break; default: ticketResponse.StatusName = "其他"; break; } } this.m_pageObject.PageCount = response.Item3.PageCount; this.m_pageObject.PageNumber = response.Item3.PageNumber; this.m_pageObject.TotalCount = response.Item3.TotalCount; // this.m_pageObject.PageSize = response.Item3.PageSize; _Return.Data = storeCostTicketResponse.OrderByDescending(f => f.CreateDate).ToList(); _Return.Code = ReturnState.Succeed; return _Return; } else { _Return.ErrorMessage = response.Item2; return _Return; } } catch (Exception ex) { LOGGER.Error(ex, "经营会计报表查询异常"); _Return.ErrorMessage = ex.Message; return _Return; } } /// /// 获取模板 /// /// 汇总日期 private ReturnInfo TicketTemplateQuery(DateTime summData) { ReturnInfo _Return = new ReturnInfo(); List ProductChangeList = null; List MoreChangeList = null; List OtherChangeList = null; List FixedChangeList = null; List ProductTypeList = null; List PayTypeList = null; string amount = string.Format("{0}", 0.00M); string discountAmount = string.Format("{0}", 0.00M); string receivableAmount = string.Format("{0}", 0.00M); string ticketCount = string.Format("{0}", 0); string peoplePrice = string.Format("{0}", 0.00M); string boxAmount = string.Format("{0}", 0.00M); string workerAmount = string.Format("{0}", 0.00M); //第一步加载主单数据 var busNo = string.Format("K{0}{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), Global.Instance.BusinessPlanLog.PosNo);//单据编号 var storeName = Global.Instance.Worker.StoreInfo.Name;//门店名称 var setMan = Global.Instance.BusinessPlanLog.WorkerNo;//制单人 var setDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//制单时间 var dateInputPicker = summData;//汇总日期 var status = "新建"; var totalCost = string.Format("{0}", 0.00M); var profit = string.Format("{0}", 0.00M); #region 获取汇总数据 var request = new StoreCostTicketSalesinfoRequest(); request.StoreId = Global.Instance.Authc.StoreId; request.Date = summData.ToString("yyyy-MM-dd"); var response = StockUtils.StoreCostTicketSalesinfo(request); if (response.Item1) { if (response.Item3.Data == null) { _Return.ErrorMessage = "汇总数据获取失败," + response.Item2; ProductTypeList = new List(); PayTypeList = new List(); m_ProductList = new List(); } else { //营业额 amount = string.Format("{0}", response.Item3.Data.Amount); //折扣金额 discountAmount = string.Format("{0}", response.Item3.Data.DiscountAmount); //应收金额 receivableAmount = string.Format("{0}", response.Item3.Data.ReceivableAmount); //单数 ticketCount = string.Format("{0}", response.Item3.Data.TicketCount); //客单价 peoplePrice = string.Format("{0}", response.Item3.Data.PeoplePrice); //餐盒费 boxAmount = string.Format("{0}", response.Item3.Data.BoxAmount); //员工餐 workerAmount = string.Format("{0}", response.Item3.Data.WorkerAmount); //第六步加载分类汇总 ProductTypeList = response.Item3.Data.ProductTypeList; //第七步加载支付方式汇总 PayTypeList = response.Item3.Data.PayTypeList; //第八步加载单品销售信息 m_ProductList = response.Item3.Data.ProductList; } } else { _Return.ErrorMessage = "汇总数据获取失败," + response.Item2; return _Return; } #endregion #region 获取成本模板 var request1 = new StoreCostTicketTemplateInfoRequest(); request1.StoreId = Global.Instance.Authc.StoreId; request1.DateTime = summData.ToString("yyyy-MM-dd"); var response1 = StockUtils.StoreCostTicketTemplateInfo(request1); if (response1.Item1) { if (response1.Item3.Data == null) { _Return.ErrorMessage = "成本数据获取失败," + response.Item2; } else { //第二步加载生产变动成本模板数据 ProductChangeList = response1.Item3.Data.ProductChangeList; //第三步加载辅助生产变动成本模板数据 MoreChangeList = response1.Item3.Data.MoreChangeList; //第四步加载其他变动费用成本模板数据 OtherChangeList = response1.Item3.Data.OtherChangeList; //第五步加载固定费成本模板数据 FixedChangeList = response1.Item3.Data.FixedChangeList; } } else { _Return.ErrorMessage = "成本数据获取失败," + response.Item2; return _Return; } #endregion this.StoreCostTicketDetailResponse.TenantId = Global.Instance.Worker.StoreInfo.TenantId; this.StoreCostTicketDetailResponse.No = busNo; this.StoreCostTicketDetailResponse.StoreNo = Global.Instance.Worker.StoreInfo.No; this.StoreCostTicketDetailResponse.StoreName = storeName; this.StoreCostTicketDetailResponse.Status = 0; this.StoreCostTicketDetailResponse.Amount = decimal.Parse(amount); this.StoreCostTicketDetailResponse.DiscountAmount = decimal.Parse(discountAmount); this.StoreCostTicketDetailResponse.BoxAmount = decimal.Parse(boxAmount); this.StoreCostTicketDetailResponse.WorkerAmount = decimal.Parse(workerAmount); this.StoreCostTicketDetailResponse.SummaryDate = summData.ToString("yyyy-MM-dd"); this.StoreCostTicketDetailResponse.CreateUser = setMan; this.StoreCostTicketDetailResponse.CreateDate = setDate; this.StoreCostTicketDetailResponse.ReceivableAmount = decimal.Parse(receivableAmount); this.StoreCostTicketDetailResponse.CheckPeople = ""; this.StoreCostTicketDetailResponse.TicketCount = int.Parse(ticketCount); this.StoreCostTicketDetailResponse.PeoplePrice = decimal.Parse(peoplePrice); this.StoreCostTicketDetailResponse.ProductType = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(response.Item3.Data?.ProductTypeList)); this.StoreCostTicketDetailResponse.PayType = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(response.Item3.Data?.PayTypeList)); this.StoreCostTicketDetailResponse.ProductChange = this.ToProductChange(response1.Item3.Data.ProductChangeList, summData.ToString("yyyy-MM-dd")); this.StoreCostTicketDetailResponse.ProductMoreChange = this.ToProductMoreChange(response1.Item3.Data.MoreChangeList, summData.ToString("yyyy-MM-dd")); this.StoreCostTicketDetailResponse.ProductOtherChange = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(response1.Item3.Data.OtherChangeList)); this.StoreCostTicketDetailResponse.ProductFixedChange = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(response1.Item3.Data.FixedChangeList)); if (this.DisplayType.Equals("新增")) { this.StoreCostTicketDetailResponse.ProductOtherChange.ForEach(f => { f.Money = 0.00M; }); this.StoreCostTicketDetailResponse.ProductChange.ForEach(f => { if (f.CostType == 1) { f.PosUse = 0; f.TodayStock = 0; f.TodayUse = 0; f.TodayIn = 0; } if (f.CostType == 2) { f.PosUse = 0; f.TodayIn = 0; f.TodayStock = 0; f.TodayUse = 0; f.Cost = 0; } }); this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f => { if (f.CostType == 1) { f.PosUse = 0; f.TodayIn = 0; f.TodayStock = 0; f.TodayUse = 0; } if (f.CostType == 2) { f.PosUse = 0; f.TodayIn = 0; f.TodayStock = 0; f.TodayUse = 0; f.Cost = 0; } }); } else if (this.DisplayType.Equals("修改")) { this.StoreCostTicketDetailResponse.ProductChange.ForEach(f => { if (f.CostType == 1) { f.PosUse = 0; f.TodayStock = 0; f.TodayUse = 0; } if (f.CostType == 2) { f.PosUse = 0; f.TodayIn = 0; f.TodayStock = 0; f.TodayUse = 0; } }); this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f => { if (f.CostType == 1) { f.PosUse = 0; f.TodayStock = 0; f.TodayUse = 0; } if (f.CostType == 2) { f.PosUse = 0; f.TodayIn = 0; f.TodayStock = 0; f.TodayUse = 0; } }); } if (this.StoreCostTicketDetailResponse.PayType == null) { this.StoreCostTicketDetailResponse.PayType = new List(); } if (this.StoreCostTicketDetailResponse.ProductType == null) { this.StoreCostTicketDetailResponse.ProductType = new List(); } _Return.Data = this.StoreCostTicketDetailResponse; _Return.Code = 0; return _Return; } /// /// ProductChange计算后数据 /// /// 编辑JSON Data private ReturnInfo ProductCalculate(string StrJson) { ReturnInfo returnInfo = new ReturnInfo(); try { var _data = JsonConvert.DeserializeObject(StrJson); if (_data == null) { returnInfo.ErrorMessage = "传入的数据为空或者不能正确解析"; return returnInfo; } var _source = this.StoreCostTicketDetailResponse.ProductChange.FirstOrDefault(f => f.ProductId == _data.ProductId); if (_source == null) { returnInfo.ErrorMessage = "编辑的商品无法找到源数据"; return returnInfo; } if (this.StoreCostTicketDetailResponse.ProductChange.Remove(_source)) { _source.TodayStock = _data.TodayStock; _source.TodayIn = _data.TodayIn; if (_source.CostType == 2) { _source.Cost = _data.Cost; } } //加入计算 this.StoreCostTicketDetailResponse.ProductChange.Add(_source); this.StoreCostTicketDetailResponse.ProductChange.ForEach(f => { f.SalePro = decimal.Round((f.Cost / this.StoreCostTicketDetailResponse.TotalCost) * 100, 2); f.DifStandard = decimal.Round((f.SalePro - f.Standard), 2); }); returnInfo.Code = ReturnState.Succeed; returnInfo.Data = _source; return returnInfo; } catch (Exception ex) { returnInfo.ErrorMessage = ex.Message; return returnInfo; } } /// /// ProductMore计算后数据 /// private ReturnInfo ProductMoreCalculate(string StrJson) { ReturnInfo returnInfo = new ReturnInfo(); try { var _data = JsonConvert.DeserializeObject(StrJson); if (_data == null) { returnInfo.ErrorMessage = "传入的数据为空或者不能正确解析"; return returnInfo; } var _source = this.storeCostTicketDetailResponse.ProductMoreChange.FirstOrDefault(f => f.ProductId == _data.ProductId); if (_source == null) { returnInfo.ErrorMessage = "编辑的商品无法找到源数据"; return returnInfo; } if (this.storeCostTicketDetailResponse.ProductMoreChange.Remove(_source)) { _source.TodayStock = _data.TodayStock; _source.TodayIn = _data.TodayIn; if (_source.CostType == 2) { _source.Cost = _data.Cost; } } //加入计算 this.storeCostTicketDetailResponse.ProductMoreChange.Add(_source); this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f => { f.SalePro = decimal.Round((f.Cost / this.StoreCostTicketDetailResponse.TotalCost) * 100.00M, 2); f.DifStandard = decimal.Round((f.SalePro - f.Standard), 2); }); returnInfo.Code = ReturnState.Succeed; returnInfo.Data = _source; return returnInfo; } catch (Exception ex) { returnInfo.ErrorMessage = ex.Message; return returnInfo; } } /// /// ProductOther计算后数据 /// private ReturnInfo ProductOtherCalculate(string StrJson) { ReturnInfo returnInfo = new ReturnInfo(); try { var _data = JsonConvert.DeserializeObject(StrJson); if (_data == null) { returnInfo.ErrorMessage = "传入的数据为空或者不能正确解析"; return returnInfo; } var _source = this.storeCostTicketDetailResponse.ProductOtherChange.FirstOrDefault(f => f.ItemId == _data.ItemId); if (_source == null) { returnInfo.ErrorMessage = "编辑的向无法找到源数据"; return returnInfo; } if (this.storeCostTicketDetailResponse.ProductOtherChange.Remove(_source)) { _source.Money = _data.Money; } //加入计算 this.storeCostTicketDetailResponse.ProductOtherChange.Add(_source); returnInfo.Code = ReturnState.Succeed; returnInfo.Data = _source; return returnInfo; } catch (Exception ex) { returnInfo.ErrorMessage = ex.Message; return returnInfo; } } /// /// ProductFixedChange计算后数据 /// private ReturnInfo ProductFixedChangeCalculate(string strJson) { ReturnInfo returnInfo = new ReturnInfo(); try { var _data = JsonConvert.DeserializeObject(strJson); if (_data == null) { returnInfo.ErrorMessage = "传入的数据为空或者不能正确解析"; return returnInfo; } var _source = this.storeCostTicketDetailResponse.ProductFixedChange.FirstOrDefault(f => f.ItemId == _data.ItemId); if (_source == null) { returnInfo.ErrorMessage = "编辑的向无法找到源数据"; return returnInfo; } if (this.storeCostTicketDetailResponse.ProductFixedChange.Remove(_source)) { _source.Money = _data.Money; } //加入计算 this.storeCostTicketDetailResponse.ProductFixedChange.Add(_source); returnInfo.Code = ReturnState.Succeed; returnInfo.Data = _source; return returnInfo; } catch (Exception ex) { returnInfo.ErrorMessage = ex.Message; return returnInfo; } } private ReturnInfo StoreCostTicketUpdateStatusResponse(StoreCostTicketUpdateStatusRequest storeCostTicketUpdateStatusRequest) { ReturnInfo returnInfo = new ReturnInfo(); try { //非新单据不能审核 //if (this.storeCostTicketDetailResponse.Status != 0) //{ // returnInfo.ErrorMessage = this.storeCostTicketDetailResponse.Status == 1 ? "单据已审核不能重复操作" : "单据已作废"; // // return returnInfo; //} var _data = StockUtils.StoreCostTicketUpdateStatus(storeCostTicketUpdateStatusRequest); if (_data.Item1) { returnInfo.Code = ReturnState.Succeed; returnInfo.Data = true; } else { if (_data.Item3 == null) { returnInfo.ErrorMessage = _data.Item2; } else { returnInfo.ErrorMessage = _data.Item3.Message; } } return returnInfo; } catch (Exception ex) { returnInfo.ErrorMessage = ex.Message; return returnInfo; } } private ReturnInfo StoreCostTicketUpdate(StoreCostTicketUpdateRequest request) { ReturnInfo returnInfo = new ReturnInfo(); try { //非新单据不能审核 if (this.StoreCostTicketDetailResponse.Status != 0) { returnInfo.ErrorMessage = this.StoreCostTicketDetailResponse.Status == 1 ? "单据已审核不能操作" : "单据已作废"; return returnInfo; } var _data = StockUtils.StoreCostTicketUpdate(request); if (_data.Item1) { returnInfo.Code = ReturnState.Succeed; returnInfo.Data = true; } else { if (_data.Item3 == null) { returnInfo.ErrorMessage = _data.Item2; } else { returnInfo.ErrorMessage = _data.Item3.Message; returnInfo.Data = false; } } return returnInfo; } catch (Exception ex) { returnInfo.ErrorMessage = ex.Message; return returnInfo; } } private ReturnInfo StoreCostTicketDetail(string _TicketId) { ReturnInfo returnInfo = new ReturnInfo(); StoreCostTicketDetailRequest request = new StoreCostTicketDetailRequest(); try { request.StoreId = Global.Instance.Authc.StoreId; request.TicketId = _TicketId; var _data = StockUtils.StoreCostTicketDetail(request); if (_data.Item1) { returnInfo.Code = ReturnState.Succeed; if (_data.Item3 == null) { returnInfo.ErrorMessage = "请求明细失败"; return returnInfo; } returnInfo.Data = _data.Item3.Data; this.StoreCostTicketDetailResponse = returnInfo.Data; return returnInfo; } else { if (_data.Item3 == null) { returnInfo.ErrorMessage = _data.Item2; } else { returnInfo.ErrorMessage = _data.Item3.Message; } } return returnInfo; } catch (Exception ex) { returnInfo.ErrorMessage = ex.Message; return returnInfo; } } private List ToProductChange(List _storeCosts, string _summaryDate) { List _productChanges = new List(); List _productUnit = new List(); List _productBurden = new List(); List _product = new List(); if (_storeCosts == null || _storeCosts.Count == 0) { return _productChanges; } using (var db = Global.Instance.OpenDataBase) { StringBuilder sqlBuld = new StringBuilder(); sqlBuld.Append(" select * from pos_product_burden "); _productBurden = db.Query(sqlBuld.ToString()).ToList(); } using (var db = Global.Instance.OpenDataBase) { StringBuilder sqlBuld = new StringBuilder(); sqlBuld.Append(" select * from pos_product_unit "); _productUnit = db.Query(sqlBuld.ToString()).ToList(); } using (var db = Global.Instance.OpenDataBase) { StringBuilder sqlBuld = new StringBuilder(); sqlBuld.Append(" select * from pos_product"); _product = db.Query(sqlBuld.ToString()).ToList(); } _storeCosts.ForEach(f => { StoreCostTicketDetailProductChange productChange = new StoreCostTicketDetailProductChange(); productChange.Cost = f.Cost; productChange.CostType = f.CostType; productChange.DifStandard = 0.00M; productChange.Id = f.Id; productChange.PackUnitId = f.PackUnitId; productChange.ProductId = f.ProductId; productChange.ProductName = f.ProductName; productChange.ProductNo = f.ProductNo; productChange.SalePro = 0.00M; productChange.SpecId = f.SpecId; productChange.SpecName = f.SpecName; productChange.Standard = f.Standard; productChange.StoreId = Global.Instance.Worker.StoreId; productChange.StoreName = Global.Instance.Worker.StoreInfo.Name; productChange.StoreNo = Global.Instance.Worker.StoreInfo.No; productChange.SummaryDate = _summaryDate; productChange.TenantId = f.TenantId; productChange.TicketId = f.TicketId; productChange.TicketNo = f.TicketNo; productChange.TodayIn = f.TodayStockIn; productChange.TypeId = f.TypeId; productChange.TypeName = f.TypeName; productChange.TypeNo = f.TypeNo; productChange.PackUnitName = _productUnit.FirstOrDefault(pr => pr.Id == productChange.PackUnitId)?.Name; productChange.YeterdayStock = f.LastStock; var _productBurdendata = _productBurden.Where(a => a.BurdenSpecId == productChange.SpecId && a.BurdenProductId == productChange.ProductId).ToList(); if (_productBurdendata == null || _productBurdendata.Count <= 0) { var _productitem = _product.FirstOrDefault(p => p.Type == 0 && p.StockFlag == 1); if (_productitem != null) { var _produc = this.m_ProductList.FirstOrDefault(o => o.ProductId == f.ProductId && o.SpecId == f.SpecId); if (_produc != null) { productChange.PosUse = _produc.Count; productChange.TodayUse = _produc.Count; } } } else { _productBurdendata.ForEach(fr => { var _produc = this.m_ProductList.FirstOrDefault(o => o.ProductId == fr.ProductId && o.SpecId == fr.SpecId); if (_produc != null) { productChange.PosUse += (decimal)_produc.Count * fr.SalesAmount; productChange.TodayUse += (decimal)_produc.Count * fr.SalesAmount; } }); } _productChanges.Add(productChange); }); return _productChanges; } private List ToProductMoreChange(List _productMoreChanges, string _summaryDate) { List _ProductMoreChanges = new List(); List _productBurden = new List(); List _productUnit = new List(); List _product = new List(); if (_productMoreChanges == null || _productMoreChanges.Count == 0) { return _ProductMoreChanges; } using (var db = Global.Instance.OpenDataBase) { StringBuilder sqlBuld = new StringBuilder(); sqlBuld.Append(" select * from pos_product_burden "); _productBurden = db.Query(sqlBuld.ToString()).ToList(); } using (var db = Global.Instance.OpenDataBase) { StringBuilder sqlBuld = new StringBuilder(); sqlBuld.Append(" select * from pos_product_unit "); _productUnit = db.Query(sqlBuld.ToString()).ToList(); } using (var db = Global.Instance.OpenDataBase) { StringBuilder sqlBuld = new StringBuilder(); sqlBuld.Append(" select * from pos_product"); _product = db.Query(sqlBuld.ToString()).ToList(); } _productMoreChanges.ForEach(f => { StoreCostTicketDetailProductMoreChange ProductMoreChange = new StoreCostTicketDetailProductMoreChange(); ProductMoreChange.Cost = f.Cost; ProductMoreChange.CostType = f.CostType; ProductMoreChange.DifStandard = 0.00M; ProductMoreChange.Id = f.Id; ProductMoreChange.PackUnitId = f.PackUnitId; ProductMoreChange.ProductId = f.ProductId; ProductMoreChange.ProductName = f.ProductName; ProductMoreChange.ProductNo = f.ProductNo; ProductMoreChange.SalePro = 0.00M; ProductMoreChange.SpecId = f.SpecId; ProductMoreChange.SpecName = f.SpecName; ProductMoreChange.Standard = f.Standard; ProductMoreChange.StoreId = Global.Instance.Worker.StoreId; ProductMoreChange.StoreName = Global.Instance.Worker.StoreInfo.Name; ProductMoreChange.StoreNo = Global.Instance.Worker.StoreInfo.No; ProductMoreChange.SummaryDate = _summaryDate; ProductMoreChange.TenantId = f.TenantId; ProductMoreChange.TicketId = f.TicketId; ProductMoreChange.TicketNo = f.TicketNo; ProductMoreChange.TodayIn = f.TodayStockIn; ProductMoreChange.TypeId = f.TypeId; ProductMoreChange.TypeName = f.TypeName; ProductMoreChange.TypeNo = f.TypeNo; ProductMoreChange.PackUnitName = _productUnit.FirstOrDefault(pr => pr.Id == ProductMoreChange.PackUnitId)?.Name; ProductMoreChange.YeterdayStock = f.LastStock; var _productBurdendata = _productBurden.Where(a => a.BurdenSpecId == ProductMoreChange.SpecId && a.BurdenProductId == ProductMoreChange.ProductId).ToList(); if (_productBurdendata == null || _productBurdendata.Count <= 0) { var _productitem = _product.FirstOrDefault(p => p.Type == 0 && p.StockFlag == 1); if (_productitem != null) { var _produc = this.m_ProductList.FirstOrDefault(o => o.ProductId == f.ProductId && o.SpecId == f.SpecId); if (_produc != null) { ProductMoreChange.PosUse = _produc.Count; ProductMoreChange.TodayUse = _produc.Count; } } } else { _productBurdendata.ForEach(fr => { var _produc = this.m_ProductList.FirstOrDefault(o => o.ProductId == fr.ProductId && o.SpecId == fr.SpecId); if (_produc != null) { ProductMoreChange.PosUse += (decimal)_produc.Count * fr.SalesAmount; ProductMoreChange.TodayUse += (decimal)_produc.Count * fr.SalesAmount; } }); } _ProductMoreChanges.Add(ProductMoreChange); }); return _ProductMoreChanges; } } }