using _29WxOrderWpf.BaseWindows; using WxOrder.Framework.Commons; using _29WxOrderWpf.Ctrls.OrderCtrls; using AllBase; using AllBase.Helper; using AllBase.Model.Config; using AllBase.Model.DBModel; using AllBase.Model.MvvmBaseClasses; using AllBase.Model.Result; using NaiBa.Util.Extension; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Threading; using Work; using Work._29Tools.BLL; using Work._29Tools.Forms.ShopForms; namespace _29WxOrderWpf.ViewModels { /// /// 更改运单号ViewModel /// public class TransitExtraPackagesViewModel : PropertyNotifyObject { public oms_wei_order_info Order { get { return this.GetValue(x => x.Order); } set { this.SetValue(x => x.Order, value); } } public oms_wei_order_item_info OrderItem { get { return this.GetValue(x => x.OrderItem); } set { this.SetValue(x => x.OrderItem, value); } } public oms_wei_external_procurement_log_info TransitOrder { get { return this.GetValue(x => x.TransitOrder); } set { this.SetValue(x => x.TransitOrder, value); } } public string purchaserNote { get { return this.GetValue(x => x.purchaserNote); } set { this.SetValue(x => x.purchaserNote, value); } } public string WaybillId { get { return this.GetValue(x => x.WaybillId); } set { this.SetValue(x => x.WaybillId, value); } } public bool IsChangeingWaybill { get { return this.GetValue(x => x.IsChangeingWaybill); } set { this.SetValue(x => x.IsChangeingWaybill, value); } } public bool ChangeWaybillSuccess { get { return this.GetValue(x => x.ChangeWaybillSuccess); } set { this.SetValue(x => x.ChangeWaybillSuccess, value); } } /// /// 请求关闭窗口 /// public event Action RequestClose; #region 命令 public ICommand AddExtraPackagesCommand { get; } #endregion private volatile bool _isWindowLoaded = false; public TransitExtraPackagesViewModel(oms_wei_order_info _order, oms_wei_order_item_info _orderItem) { Order = _order; OrderItem = _orderItem; AddExtraPackagesCommand = new DelegateCommand(AddExtraPackages); } /// /// 窗口加载完成时调用 /// public void Start() { _isWindowLoaded = true; } /// /// 窗口关闭时调用,停止后台任务 /// public void Stop() { _isWindowLoaded = false; } public void AddExtraPackages() { if (TransitOrder == null) { //TransitOrder = OrderItem.ItemTransitOrder ?? OrderItem.ItemTransitOrderWithVoid; BaseMsgWindow.ShowError("未找到云仓发货包裹,请确认包裹存在"); return; } var transitExtraOrder = OrderItem.ItemTransitExtraOrders.FirstOrDefault(t => t.order_void_status != 1); if (transitExtraOrder != null) { BaseMsgWindow.ShowError("有尚未作废的补发订单,请作废后再创建"); return; } string basePostageKey = WarehousePostageInfo.DicWarehousePostage.Keys.FirstOrDefault(pk => (OrderItem.ItemOrder?.province_name).ParseToString().Contains(pk)); decimal basePostage = basePostageKey.IsNullOrEmpty() ? WarehousePostageInfo.DicWarehousePostage.Values.Min() : WarehousePostageInfo.DicWarehousePostage[basePostageKey]; JObject body = new JObject(); body["oemAmount"] = (BaseClass.PostagePerOrderDiff * 100).ParseToInt().ParseToString(); body["postage"] = ((basePostage + BaseClass.PostagePerOrderDiff) * 100).ParseToInt().ParseToString(); body["packType"] = "2"; body["batchId"] = TransitOrder.order_code + "-" + ((OrderItem.ItemTransitExtraOrders?.Count).ParseToInt() + 1); body["orderNo"] = OrderItem.order_id; body["orderCode"] = TransitOrder.order_code; // 未出库填上游物流,已出库填下游物流 if (TransitOrder.warehouse_status != 2) { body["logisticsCode"] = TransitOrder.express_1_company; body["logisticsExpressCode"] = TransitOrder.express_1_waybill; } else { body["logisticsCode"] = TransitOrder.express_2_company; body["logisticsExpressCode"] = TransitOrder.express_2_waybill; } body["accountUser"] = BaseClass.UserName; body["purchaserNote"] = purchaserNote.ParseToString(); // 采购人备注 body["orderPlatformCode"] = "WEISHOP"; var url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/extra-packages/save"; var dataStr = JsonHelper.SerializeObject(body); //parentOrderCode不能为空2 //创建额外包裹异常: Cannot invoke "cn.qihangerp.oms.domain.SecondUser.getBalance()" because "secondUser" is null2 var rst = HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); //3739278903964250368 // 创建额外包裹异常: 用户账户余额不足,需至少 2.20 元用于中转仓取号, userId:17333276316, balance:0.852 if (BaseRegex.GetStringXml(ref rst, "code") != "0" && BaseRegex.GetStringXml(ref rst, "code") != "200") { BaseMsgWindow.ShowError("服务端返回:" + BaseRegex.GetStringXml(ref rst, "msg")); return; } var data = new JObject(); data["batchId"] = body["batchId"]; data["orderCode"] = body["orderCode"]; dataStr = JsonHelper.SerializeObject(data); url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/thirdparty/extraPackages"; rst = HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); // 额外信息已保存200 if (BaseRegex.GetStringXml(ref rst, "code") != "0" && BaseRegex.GetStringXml(ref rst, "code") != "200") { BaseMsgWindow.ShowError("服务端返回:" + BaseRegex.GetStringXml(ref rst, "msg")); return; } Task.Run(() => { StartUp.UpdateBalance(); MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); }); RequestClose?.Invoke(); } } }