步步为盈
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

323 lines
12 KiB

using AutoMapper.Internal;
using BBWY.Client.APIServices;
using BBWY.Client.Models;
using BBWY.Client.Models.APIModel;
using BBWY.Client.Models.QiKu;
using BBWY.Client.Models.SealBox;
using BBWY.Client.Views.BatchPurchase;
using BBWY.Controls;
using GalaSoft.MvvmLight.Command;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Input;
namespace BBWY.Client.ViewModels.SealBox
{
public class SealBoxConfigureViewModel : BaseVM
{
private IList<StoreResponse> storeList;//仓库列表
private LogisticsService logisticsService;
private SealBoxService sealBoxService;
private GlobalContext globalContext;
private ObservableCollection<SealBoxConfigureModel> sealBoxConfigureModelList;
/// <summary>
/// 分箱配置列表
/// </summary>
public ObservableCollection<SealBoxConfigureModel> SealBoxConfigureModelList { get => sealBoxConfigureModelList; set { Set(ref sealBoxConfigureModelList, value); } }
public SealBoxConfigureViewModel(LogisticsService logisticsService, SealBoxService sealBoxService, GlobalContext globalContext)
{
this.logisticsService = logisticsService;
this.sealBoxService = sealBoxService;
SetSplitCountCommand = new RelayCommand<SealBoxConfigureModel>(SetSplitCount);
SetPackCountAndStoreCommand = new RelayCommand<object>(SetPackCountAndStore);
SaveCommand = new RelayCommand<object>(Save);
SealBoxConfigureModelList = new ObservableCollection<SealBoxConfigureModel>();
this.globalContext = globalContext;
}
private long sealBoxId;
public long SealBoxId { get => sealBoxId; set { Set(ref sealBoxId, value); } }
public ICommand SetSplitCountCommand { get; set; }
public ICommand SetPackCountAndStoreCommand { get; set; }
public ICommand SaveCommand { get; set; }
private void SetSplitCount(SealBoxConfigureModel sealBoxConfigureModel)
{
sealBoxConfigureModel.WareHourseDatas.Where(w => w.WareState == null || w.WareState == PositionState.).ToList().ForEach(
s => sealBoxConfigureModel.WareHourseDatas.Remove(s)
);
var otherCount = sealBoxConfigureModel.WareHourseDatas.Count();
if (sealBoxConfigureModel.SplitCount <= 0 || sealBoxConfigureModel.SplitCount < otherCount)
{
MessageBox.Show("份数不正确");
return;
}
int resetIndex = 1;
foreach (var item in sealBoxConfigureModel.WareHourseDatas)
{
item.Index = resetIndex;
resetIndex++;
}
for (var i = 1 + otherCount; i <= sealBoxConfigureModel.SplitCount; i++)
{
sealBoxConfigureModel.WareHourseDatas.Add(new SealBoxConfigureWareHourseModel()
{
Index = i,
Count = 0
});
}
}
private StoreResponse store;
private void SetPackCountAndStore(object obj)
{
var sealBoxConfigureWareHourseModel = obj as SealBoxConfigureWareHourseModel;
if (storeList == null)
{
var response = logisticsService.GetStoreList();
if (!response.Success)
{
MessageBox.Show(response.Msg, "获取仓库");
return;
}
storeList = response.Data.Where(s => s.Status == StockStatus.使).ToArray();
}
if (store == null)
{
if (sealBoxConfigureWareHourseModel != null)
store = new StoreResponse
{
Id = sealBoxConfigureWareHourseModel.WareId,
Name = sealBoxConfigureWareHourseModel.WareName,
Type = ToStockType(sealBoxConfigureWareHourseModel.WareType),
Status = StockStatus.使
};
}
var w = new PackSkuSplitCountAndStoreWindow(sealBoxConfigureWareHourseModel.Count, store, storeList, sealBoxConfigureWareHourseModel.WareType == WareType.);
if (w.ShowDialog() == true)
{
store = w.Store;
sealBoxConfigureWareHourseModel.Count = w.Quantity;
IsJST = w.IsJST;
sealBoxConfigureWareHourseModel.WareType = w.IsJST ? WareType. : ToWareType(w.Store.Type);
sealBoxConfigureWareHourseModel.WareId = w.IsJST ? "qiyuejushuitan" : w.Store.Id;
sealBoxConfigureWareHourseModel.WareName = w.IsJST ? "齐越聚水潭" : w.Store.Name;
}
}
/// <summary>
/// 是否聚水潭
/// </summary>
public bool IsJST { get; set; }
private WareType ToWareType(StockType stockType)
{
switch (stockType)
{
case StockType.:
return WareType.;
break;
case StockType.:
return WareType.;
break;
case StockType.:
return WareType.;
break;
default:
break;
}
return WareType.;
}
private StockType ToStockType(WareType? wareType)
{
switch (wareType)
{
case WareType.:
return StockType.;
break;
case WareType.:
return StockType.;
break;
case WareType.:
return StockType.;
break;
case WareType.:
break;
default:
break;
}
return StockType.;
}
private void Save(object obj)
{
if (SealBoxId <= 0)//设置分箱
{
SetSealBoxConfiguredRequest setSealBoxConfiguredRequest = new SetSealBoxConfiguredRequest();
setSealBoxConfiguredRequest.ShopId = globalContext.User.Shop.ShopId.ToString();
IList<SetSealBoxConfiguredData> SetSealBoxConfiguredDatas = new List<SetSealBoxConfiguredData>();
foreach (var sealBoxConfigureModel in SealBoxConfigureModelList)
{
if (sealBoxConfigureModel.WareHourseDatas==null|| !sealBoxConfigureModel.WareHourseDatas.Any(w=>w.Count>0))
{
continue;
}
//判断存在0的报错
if (sealBoxConfigureModel.WareHourseDatas.Any(w=>w.Count==0))
{
System.Windows.MessageBox.Show($"任务id:{sealBoxConfigureModel.TaskId}中,存在未配置的数据");
return;
}
////todo: 到分箱界面判断
//if (sealBoxConfigureModel.WareHourseDatas.Select(s => s.WareId).Distinct().Count() != sealBoxConfigureModel.WareHourseDatas.Count())
//{
// MessageBox.Show($"任务id:{sealBoxConfigureModel.TaskId} ,分箱出现重复仓库,请重新设置!");
// return;
//}
//判断任务数量与分箱数量总和是否相等
if (sealBoxConfigureModel.SkuCount != sealBoxConfigureModel.WareHourseDatas.Select(s => s.Count).Sum())
{
MessageBox.Show($"任务id:{sealBoxConfigureModel.TaskId}中,采购数量:{sealBoxConfigureModel.SkuCount} 不等于 分箱总数量:{sealBoxConfigureModel.WareHourseDatas.Select(s => s.Count).Sum()}");
return;
}
SetSealBoxConfiguredDatas.Add(new SetSealBoxConfiguredData
{
SkuId = sealBoxConfigureModel.SkuId,
TaskId = sealBoxConfigureModel.TaskId,
TotalCount = sealBoxConfigureModel.SkuCount,
WareHourseDatas = sealBoxConfigureModel.WareHourseDatas.Select(x => new WareHourseData
{
Count = x.Count,
WareId = x.WareId,
WareName = x.WareName,
WareType = x.WareType.Value,
}).ToList(),
});
}
setSealBoxConfiguredRequest.SetSealBoxConfiguredDatas = SetSealBoxConfiguredDatas;
var setSealBoxRes = sealBoxService.SetSealBoxConfigured(setSealBoxConfiguredRequest);
if (setSealBoxRes == null)
{
MessageBox.Show("网络异常");
return;
}
if (!setSealBoxRes.Success || setSealBoxRes.Data == null || !setSealBoxRes.Data)
{
MessageBox.Show(setSealBoxRes.Msg);
return;
}
if (ReflashWindow != null) ReflashWindow();
var window = obj as BWindow;
window.Close();
}
if (SealBoxId > 0)//修改分箱
{
BatchUpdateSealBoxConfiguredRequest res = new BatchUpdateSealBoxConfiguredRequest()
{
SealBoxId = SealBoxId,
ShopId = globalContext.User.Shop.ShopId.ToString()
};
IList<UpdateSealBoxConfiguredDataRequest> UpdateSealBoxConfiguredDatas = new List<UpdateSealBoxConfiguredDataRequest>();
foreach (var sealBoxConfigureModel in SealBoxConfigureModelList)
{
////todo: 到分箱界面判断
//if (sealBoxConfigureModel.WareHourseDatas.Select(s => s.WareId).Distinct().Count() != sealBoxConfigureModel.WareHourseDatas.Count())
//{
// MessageBox.Show($"任务id:{sealBoxConfigureModel.TaskId} ,分箱出现重复仓库,请重新设置!");
// return;
//}
//判断任务数量与分箱数量总和是否相等
if (sealBoxConfigureModel.SkuCount != sealBoxConfigureModel.WareHourseDatas.Select(s => s.Count).Sum())
{
MessageBox.Show($"任务id:{sealBoxConfigureModel.TaskId} 中,采购数量:{sealBoxConfigureModel.SkuCount} 不等于 分箱总数量:{sealBoxConfigureModel.WareHourseDatas.Select(s => s.Count).Sum()}");
return;
}
UpdateSealBoxConfiguredDatas.Add(new UpdateSealBoxConfiguredDataRequest
{
TaskId = sealBoxConfigureModel.TaskId,
SkuCount = sealBoxConfigureModel.SkuCount,
SealBoxConfiguredWareHourseRequests = sealBoxConfigureModel.WareHourseDatas.Select(x => new SealBoxConfiguredWareHourseRequest
{
Count = x.Count,
WareId = x.WareId,
WareName = x.WareName,
WareType = x.WareType.Value,
WareState = x.WareState,
}).ToList(),
});
}
res.UpdateSealBoxConfiguredDatas = UpdateSealBoxConfiguredDatas;
var setSealBoxRes = sealBoxService.BatchUpdateSealBoxConfigured(res);
if (setSealBoxRes == null)
{
MessageBox.Show("网络异常");
return;
}
if (!setSealBoxRes.Success || setSealBoxRes.Data == null || !setSealBoxRes.Data)
{
MessageBox.Show(setSealBoxRes.Msg);
return;
}
if (ReflashWindow != null) ReflashWindow();
var window = obj as BWindow;
window.Close();
}
}
public Action ReflashWindow { get; set; }
}
}