From a770206c91e495b802b3e9371e06834586ad7715 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 30 十月 2025 20:17:30 +0800
Subject: [PATCH] 1
---
新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs | 2052 ++++++++++++++++++++++++----------------------------------
1 files changed, 849 insertions(+), 1,203 deletions(-)
diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
index 9b662bd..edbeaf3 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs"
@@ -1,13 +1,21 @@
锘縰sing HslCommunication;
+using MailKit.Search;
+using Microsoft.Data.SqlClient;
+using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
+using OfficeOpenXml.Style;
+using Org.BouncyCastle.Asn1.X509;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using WIDESEA_Common;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
+using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -26,1125 +34,780 @@
{
public partial class DeliveryOrderServices : ServiceBase<Dt_DeliveryOrder, IRepository<Dt_DeliveryOrder>>, IDeliveryOrderServices
{
- static string SearchDate = "";
- private readonly IBasicService _basicService;
+ private readonly ICabinOrderServices _cabinOrderServices;
private readonly IUnitOfWorkManage _unitOfWorkManage;
private readonly IInventory_BatchServices _inventory_BatchServices;
+ private readonly ILocationInfoService _locationInfoService;
private readonly IInventoryInfoService _inventoryInfoService;
private readonly IDeliveryOrderDetailServices _deliveryOrderDetailServices;
private readonly ISupplyTaskService _supplyTaskService;
- private readonly ICabinOrderServices _cabinOrderServices;
+ private readonly ISupplyTaskHtyService _supplyTaskHtyService;
+ private readonly ITacticsService _tacticsService;
+ private readonly IMaterielInfoService _materielInfoService;
+ private readonly IMessageInfoService _messageInfoService;
public IRepository<Dt_DeliveryOrder> Repository => BaseDal;
- public DeliveryOrderServices(IRepository<Dt_DeliveryOrder> BaseDal, IBasicService basicService, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, IDeliveryOrderDetailServices deliveryOrderDetailServices, ISupplyTaskService supplyTaskService, ICabinOrderServices cabinOrderServices) : base(BaseDal)
+ public DeliveryOrderServices(IRepository<Dt_DeliveryOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, IDeliveryOrderDetailServices deliveryOrderDetailServices, ISupplyTaskService supplyTaskService, ICabinOrderServices cabinOrderServices, ITacticsService tacticsService, ISupplyTaskHtyService supplyTaskHtyService, IMessageInfoService messageInfoService, IMaterielInfoService materielInfoService, ILocationInfoService locationInfoService) : base(BaseDal)
{
- _basicService = basicService;
_unitOfWorkManage = unitOfWorkManage;
_deliveryOrderDetailServices = deliveryOrderDetailServices;
_supplyTaskService = supplyTaskService;
_inventory_BatchServices = inventory_BatchServices;
_inventoryInfoService = inventoryInfoService;
_cabinOrderServices = cabinOrderServices;
+ _tacticsService = tacticsService;
+ _supplyTaskHtyService = supplyTaskHtyService;
+ _messageInfoService = messageInfoService;
+ _materielInfoService = materielInfoService;
+ _locationInfoService = locationInfoService;
}
-
+ #region 鍒涘缓鍑哄簱鍗�
/// <summary>
- /// 鑾峰彇涓婃父鍑哄簱鍗� 0鎴愬姛1澶辫触
+ /// 鍒涘缓鍑哄簱鍗�
/// </summary>
- /// <param name="searchDate"></param>
+ /// <param name="outorder"></param>
/// <returns></returns>
- //public WebResponseContent GetUpstreamOutOrder()
- //{
- // var responseContent = new WebResponseContent();
- // try
- // {
- // // 璇锋眰鍦板潃
- // var url = "http://121.37.118.63:80/GYZ2/95fck/outOrder";
-
- // //if (string.IsNullOrEmpty(SearchDate)) SearchDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
- // //// 璇锋眰鍙傛暟
- // var requestData = new
- // {
- // //searchDate = SearchDate
- // searchDate = "2022-10-10 20:45:16" // 姝g‘鐨勬牸寮�
- // };
- // //SearchDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
- // // 鍙戣捣璇锋眰
- // var result = HttpHelper.Post(url, requestData.ToJsonString());
-
- // // 鍙嶅簭鍒楀寲
- // var response = JsonConvert.DeserializeObject<UpstreamResponse<UpstramOutOrderInfo>>(result);
-
- // if (response.resultCode != "0")
- // {
- // SendErrorToUpstream(3, "", response.resultMsg ?? "涓婃父鎺ュ彛杩斿洖澶辫触", "");
- // return responseContent.Error(response.resultMsg ?? "涓婃父鎺ュ彛杩斿洖澶辫触");
- // }
-
- // if (response.data == null || !response.data.Any())
- // {
- // return responseContent.OK("鏃犳柊鍑哄簱鍗曟暟鎹�");
- // }
- // // 鑾峰彇鎵�鏈夊凡瀛樺湪鐨勫嚭搴撳崟鍙�
- // var existingOutOrderNos = BaseDal.Db.Queryable<Dt_DeliveryOrder>()
- // .Select(x => x.Out_no)
- // .ToList();
-
- // // 杩囨护鎺夊凡瀛樺湪鐨勫嚭搴撳崟
- // var newOutOrders = response.data
- // .Where(outorder => !existingOutOrderNos.Contains(outorder.order_no))//order_no鍑哄簱鍗曞彿
- // .ToList();
-
- // if (!newOutOrders.Any())
- // {
- // return responseContent.OK("鎵�鏈夊嚭搴撳崟宸插瓨鍦紝鏃犻渶鏂板");
- // }
- // Db.Ado.BeginTran();
- // try
- // {
- // List<Dt_DeliveryOrder> _DeliveryOrders = new List<Dt_DeliveryOrder>();
- // ////瀛樺偍鍑哄簱鍗曞彿
- // //List<string> orderNos = new List<string>();
-
- // foreach (var outorder in newOutOrders)
- // {
- // var entityOrder = new Dt_DeliveryOrder
- // {
- // Out_no = outorder.order_no,
- // Out_type = outorder.order_type,
- // Client_no = outorder.client_no,
- // Client_name = outorder.client_name,
- // Account_time = outorder.account_time,
- // Warehouse_no=outorder.warehouse_no,
- // OutStatus = "鏈畬鎴�",
- // //Details = outorder.details.Select(d => new Dt_DeliveryOrderDetail
- // //{
- // // // InsertNav 浼氳嚜鍔ㄨ缃叧鑱斿瓧娈� DeliveryOrderId
- // // Goods_no = d.goods_no,
- // // Order_qty = d.order_qty,
- // // Batch_num = d.batch_num,
- // // Exp_date = d.exp_date,
- // // OotDetailStatus = "鏂板缓",
- // // Status = outorder.warehouse_no == "001" ? 0 : 2, //濡傛灉鏄�001鎴块偅涔堝皢鐘舵�佽缃负0锛�2涓轰汉宸ュ鐞�
- // //}).ToList()
- // };
- // #region 鏍规嵁鍑哄簱鍗曡鎯呮煡鎵剧墿鏂欏悕绉般�佹壒娆$殑搴撳瓨淇℃伅(Dt_InventoryInfo)锛涙牴鎹厛鍏ュ厛鍑�,CreateDate
- // //鏍规嵁鐗╂枡鍚嶇О鏌ユ壘鐗╂枡淇℃伅
- // foreach (var item in outorder.details)
- // {
- // // 灏嗕笂娓稿嚭搴撴暟閲忚浆涓烘鏁�
- // item.order_qty = Math.Abs(item.order_qty);
- // var medication = BaseDal.Db.Queryable<Dt_MedicineGoods>()
- // .Where(m => m.Goods_no == item.goods_no)
- // .First();
-
-
- // }
-
- // //鏍规嵁绠辫鍒ゆ柇鏄惁鏈夋暎浠讹紝璁$畻鍑烘暎浠舵暟閲忓拰鏁翠欢鏁�
-
- // //鏍规嵁鍏ュ簱鏃堕棿鍒嗙粍锛屾湁鏁d欢灏变紭鍏堝垎閰嶇珛搴撴暟閲忥紝鏁翠欢浼樺厛鍒嗛厤骞冲簱鏁伴噺
-
-
- // #endregion
- // _DeliveryOrders.Add(entityOrder);
-
- // };
-
- // // 浣跨敤 InsertNav 涓�娆℃�ф彃鍏ヤ富琛ㄥ拰瀛愯〃鏁版嵁
- // BaseDal.Db.InsertNav(_DeliveryOrders).Include(x => x.Details).ExecuteCommand();
-
- // // 杩欓噷鍙互娣诲姞涓嬪彂鍒� WCS 鐨勯�昏緫
- // // var result = EdiOut(); // 鍙戠粰涓嬫父
-
- // Db.Ado.CommitTran();
- // return responseContent.OK("鍚屾鍑哄簱鍗曟垚鍔�");
- // }
- // catch (Exception ex)
- // {
- // Db.Ado.RollbackTran();
- // SendErrorToUpstream(3, "", ex.Message, "");
- // return responseContent.Error("鍚屾澶辫触: " + ex.Message);
- // }
- // }
- // catch (Exception ex)
- // {
- // // 鍏ㄥ眬寮傚父鏃讹紝涔熸帹閫佸紓甯哥粰涓婃父
- // SendErrorToUpstream(3, "", ex.Message, "");
- // return responseContent.Error("鍚屾澶辫触: " + ex.Message);
- // }
- //}
-
-
-
- public WebResponseContent GetUpstreamOutOrder()
+ public WebResponseContent CreateOutboundOrder(UpstramOutOrderInfo outorder)
{
- var responseContent = new WebResponseContent();
+ WebResponseContent webResponseContent = new WebResponseContent();
try
{
- var url = "http://121.37.118.63:80/GYZ2/95fck/outOrder";
-
- var requestData = new
+ Dt_Tactics tactics = _tacticsService.Repository.QueryFirst(x => x.TacticeName == "鍑哄簱绛栫暐");
+ #region 鐗规畩搴撴埧鍑哄簱
+ string WareCodeMJ = WarehouseEnum.楹荤簿搴�.ObjToInt().ToString("000");
+ string WareCodeLD = WarehouseEnum.鍐峰喕搴�.ObjToInt().ToString("000");
+ if (outorder.warehouse_no == WareCodeMJ || outorder.warehouse_no == WareCodeLD)
{
- searchDate = "2022-10-10 20:45:16"
- };
-
- var result = HttpHelper.Post(url, requestData.ToJsonString());
- var response = JsonConvert.DeserializeObject<UpstreamResponse<UpstramOutOrderInfo>>(result);
-
- if (response.resultCode != "0")
- {
- SendErrorToUpstream(3, "", response.resultMsg ?? "涓婃父鎺ュ彛杩斿洖澶辫触", "");
- return responseContent.Error(response.resultMsg ?? "涓婃父鎺ュ彛杩斿洖澶辫触");
- }
-
- if (response.data == null || !response.data.Any())
- {
- return responseContent.OK("鏃犳柊鍑哄簱鍗曟暟鎹�");
- }
-
- // 宸插瓨鍦ㄥ嚭搴撳崟鍙�
- var existingOutOrderNos = BaseDal.Db.Queryable<Dt_DeliveryOrder>()
- .Select(x => x.Out_no)
- .ToList();
-
- // 鏂板嚭搴撳崟
- var newOutOrders = response.data
- .Where(outorder => !existingOutOrderNos.Contains(outorder.order_no))
- .ToList();
-
- if (!newOutOrders.Any())
- {
- return responseContent.OK("鎵�鏈夊嚭搴撳崟宸插瓨鍦紝鏃犻渶鏂板");
- }
-
- Db.Ado.BeginTran();
- try
- {
- List<Dt_DeliveryOrder> _DeliveryOrders = new List<Dt_DeliveryOrder>();
-
- foreach (var outorder in newOutOrders)
+ #region 娣诲姞鍑哄簱鍗�
+ var entityOrder = new Dt_DeliveryOrder
{
- var entityOrder = new Dt_DeliveryOrder
+ Out_no = outorder.order_no,
+ Out_type = outorder.order_type,
+ Client_no = outorder.client_no,
+ Client_name = outorder.client_name,
+ Account_time = outorder.account_time,
+ Warehouse_no = outorder.warehouse_no,
+ OutStatus = "鏂板缓",
+ Details = outorder.details.Select(d => new Dt_DeliveryOrderDetail
{
- Out_no = outorder.order_no,
- Out_type = outorder.order_type,
- Client_no = outorder.client_no,
- Client_name = outorder.client_name,
- Account_time = outorder.account_time,
- Warehouse_no = outorder.warehouse_no,
- OutStatus = "鏈畬鎴�",
- Details = new List<Dt_DeliveryOrderDetail>()
- };
-
- // 閬嶅巻鍑哄簱鏄庣粏
- foreach (var item in outorder.details)
- {
- // 1锔忊儯 杞负姝f暟锛堜笂娓稿彲鑳戒紶璐熸暟锛�
- item.order_qty = Math.Abs(item.order_qty);
- decimal orderQty = (decimal)item.order_qty;
-
- // 2锔忊儯 鏌ョ墿鏂欏熀纭�淇℃伅锛堣幏鍙栫瑙勶級
- var medication = BaseDal.Db.Queryable<Dt_MedicineGoods>()
- .Where(m => m.Goods_no == item.goods_no)
- .First();
-
- if (medication == null)
- {
- SendErrorToUpstream(3, "", $"鎵句笉鍒扮墿鏂欎俊鎭細{item.goods_no}", "");
- continue;
- }
-
- decimal boxQty = medication.BoxQty <= 0 ? 1 : medication.BoxQty;
-
- // 3锔忊儯 璁$畻鏁翠欢涓庢暎浠舵暟閲�
- var fullBoxes = (int)(orderQty / boxQty); // 鏁翠欢绠辨暟
- var partialQty = orderQty % boxQty; // 鏁d欢鏁伴噺
-
- // 鑻ヤ笂娓哥粰浜嗘壒娆″彿锛屽垯浼樺厛鍖归厤
- string requestedBatch = string.IsNullOrEmpty(item.batch_num) ? null : item.batch_num;
-
- // helper: 鏌ヨ搴撳瓨鍑芥暟锛堟寜鍏ュ簱鏃堕棿鍗囧簭锛�
- Func<int, List<Dt_InventoryInfo>> queryInventoryByStockStatus = (stockStatus) =>
- {
- var q = BaseDal.Db.Queryable<Dt_InventoryInfo>()
- .Where(i => i.MaterielCode == item.goods_no &&
- (i.StockQuantity - i.OutboundQuantity) > 0 &&
- i.StockStatus == stockStatus);
-
- if (!string.IsNullOrEmpty(requestedBatch))
- q = q.Where(i => i.BatchNo == requestedBatch);
-
- return q.OrderBy(i => i.InDate).ToList();
- };
-
- // 4锔忊儯鍒嗛厤鏁d欢锛堜紭鍏堢珛搴� Status=1锛�
- decimal remainingPartial = partialQty;
- if (remainingPartial > 0)
- {
- var invList_ly = queryInventoryByStockStatus(1);
- foreach (var inv in invList_ly)
- {
- if (remainingPartial <= 0) break;
-
- decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity);
- if (available <= 0) continue;
-
- decimal use = Math.Min(available, remainingPartial);
-
- var detail = new Dt_DeliveryOrderDetail
- {
- Goods_no = item.goods_no,
- Order_qty = use,
- Batch_num = inv.BatchNo,
- Exp_date = inv.ValidityPeriod,
- OotDetailStatus = "鏂板缓",
- Status = 0, //绔嬪簱
- Reservoirarea = inv.LocationCode
- };
- entityOrder.Details.Add(detail);
-
- inv.OutboundQuantity += use;
- BaseDal.Db.Updateable(inv).ExecuteCommand();
-
- remainingPartial -= use;
- }
-
- // 绔嬪簱涓嶅 鈫� 骞冲簱琛� (Status=2)
- if (remainingPartial > 0)
- {
- var invList_pk = queryInventoryByStockStatus(2);
- foreach (var inv in invList_pk)
- {
- if (remainingPartial <= 0) break;
-
- decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity);
- if (available <= 0) continue;
-
- decimal use = Math.Min(available, remainingPartial);
-
- var detail = new Dt_DeliveryOrderDetail
- {
- Goods_no = item.goods_no,
- Order_qty = use,
- Batch_num = inv.BatchNo,
- Exp_date = inv.ValidityPeriod,
- OotDetailStatus = "鏂板缓",
- Status = 2, //骞冲簱
- Reservoirarea = inv.LocationCode
- };
- entityOrder.Details.Add(detail);
-
- inv.OutboundQuantity += use;
- BaseDal.Db.Updateable(inv).ExecuteCommand();
-
- remainingPartial -= use;
- }
- }
-
- if (remainingPartial > 0)
- {
- SendErrorToUpstream(3, "", $"鍑哄簱鍗昜{outorder.order_no}]鐗╂枡[{item.goods_no}]鏁d欢搴撳瓨涓嶈冻锛屾湭鍒嗛厤锛歿remainingPartial}", "");
- }
- }
-
- //鍒嗛厤鏁翠欢锛堜紭鍏堝钩搴� Status=2锛�
- int remainingFullBoxes = fullBoxes;
- if (remainingFullBoxes > 0)
- {
- var invList_pk = queryInventoryByStockStatus(2);
- foreach (var inv in invList_pk)
- {
- if (remainingFullBoxes <= 0) break;
-
- decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity);
- if (available < boxQty) continue;
-
- int canProvideBoxes = (int)(available / boxQty);
- if (canProvideBoxes <= 0) continue;
-
- int useBoxes = Math.Min(canProvideBoxes, remainingFullBoxes);
- decimal useQty = useBoxes * boxQty;
-
- var detail = new Dt_DeliveryOrderDetail
- {
- Goods_no = item.goods_no,
- Order_qty = useQty,
- Batch_num = inv.BatchNo,
- Exp_date = inv.ValidityPeriod,
- OotDetailStatus = "鏂板缓",
- Status = 2, //骞冲簱
- Reservoirarea = inv.LocationCode
- };
- entityOrder.Details.Add(detail);
-
- inv.OutboundQuantity += useQty;
- BaseDal.Db.Updateable(inv).ExecuteCommand();
-
- remainingFullBoxes -= useBoxes;
- }
-
- // 骞冲簱涓嶅 鈫� 绔嬪簱琛� (Status=1)
- if (remainingFullBoxes > 0)
- {
- var invList_ly = queryInventoryByStockStatus(1);
- foreach (var inv in invList_ly)
- {
- if (remainingFullBoxes <= 0) break;
-
- decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity);
- if (available < boxQty) continue;
-
- int canProvideBoxes = (int)(available / boxQty);
- if (canProvideBoxes <= 0) continue;
-
- int useBoxes = Math.Min(canProvideBoxes, remainingFullBoxes);
- decimal useQty = useBoxes * boxQty;
-
- var detail = new Dt_DeliveryOrderDetail
- {
- Goods_no = item.goods_no,
- Order_qty = useQty,
- Batch_num = inv.BatchNo,
- Exp_date = inv.ValidityPeriod,
- OotDetailStatus = "鏂板缓",
- Status = 0, //绔嬪簱锛堣ˉ鏁寸锛�
- Reservoirarea = inv.LocationCode
- };
- entityOrder.Details.Add(detail);
-
- inv.OutboundQuantity += useQty;
- BaseDal.Db.Updateable(inv).ExecuteCommand();
-
- remainingFullBoxes -= useBoxes;
- }
- }
-
- if (remainingFullBoxes > 0)
- {
- decimal unfilledQty = remainingFullBoxes * boxQty;
- SendErrorToUpstream(3, "", $"鍑哄簱鍗昜{outorder.order_no}]鐗╂枡[{item.goods_no}]鏁寸搴撳瓨涓嶈冻锛屾湭鍒嗛厤鏁伴噺锛歿unfilledQty}", "");
- }
- }
- }
-
- _DeliveryOrders.Add(entityOrder);
- }
-
- // 鎻掑叆涓昏〃+鏄庣粏
- BaseDal.Db.InsertNav(_DeliveryOrders)
- .Include(x => x.Details)
- .ExecuteCommand();
-
- Db.Ado.CommitTran();
- return responseContent.OK("鍚屾鍑哄簱鍗曟垚鍔�");
- }
- catch (Exception ex)
- {
- Db.Ado.RollbackTran();
- SendErrorToUpstream(3, "", ex.Message, "");
- return responseContent.Error("鍚屾澶辫触: " + ex.Message);
- }
- }
- catch (Exception ex)
- {
- SendErrorToUpstream(3, "", ex.Message, "");
- return responseContent.Error("鍚屾澶辫触: " + ex.Message);
- }
- }
-
-
- /// <summary>
- /// 鍑哄簱鍗曟帹閫佺粰 WCS
- /// </summary>
- /// <returns></returns>
- public WebResponseContent EdiOut()
- {
- var responseContent = new WebResponseContent();
- try
- {
- // 1. 鏌ヨ绗﹀悎鏉′欢鐨勮鍗曪紙琛ㄥご=鏂板缓 && 鍖呭惈鏈夋晥鏄庣粏锛�
- var outOrders = BaseDal.Db.CopyNew().Queryable<Dt_DeliveryOrder>()
- .Where(o => o.OutStatus == "鏂板缓")
- .Includes(o => o.Details, d => d.MedicineGoods)
- .ToList();
-
- // 2. 鍐嶈繃婊ゆ帀涓嶇鍚堟潯浠剁殑鏄庣粏锛堝彧淇濈暀 Status=0 锛�
- foreach (var order in outOrders)
- {
- order.Details = order.Details.Where(d => d.Status == 0).ToList();
- }
-
- if (outOrders == null || !outOrders.Any())
- {
- Console.WriteLine("娌℃湁绗﹀悎鏉′欢鐨勮鍗曢渶瑕佹帹閫�");
- return responseContent.Error("娌℃湁绗﹀悎鏉′欢鐨勮鍗曢渶瑕佹帹閫�");
- }
-
- foreach (var order in outOrders)
- {
- try
- {
- string materialCode = "YY";//榛樿鍊�
- //鑾峰彇褰撳墠璁㈠崟鐨勭涓�涓槑缁嗛」
- var firstDetail = order.Details.FirstOrDefault();
- if (firstDetail?.MedicineGoods != null && !string.IsNullOrEmpty(firstDetail.MedicineGoods.MaterialCode))
- {
- //濡傛灉鏉′欢婊¤冻锛屽皢鐗╂枡浠g爜璁剧疆涓虹涓�涓槑缁嗛」瀵瑰簲鐨勮嵂鍝佺墿鏂欎唬鐮�
- materialCode = firstDetail.MedicineGoods.MaterialCode;
- }
- // 3. 缁勮 DTO
- var ediDto = new TowcsDto.ToediOutInfo
- {
- customerCode = "905",
- materialCode = materialCode,
- externalOrderNo = order.Out_no,
- outOrderType = order.Out_type == "1" ? "10" : order.Out_type == "2" ? "20" : "30",
- priority = 1,
- Is_cancel = 0,
- details = order.Details.Select(d => new TowcsDto.ToeOutdiInDetail
- {
- batchNo = d.Batch_num,
- productCode = d.Goods_no,
- productName = d.MedicineGoods?.Goods_spm,
- productSpecifications = d.MedicineGoods?.Model,
- quantity = (int)d.Order_qty,
- //stocktakingDetails = order.Out_type == "3"
- // ? new List<ToOutediInStock>
- // {
- // new ToOutediInStock { palletCode = "FC00001", quantity = d.Order_qty.ToString() }
- // }
- // : null
- }).ToList()
- };
-
- // 4. 璋冪敤鎺ュ彛
- var url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
- var result = HttpHelper.Post(url, ediDto.ToJsonString());
- var resp = JsonConvert.DeserializeObject<TowcsDto.TowcsResponse<object>>(result);
-
- if (resp != null && resp.code == "0")
- {
- // 鏇存柊琛ㄥご鐘舵��
- BaseDal.Db.Updateable<Dt_DeliveryOrder>()
- .SetColumns(o => new Dt_DeliveryOrder { OutStatus = "寮�濮�" })
- .Where(o => o.Id == order.Id)
- .ExecuteCommand();
-
- // 鏇存柊鏄庣粏鐘舵��
- BaseDal.Db.Updateable<Dt_DeliveryOrderDetail>()
- .SetColumns(d => new Dt_DeliveryOrderDetail { Status = 1, OotDetailStatus = "宸插畬鎴�" })
- .Where(d => d.DeliveryOrderId == order.Id && d.Status == 0)
- .ExecuteCommand();
-
- Console.WriteLine($"璁㈠崟 {order.Out_no} 鎺ㄩ�佹垚鍔�");
- }
- else
- {
- SendErrorToUpstream(3, order.Out_no, resp?.msg ?? "WCS 鎺ㄩ�佸け璐�", "");
- Console.WriteLine($"璁㈠崟 {order.Out_no} 鎺ㄩ�佸け璐ワ細{resp?.msg}");
- }
- //鍒犻櫎鍏ㄩ儴鐘朵负宸插畬鎴愮殑鏄庣粏鍜岃〃澶达紝绉诲叆鍘嗗彶琛�
- }
- catch (Exception ex)
- {
- SendErrorToUpstream(3, order.Out_no, ex.Message, "");
- Console.WriteLine($"璁㈠崟 {order.Out_no} 鎺ㄩ�佸紓甯革細{ex.Message}");
- }
- }
-
- return responseContent.OK("鍑哄簱璁㈠崟鎺ㄩ�佸畬鎴�");
- }
- catch (Exception ex)
- {
- Console.WriteLine("EdiOut 寮傚父锛�" + ex.Message);
- return responseContent.Error("鍑哄簱璁㈠崟鎺ㄩ�佸け璐ワ細" + ex.Message);
- }
- }
-
-
- /// <summary>
- /// 鍑哄簱鎶ュ畬鎴愭帴鍙�
- /// </summary>
- /// <param name="out_no">鍑哄簱鍗曞彿</param>
- /// <returns></returns>
- //public WebResponseContent CompleteOutOrder(string out_no)
- //{
- // var responseContent = new WebResponseContent();
- // try
- // {
- // if (string.IsNullOrWhiteSpace(out_no))
- // {
- // return responseContent.Error("鍏ュ簱鍗曞彿涓嶅彲浠ヤ负绌�");
- // }
-
- // Db.Ado.BeginTran();
- // //鍏堟煡澶磋〃
- // var outOerd= BaseDal.Db.Queryable<Dt_DeliveryOrder>()
- // .Where(o => o.Out_no == out_no)
- // .First();
- // if (outOerd == null)
- // {
- // return responseContent.Error($"娌℃湁鎵惧埌璇ュ嚭搴撳崟鍙穥out_no}");
- // }
- // //鏌ユ壘鎵�鏈夋槑缁嗚〃鏄惁閮藉凡瀹屾垚
- // var incompleteDetails = BaseDal.Db.Queryable<Dt_DeliveryOrderDetail>()
- // .Where(d => d.DeliveryOrderId == outOerd.Id && d.OotDetailStatus == "宸插畬鎴�")
- // .Count();
- // if (incompleteDetails>0)
- // {
- // // 鏇存柊鍑哄簱鍗曠姸鎬�
- // BaseDal.Db.Updateable<Dt_DeliveryOrder>()
- // .SetColumns(o => new Dt_DeliveryOrder { OutStatus = "寮�濮�" })
- // .Where(o => o.Out_no == out_no)
- // .ExecuteCommand();
- // var url = " http://127.0.0.1:9090/GYZ2/95fck/outOrderOk";
- // var reslut = HttpHelper.Post(url, new { out_no }.ToJsonString());
- // var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(reslut);
- // if (response.resultCode != "0")
- // {
- // SendErrorToUpstream(4, "", "涓婃父鎺ュ彛杩斿洖澶辫触", "");
- // return responseContent.Error(response.resultMsg ?? "涓婃父鎺ュ彛杩斿洖澶辫触");
- // }
- // Db.Ado.CommitTran();
- // return responseContent.OK("鎿嶄綔鎴愬姛,鍑哄簱鍗曚互鍙婃槑缁嗗叏閮ㄥ畬鎴�");
- // }
- // else
- // {
- // return responseContent.OK("鎿嶄綔鎴愬姛锛屼絾浠绘湁涓哄畬鎴愮殑鏄庣粏");
- // }
- // }
- // catch (Exception ex)
- // {
- // Db.Ado.RollbackTran();
- // SendErrorToUpstream(1, "", ex.Message, "");
- // return responseContent.Error("鍚屾澶辫触: " + ex.Message);
- // }
- //}
-
-
- /// <summary>
- ///鐩樼偣鍑哄簱鍗曟帹閫佺粰 WCS
- /// </summary>
- /// <param name="externalOrderNo">鍑哄簱鍗曞彿</param>
- /// <returns></returns>
- //public WebResponseContent InventoryGood(string externalOrderNo)
- //{
- // try
- // {
- // // 鏌ヨ鍑哄簱鍗曞強鏄庣粏
- // var orders = BaseDal.Db.CopyNew().Queryable<Dt_DeliveryOrder>()
- // .Where(x => x.Out_no == externalOrderNo)
- // .Includes(o => o.Details, d => d.MedicineGoods)
- // .ToList();
-
-
- // if (orders == null || orders.Count == 0)
- // {
- // return new WebResponseContent().Error("娌℃湁鎵惧埌璇ュ嚭搴撳崟");
- // }
-
- // var url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
- // bool allSuccess = true;
-
- // foreach (var order in orders)
- // {
- // //鏌ユ壘缁欏晢鍝佺殑搴撳瓨
- // var Invert = BaseDal.Db.Queryable<Dt_Inventory>()
- // .Where(i => i.Goods_no == order.Out_no).First();
- // var ediDto = new TowcsDto.ToediOutInfo
- // {
- // customerCode = "905",
- // materialCode = "YY",
- // externalOrderNo = order.Out_no,
- // outOrderType = "20", // 鐩樼偣鍑哄簱鍗�
- // priority = 1,
- // Is_cancel = 0,
- // details = order.Details.Select(d => new TowcsDto.ToeOutdiInDetail
- // {
- // batchNo = d.Batch_num,
- // productCode = d.Goods_no,
- // productName = d.MedicineGoods?.Goods_spm,
- // productSpecifications = d.MedicineGoods?.Model,
- // quantity = (int)d.Order_qty,
- // stocktakingDetails = new List<TowcsDto.ToOutediInStock>
- // {
- // new TowcsDto.ToOutediInStock
- // {
- // palletCode = Invert.PalletCode, // 瀹為檯浠庣郴缁熷彇
- // quantity = d.Order_qty.ToString()
- // }
- // }
- // }).ToList()
- // };
-
- // var result = HttpHelper.Post(url, ediDto.ToJsonString());
- // var resp = JsonConvert.DeserializeObject<TowcsDto.TowcsResponse<object>>(result);
-
- // if (resp == null || resp.code != "0")
- // {
- // allSuccess = false;
- // break;
- // }
- // }
-
- // return allSuccess
- // ? new WebResponseContent { Status = true, Message = "鐩樼偣鎴愬姛" }
- // : new WebResponseContent { Status = false, Message = "鐩樼偣澶辫触" };
- // }
- // catch (Exception ex)
- // {
- // return new WebResponseContent { Status = false, Message = ex.Message };
- // }
- //}
-
-
- public WebResponseContent InventoryGood(string externalOrderNo)
- {
- try
- {
- // 1. 鏌ュ嚭鍑哄簱鍗曞強鏄庣粏
- var orders = BaseDal.Db.CopyNew().Queryable<Dt_DeliveryOrder>()
- .Where(x => x.Out_no == externalOrderNo)
- .Includes(o => o.Details, d => d.MedicineGoods)
- .ToList();
-
- if (orders == null || orders.Count == 0)
- return new WebResponseContent().Error("娌℃湁鎵惧埌璇ュ嚭搴撳崟");
-
- // 2. 鑾峰彇鎵�鏈夊晢鍝佺紪鍙�
- var allGoodsNos = orders
- .SelectMany(o => o.Details.Select(d => d.Goods_no))
- .Distinct()
- .ToList();
-
- // 3. 涓�娆℃�ф煡璇㈠簱瀛樹俊鎭�
- var inventoryList = BaseDal.Db.Queryable<Dt_Inventory>()
- .Where(i => allGoodsNos.Contains(i.Goods_no))
- .ToList();
-
- var inventoryDict = inventoryList.ToDictionary(i => i.Goods_no, i => i);
- string url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
- bool allSuccess = true;
-
- // 4. 鏋勯�犵洏鐐瑰嚭搴撹姹�
- foreach (var order in orders)
- {
- var ediDto = new TowcsDto.ToediOutInfo
- {
- customerCode = "905",
- materialCode = "YY",
- externalOrderNo = order.Out_no,
- outOrderType = "20", // 鐩樼偣鍑哄簱鍗�
- priority = 1,
- Is_cancel = 0,
- details = order.Details.Select(d =>
- {
- inventoryDict.TryGetValue(d.Goods_no, out var invert);
-
- return new TowcsDto.ToeOutdiInDetail
- {
- batchNo = d.Batch_num,
- productCode = d.Goods_no,
- productName = d.MedicineGoods?.Goods_spm,
- productSpecifications = d.MedicineGoods?.Model,
- quantity = (int)d.Order_qty,
- stocktakingDetails = new List<TowcsDto.ToOutediInStock>
- {
- new TowcsDto.ToOutediInStock
- {
- palletCode = invert?.PalletCode ?? string.Empty,
- quantity = d.Order_qty.ToString()
- }
- }
- };
+ Reservoirarea = outorder.warehouse_no,
+ Goods_no = d.goods_no,
+ Order_qty = Math.Abs(d.order_qty), // 鍑哄簱鏁伴噺杞负姝f暟
+ Batch_num = d.batch_num,
+ Exp_date = d.exp_date,
+ OotDetailStatus = "鏂板缓",
+ Status = 2, // pad骞冲簱锛屾棤闇�鍚屾
}).ToList()
};
-
- var result = HttpHelper.Post(url, ediDto.ToJsonString());
- var resp = JsonConvert.DeserializeObject<TowcsDto.TowcsResponse<object>>(result);
-
- if (resp == null || resp.code != "0")
+ BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
+ #endregion
+ #region 澶勭悊搴撳瓨銆佸簱瀛樻壒娆°�佹坊鍔犲嚭搴撲换鍔�
+ List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>();
+ foreach (var item in entityOrder.Details)
{
- allSuccess = false;
- break;
- }
- }
-
- return allSuccess
- ? new WebResponseContent { Status = true, Message = "鐩樼偣鎴愬姛" }
- : new WebResponseContent { Status = false, Message = "鐩樼偣澶辫触" };
- }
- catch (Exception ex)
- {
- return new WebResponseContent { Status = false, Message = ex.Message };
- }
- }
-
-
-
-
- /// <summary>
- /// 鍑哄簱鎶ュ畬鎴愭帴鍙�
- /// </summary>
- /// <param name="out_no">鍑哄簱鍗曞彿</param>
- /// <returns></returns>
- public WebResponseContent CompleteAllOutOrders()
- {
- var responseContent = new WebResponseContent();
- try
- {
- // 鏌ユ壘鎵�鏈夆�滃紑濮嬧�濈姸鎬佺殑鍑哄簱鍗�
- var orders = BaseDal.Db.Queryable<Dt_DeliveryOrder>()
- .Where(o => o.OutStatus == "寮�濮�")
- .ToList();
-
- if (orders == null || !orders.Any())
- {
- return responseContent.OK("鏆傛棤闇�瑕佸鐞嗙殑鍑哄簱鍗�");
- }
-
- int successCount = 0;
- int failCount = 0;
-
- foreach (var order in orders)
- {
- try
- {
- Db.Ado.BeginTran();
-
- // 鏌ヨ璇ュ崟鐨勬槑缁�
- var details = BaseDal.Db.Queryable<Dt_DeliveryOrderDetail>()
- .Where(d => d.DeliveryOrderId == order.Id)
- .ToList();
-
- // 鍒ゆ柇鏄庣粏鏄惁鍏ㄩ儴瀹屾垚
- var completedCount = details.Count(d => d.OotDetailStatus == "宸插畬鎴�");
- var totalCount = details.Count;
-
- if (totalCount > 0 && completedCount == totalCount)
+ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.Goods_no && x.BatchNo == item.Batch_num);
+ if (inventory_Batch == null) throw new Exception($"鏈壘鍒板嚭搴撳崟鍙枫�恵entityOrder.Out_no}銆戜腑鐗╂枡缂栧彿銆恵item.Goods_no}銆戠墿鏂欐壒娆°�恵item.Batch_num}銆戠殑搴撳瓨鎵规淇℃伅");
+ if (inventory_Batch.AvailableQuantity < item.Order_qty) throw new Exception($"鍑哄簱鍗曞彿銆恵entityOrder.Out_no}銆戜腑鐗╂枡缂栧彿銆恵item.Goods_no}銆戠墿鏂欐壒娆°�恵item.Batch_num}銆戠殑搴撳瓨鎵规淇℃伅鍙敤鏁伴噺涓嶈冻");
+ inventory_Batch.AvailableQuantity -= item.Order_qty;
+ inventory_Batch.OutboundQuantity += item.Order_qty;
+ List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == item.Goods_no && x.BatchNo == item.Batch_num && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt() && x.AvailableQuantity > 0 && x.WarehouseCode == item.Reservoirarea);
+ if (dt_InventoryInfos.Count < 1) throw new Exception($"鍑哄簱鍗曞彿銆恵entityOrder.Out_no}銆戜腑鐗╂枡缂栧彿銆恵item.Goods_no}銆戠墿鏂欐壒娆°�恵item.Batch_num}銆戠殑搴撳瓨褰撳墠鐘舵�佷笉鍙嚭搴�");
+ #region 鎸夊嚭搴撶瓥鐣ユ煡鎵惧簱瀛�
+ if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt())
+ dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList();
+ else
+ dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.InDate).ToList();
+ #endregion
+ var Order_qty = item.Order_qty;//鍑哄簱鍗曟暟閲�
+ foreach (var InventoryInfo in dt_InventoryInfos)
{
- // 鏇存柊鐘舵�佷负宸插畬鎴�
- BaseDal.Db.Updateable<Dt_DeliveryOrder>()
- .SetColumns(o => o.OutStatus == "宸插畬鎴�")
- .Where(o => o.Id == order.Id)
- .ExecuteCommand();
-
- // 璋冪敤涓婃父鎺ュ彛
- var url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";
- var requestDate = new
+ if (Order_qty <= 0) break;
+ if (InventoryInfo.AvailableQuantity <= Order_qty)
{
- order_no = order.Out_no
- };
- var result = HttpHelper.Post(url, requestDate.ToJsonString());
- var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
-
- if (response.resultCode == "0")
- {
- // 鉁� 鎻掑叆鍘嗗彶琛紙琛ㄥご + 鏄庣粏锛�
- var orderHistory = new Dt_DeliveryOrder_Hty
+ Order_qty -= InventoryInfo.AvailableQuantity;
+ InventoryInfo.OutboundQuantity += InventoryInfo.AvailableQuantity;
+ Dt_SupplyTask supplyTask = new Dt_SupplyTask()
{
- Id = order.Id,
- Out_no = order.Out_no,
- Out_type = order.Out_type,
- Client_no = order.Client_no,
- Client_name = order.Client_name,
- Account_time = order.Account_time,
- Warehouse_no = order.Warehouse_no,
- OutStatus = "宸插畬鎴�",
- Details = details.Select(d => new Dt_DeliveryOrderDetail
- {
- Id = d.Id,
- DeliveryOrderId = d.DeliveryOrderId,
- Reservoirarea = d.Reservoirarea,
- Goods_no = d.Goods_no,
- Order_qty = d.Order_qty,
- Batch_num = d.Batch_num,
- Exp_date = d.Exp_date,
- OotDetailStatus = d.OotDetailStatus,
- Status = d.Status
- }).ToList()
+ WarehouseCode = InventoryInfo.WarehouseCode,
+ BatchNo = InventoryInfo.BatchNo,
+ MaterielName = InventoryInfo.MaterielName,
+ MaterielCode = InventoryInfo.MaterielCode,
+ MaterielSpec = InventoryInfo.MaterielSpec,
+ TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(),
+ TaskType = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName ?? "System",
+ LocationCode = InventoryInfo.LocationCode,
+ OrderNo = entityOrder.Out_no,
+ StockQuantity = InventoryInfo.AvailableQuantity,
+ SupplyQuantity = 0,
+ Remark = "鍑哄簱"
};
-
- // 鎻掑叆琛ㄥご鍘嗗彶
- var historyId = BaseDal.Db.Insertable(orderHistory).ExecuteReturnIdentity();
-
- // 鎻掑叆鏄庣粏鍘嗗彶锛堝甫鏂板閿級
- var detailHistories = details.Select(d => new Dt_DeliveryOrderDetail_Hty
- {
- Id = d.Id,
- DeliveryOrderId = order.Id,
- Reservoirarea = d.Reservoirarea,
- Goods_no = d.Goods_no,
- Order_qty = d.Order_qty,
- Batch_num = d.Batch_num,
- Exp_date = d.Exp_date,
- OotDetailStatus = d.OotDetailStatus,
- Status = d.Status
- }).ToList();
-
- BaseDal.Db.Insertable(detailHistories).ExecuteCommand();
-
- // 鍒犻櫎鍘熷鏁版嵁锛堟槑缁� 鈫� 琛ㄥご锛�
- BaseDal.Db.Deleteable<Dt_DeliveryOrderDetail>().Where(d => d.DeliveryOrderId == order.Id).ExecuteCommand();
- BaseDal.Db.Deleteable<Dt_DeliveryOrder>().Where(o => o.Id == order.Id).ExecuteCommand();
-
- Db.Ado.CommitTran();
- successCount++;
+ supplyTasks.Add(supplyTask);
+ InventoryInfo.AvailableQuantity = 0;
}
else
{
- Db.Ado.RollbackTran();
- failCount++;
- SendErrorToUpstream(4, "", $"涓婃父鎺ュ彛杩斿洖澶辫触: {response.resultMsg}", order.Out_no);
+ InventoryInfo.AvailableQuantity -= Order_qty;
+ InventoryInfo.OutboundQuantity += Order_qty;
+ Dt_SupplyTask supplyTask = new Dt_SupplyTask()
+ {
+ WarehouseCode = InventoryInfo.WarehouseCode,
+ BatchNo = InventoryInfo.BatchNo,
+ MaterielName = InventoryInfo.MaterielName,
+ MaterielCode = InventoryInfo.MaterielCode,
+ MaterielSpec = InventoryInfo.MaterielSpec,
+ TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(),
+ TaskType = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName ?? "System",
+ LocationCode = InventoryInfo.LocationCode,
+ OrderNo = entityOrder.Out_no,
+ StockQuantity = Order_qty,
+ SupplyQuantity = 0,
+ Remark = "鍑哄簱"
+ };
+ supplyTasks.Add(supplyTask);
+ Order_qty = 0;
}
}
+ _inventory_BatchServices.Repository.UpdateData(inventory_Batch);
+ _inventoryInfoService.Repository.UpdateData(dt_InventoryInfos);
+ }
+ _supplyTaskService.AddData(supplyTasks);
+ #endregion
+ }
+ #endregion
+ else
+ {
+ string WareCodeDJ = WarehouseEnum.澶т欢搴�.ObjToInt().ToString("000");
+ string WareCodeLK = WarehouseEnum.绔嬪簱.ObjToInt().ToString("000");
+ #region 鍒涘缓澶т欢搴撱�佺珛搴撳嚭搴撳ご琛�
+ var entityOrder = new Dt_DeliveryOrder
+ {
+ Out_no = outorder.order_no,
+ Out_type = outorder.order_type,
+ OutStatus = "鏂板缓",
+ Client_name = outorder.client_name,
+ Account_time = outorder.account_time,
+ Client_no = outorder.client_no,
+ Warehouse_no = WareCodeDJ,
+ Details = new List<Dt_DeliveryOrderDetail>()
+ };
+ var entityOrderLK = new Dt_DeliveryOrder
+ {
+ Out_no = outorder.order_no,
+ Out_type = outorder.order_type,
+ OutStatus = "鏂板缓",
+ Client_name = outorder.client_name,
+ Account_time = outorder.account_time,
+ Client_no = outorder.client_no,
+ Warehouse_no = WareCodeLK,
+ Details = new List<Dt_DeliveryOrderDetail>()
+ };
+ #endregion
+ #region 鏌ユ壘搴撳瓨
+ foreach (var detail in outorder.details)
+ {
+ #region 鏌ヨ搴撳瓨鎵规鍜屽簱瀛�
+ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == detail.goods_no && x.BatchNo == detail.batch_num);
+ if (inventory_Batch == null) throw new Exception($"鏈壘鍒板嚭搴撳崟鍙枫�恵outorder.order_no}銆戜腑鐗╂枡缂栧彿銆恵detail.goods_no}銆戠墿鏂欐壒娆°�恵detail.batch_num}銆戠殑搴撳瓨鎵规淇℃伅");
+ if (inventory_Batch.AvailableQuantity < detail.order_qty) throw new Exception($"鍑哄簱鍗曞彿銆恵outorder.order_no}銆戜腑鐗╂枡缂栧彿銆恵detail.goods_no}銆戠墿鏂欐壒娆°�恵detail.batch_num}銆戠殑搴撳瓨鎵规淇℃伅鍙敤鏁伴噺涓嶈冻");
+ inventory_Batch.AvailableQuantity -= detail.order_qty;
+ inventory_Batch.OutboundQuantity += detail.order_qty;
+ List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo && x.AvailableQuantity > 0 && (x.WarehouseCode == WareCodeDJ || x.WarehouseCode == WareCodeLK));
+ if (dt_InventoryInfos.Count < 1) throw new Exception($"鍑哄簱鍗曞彿銆恵outorder.order_no}銆戜腑鐗╂枡缂栧彿銆恵detail.goods_no}銆戠墿鏂欐壒娆°�恵detail.batch_num}銆戠殑搴撳瓨褰撳墠鐘舵�佷笉鍙嚭搴�");
+ #endregion
+ #region 鎸夊嚭搴撶瓥鐣ユ煡鎵惧簱瀛�
+ if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt())
+ dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList();
+ else
+ dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.InDate).ToList();
+ #endregion
+ var Order_qty = Math.Abs(detail.order_qty);//鍑哄簱鍗曟暟閲�
+ #region 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡淇℃伅
+ Dt_MaterielInfo materielInfo = _materielInfoService.Repository.QueryFirst(x => x.MaterielCode == detail.goods_no);
+ if (materielInfo == null) throw new Exception($"鏈壘鍒拌嵂鍝佺紪鐮併�恵detail.goods_no}銆戠殑淇℃伅");
+ if (!Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType))
+ throw new Exception($"璇疯缃嵂鍝佺紪鍙枫�恵detail.goods_no}銆戠殑灞炴�у垎绫�");
+ #endregion
+ #region 澶т欢
+ if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)//濡傛灉鐗╂枡鏄ぇ浠�
+ {
+ #region 娣诲姞鍑哄簱璇︽儏
+ Dt_DeliveryOrderDetail orderDetail = new Dt_DeliveryOrderDetail()
+ {
+ Reservoirarea = entityOrder.Warehouse_no,
+ Goods_no = detail.goods_no,
+ Order_qty = detail.order_qty,
+ Batch_num = detail.batch_num,
+ Exp_date = detail.exp_date,
+ OotDetailStatus = "鏂板缓",
+ Order_Outqty = 0,
+ Status = 2
+ };
+ entityOrder.Details.Add(orderDetail);
+ #endregion
+
+ List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>();
+ #region 璁$畻搴撳瓨銆佹坊鍔犲嚭搴撲换鍔�
+ foreach (var InventoryInfo in dt_InventoryInfos)
+ {
+ if (Order_qty <= 0) break;
+ if (InventoryInfo.AvailableQuantity < Order_qty)
+ {
+ Order_qty -= InventoryInfo.AvailableQuantity;
+ InventoryInfo.OutboundQuantity += InventoryInfo.AvailableQuantity;
+ Dt_SupplyTask supplyTask = new Dt_SupplyTask()
+ {
+ WarehouseCode = InventoryInfo.WarehouseCode,
+ BatchNo = InventoryInfo.BatchNo,
+ MaterielName = InventoryInfo.MaterielName,
+ MaterielCode = InventoryInfo.MaterielCode,
+ MaterielSpec = InventoryInfo.MaterielSpec,
+ TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(),
+ TaskType = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName ?? "System",
+ LocationCode = InventoryInfo.LocationCode,
+ OrderNo = entityOrder.Out_no,
+ StockQuantity = InventoryInfo.AvailableQuantity,
+ SupplyQuantity = 0,
+ Remark = "鍑哄簱"
+ };
+ supplyTasks.Add(supplyTask);
+ InventoryInfo.AvailableQuantity = 0;
+ }
+ else
+ {
+ InventoryInfo.AvailableQuantity -= Order_qty;
+ InventoryInfo.OutboundQuantity += Order_qty;
+ Dt_SupplyTask supplyTask = new Dt_SupplyTask()
+ {
+ WarehouseCode = InventoryInfo.WarehouseCode,
+ BatchNo = InventoryInfo.BatchNo,
+ MaterielName = InventoryInfo.MaterielName,
+ MaterielCode = InventoryInfo.MaterielCode,
+ MaterielSpec = InventoryInfo.MaterielSpec,
+ TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(),
+ TaskType = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName ?? "System",
+ LocationCode = InventoryInfo.LocationCode,
+ OrderNo = entityOrder.Out_no,
+ StockQuantity = Order_qty,
+ SupplyQuantity = 0,
+ Remark = "鍑哄簱"
+ };
+ supplyTasks.Add(supplyTask);
+ Order_qty = 0;
+ }
+ }
+ #endregion
+ _inventory_BatchServices.Repository.UpdateData(inventory_Batch);
+ _inventoryInfoService.Repository.UpdateData(dt_InventoryInfos);
+ _supplyTaskService.AddData(supplyTasks);
+ }
+ #endregion
else
{
- // 鏈夋湭瀹屾垚鏄庣粏锛屼笉鏇存柊
- Db.Ado.RollbackTran();
+ if (materielInfo.BoxQty < 1) throw new Exception($"璇疯缃嵂鍝佺紪鍙枫�恵detail.goods_no}銆戠殑绠辫鏁伴噺");
+ List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>();
+ Dt_DeliveryOrderDetail orderDetail = null;
+ Dt_DeliveryOrderDetail orderDetailLK = null;
+ var ys = Order_qty % materielInfo.BoxQty; //涓嶈兘鏁撮櫎绠辫鐨勬暎浠舵暟
+ var xs = (int)(Order_qty / materielInfo.BoxQty);//淇濈暀鏁存暟
+ #region 鏁d欢浼樺厛鍒嗛厤绔嬪簱
+ if (ys > 0)
+ {
+ orderDetailLK = new Dt_DeliveryOrderDetail()
+ {
+ Reservoirarea = entityOrderLK.Warehouse_no,
+ Goods_no = detail.goods_no,
+ Order_qty = ys,
+ Batch_num = detail.batch_num,
+ Exp_date = detail.exp_date,
+ OotDetailStatus = "鏂板缓",
+ Order_Outqty = 0,
+ Status = 0
+ };
+ }
+ #endregion
+
+ #region 鏁翠欢浼樺厛鍒嗛厤澶т欢搴�,璁″垝搴撳瓨,娣诲姞鍑哄簱浠诲姟
+ foreach (var item in dt_InventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ))
+ {
+ if (xs <= 0) break;
+ decimal outqty = 0;
+ while (item.AvailableQuantity > 0 && xs > 0)
+ {
+ xs--;
+ if (orderDetail == null)
+ {
+ orderDetail = new Dt_DeliveryOrderDetail()
+ {
+ Reservoirarea = entityOrder.Warehouse_no,
+ Goods_no = detail.goods_no,
+ Order_qty = materielInfo.BoxQty,
+ Batch_num = detail.batch_num,
+ Exp_date = detail.exp_date,
+ OotDetailStatus = "鏂板缓",
+ Order_Outqty = 0,
+ Status = 2
+ };
+ item.AvailableQuantity -= materielInfo.BoxQty;
+ item.OutboundQuantity += materielInfo.BoxQty;
+ outqty += materielInfo.BoxQty;
+ }
+ else
+ {
+ orderDetail.Order_qty += materielInfo.BoxQty;
+ item.AvailableQuantity -= materielInfo.BoxQty;
+ item.OutboundQuantity += materielInfo.BoxQty;
+ outqty += materielInfo.BoxQty;
+ }
+ }
+ Dt_SupplyTask supplyTask = new Dt_SupplyTask()
+ {
+ WarehouseCode = item.WarehouseCode,
+ BatchNo = item.BatchNo,
+ MaterielName = item.MaterielName,
+ MaterielCode = item.MaterielCode,
+ MaterielSpec = item.MaterielSpec,
+ TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(),
+ TaskType = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName ?? "System",
+ LocationCode = item.LocationCode,
+ OrderNo = entityOrder.Out_no,
+ StockQuantity = outqty,
+ SupplyQuantity = 0,
+ Remark = "鍑哄簱"
+ };
+ supplyTasks.Add(supplyTask);
+ _inventoryInfoService.Repository.UpdateData(item);
+ }
+ #endregion
+
+ #region 鍒嗛厤瀹屽ぇ浠跺簱濡傛灉杩樻湁绠辨暟锛屽啀閫夋嫨鍒嗛厤绔嬪簱
+ if (xs > 0)
+ {
+ if (orderDetailLK == null)
+ {
+ orderDetailLK = new Dt_DeliveryOrderDetail()
+ {
+ Reservoirarea = entityOrderLK.Warehouse_no,
+ Goods_no = detail.goods_no,
+ Order_qty = xs * materielInfo.BoxQty,
+ Batch_num = detail.batch_num,
+ Exp_date = detail.exp_date,
+ OotDetailStatus = "鏂板缓",
+ Order_Outqty = 0,
+ Status = 0
+ };
+ }
+ else
+ {
+ orderDetailLK.Order_qty += xs * materielInfo.BoxQty;
+ }
+ }
+ #endregion
+
+ #region 绔嬪簱鍑哄簱鍗曪紝淇敼绔嬪簱搴撳瓨锛屾坊鍔犵珛搴撳嚭搴撲换鍔�
+ if (orderDetailLK != null)
+ {
+ #region 娣诲姞鍑哄簱浠诲姟銆佷慨鏀瑰簱瀛樹俊鎭�
+ Dt_InventoryInfo inventoryInfo = dt_InventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First();
+ inventoryInfo.AvailableQuantity -= orderDetailLK.Order_qty;
+ inventoryInfo.OutboundQuantity += orderDetailLK.Order_qty;
+ Dt_SupplyTask supplyTask = new Dt_SupplyTask()
+ {
+ WarehouseCode = inventoryInfo.WarehouseCode,
+ BatchNo = inventoryInfo.BatchNo,
+ MaterielName = inventoryInfo.MaterielName,
+ MaterielCode = inventoryInfo.MaterielCode,
+ MaterielSpec = inventoryInfo.MaterielSpec,
+ TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(),
+ TaskType = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName ?? "System",
+ LocationCode = inventoryInfo.LocationCode,
+ OrderNo = entityOrder.Out_no,
+ StockQuantity = orderDetailLK.Order_qty,
+ SupplyQuantity = 0,
+ Remark = "鍑哄簱"
+ };
+ supplyTasks.Add(supplyTask);
+ #endregion
+ _inventoryInfoService.Repository.UpdateData(inventoryInfo);
+ entityOrderLK.Details.Add(orderDetailLK);
+ }
+ #endregion
+ if (orderDetail != null) entityOrder.Details.Add(orderDetail);
+ _inventory_BatchServices.Repository.UpdateData(inventory_Batch);
+ _supplyTaskService.AddData(supplyTasks);
}
}
- catch (Exception ex)
- {
- Db.Ado.RollbackTran();
- failCount++;
- SendErrorToUpstream(1, "", ex.Message, order.Out_no);
- }
+ if (entityOrder.Details.Count > 0)
+ BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand();
+ if (entityOrderLK.Details.Count > 0)
+ BaseDal.Db.InsertNav(entityOrderLK).Include(x => x.Details).ExecuteCommand();
+ #endregion
}
-
- return responseContent.OK($"鎵归噺澶勭悊瀹屾垚锛氭垚鍔� {successCount} 鍗曪紝澶辫触 {failCount} 鍗曘��");
+ webResponseContent.OK();
}
catch (Exception ex)
{
- return responseContent.Error("鎵归噺澶勭悊澶辫触锛�" + ex.Message);
+ webResponseContent.Error(ex.Message);
}
+ return webResponseContent;
}
+ #endregion
-
- //public WebResponseContent CompleteAllOutOrders()
- //{
- // var responseContent = new WebResponseContent();
- // try
- // {
- // var orders = BaseDal.Db.Queryable<Dt_DeliveryOrder>()
- // .Where(o => o.OutStatus == "寮�濮�")
- // .ToList();
-
- // if (orders == null || !orders.Any())
- // {
- // return responseContent.OK("鏆傛棤闇�瑕佸鐞嗙殑鍑哄簱鍗�");
- // }
-
- // int successCount = 0;
- // int failCount = 0;
- // int serverErrorCount = 0;
-
- // foreach (var order in orders)
- // {
- // try
- // {
- // Db.Ado.BeginTran();
-
- // var details = BaseDal.Db.Queryable<Dt_DeliveryOrderDetail>()
- // .Where(d => d.DeliveryOrderId == order.Id)
- // .ToList();
-
- // var completedCount = details.Count(d => d.OotDetailStatus == "宸插畬鎴�");
- // var totalCount = details.Count;
-
- // if (totalCount > 0 && completedCount == totalCount)
- // {
- // // 鏇存柊鐘舵�佷负宸插畬鎴�
- // BaseDal.Db.Updateable<Dt_DeliveryOrder>()
- // .SetColumns(o => o.OutStatus == "宸插畬鎴�")
- // .Where(o => o.Id == order.Id)
- // .ExecuteCommand();
-
- // // 璋冪敤涓婃父鎺ュ彛
- // var url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";
- // var requestDate = new
- // {
- // order_no = order.Out_no
- // };
-
- // string result;
- // try
- // {
- // result = HttpHelper.Post(url, requestDate.ToJsonString());
- // }
- // catch (Exception httpEx)
- // {
- // // HTTP璇锋眰寮傚父锛堢綉缁滈棶棰樼瓑锛�
- // Db.Ado.RollbackTran();
- // failCount++;
- // SendErrorToUpstream(3, "", $"缃戠粶璇锋眰澶辫触: {httpEx.Message}", order.Out_no);
- // continue;
- // }
-
- // // 鉁� 妫�鏌ユ槸鍚︽槸500閿欒椤甸潰
- // if (!string.IsNullOrEmpty(result) && result.Contains("500閿欒椤甸潰"))
- // {
- // Db.Ado.RollbackTran();
- // serverErrorCount++;
- // SendErrorToUpstream(5, "", "涓婃父鎺ュ彛鏈嶅姟鍣ㄥ唴閮ㄩ敊璇�(500)锛岃鑱旂郴涓婃父绯荤粺绠$悊鍛�", order.Out_no);
- // continue;
- // }
-
- // // 鉁� 妫�鏌ユ槸鍚︽槸HTML鍝嶅簲
- // if (!string.IsNullOrEmpty(result) && result.Trim().StartsWith("<"))
- // {
- // Db.Ado.RollbackTran();
- // failCount++;
- // SendErrorToUpstream(4, "", "涓婃父鎺ュ彛杩斿洖闈濲SON鏍煎紡鍝嶅簲", order.Out_no);
- // continue;
- // }
-
- // // 鉁� 瀹夊叏瑙f瀽JSON
- // UpstreamOrderResponse response;
- // try
- // {
- // response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
- // }
- // catch (JsonReaderException jsonEx)
- // {
- // Db.Ado.RollbackTran();
- // failCount++;
- // SendErrorToUpstream(4, "", $"涓婃父鎺ュ彛杩斿洖鏁版嵁鏍煎紡閿欒: {jsonEx.Message}", order.Out_no);
- // continue;
- // }
-
- // if (response.resultCode == "0")
- // {
- // // 鎴愬姛澶勭悊閫昏緫...
- // var orderHistory = new Dt_DeliveryOrder_Hty
- // {
- // Id = order.Id,
- // Out_no = order.Out_no,
- // Out_type = order.Out_type,
- // Client_no = order.Client_no,
- // Client_name = order.Client_name,
- // Account_time = order.Account_time,
- // Warehouse_no = order.Warehouse_no,
- // OutStatus = "宸插畬鎴�",
- // Details = details.Select(d => new Dt_DeliveryOrderDetail
- // {
- // Id = d.Id,
- // DeliveryOrderId = d.DeliveryOrderId,
- // Reservoirarea = d.Reservoirarea,
- // Goods_no = d.Goods_no,
- // Order_qty = d.Order_qty,
- // Batch_num = d.Batch_num,
- // Exp_date = d.Exp_date,
- // OotDetailStatus = d.OotDetailStatus,
- // Status = d.Status
- // }).ToList()
- // };
-
- // var historyId = BaseDal.Db.Insertable(orderHistory).ExecuteReturnIdentity();
-
- // var detailHistories = details.Select(d => new Dt_DeliveryOrderDetail_Hty
- // {
- // Id = d.Id,
- // DeliveryOrderId = order.Id,
- // Reservoirarea = d.Reservoirarea,
- // Goods_no = d.Goods_no,
- // Order_qty = d.Order_qty,
- // Batch_num = d.Batch_num,
- // Exp_date = d.Exp_date,
- // OotDetailStatus = d.OotDetailStatus,
- // Status = d.Status
- // }).ToList();
-
- // BaseDal.Db.Insertable(detailHistories).ExecuteCommand();
-
- // BaseDal.Db.Deleteable<Dt_DeliveryOrderDetail>().Where(d => d.DeliveryOrderId == order.Id).ExecuteCommand();
- // BaseDal.Db.Deleteable<Dt_DeliveryOrder>().Where(o => o.Id == order.Id).ExecuteCommand();
-
- // Db.Ado.CommitTran();
- // successCount++;
- // }
- // else
- // {
- // Db.Ado.RollbackTran();
- // failCount++;
- // SendErrorToUpstream(4, "", $"涓婃父鎺ュ彛杩斿洖澶辫触: {response.resultMsg}", order.Out_no);
- // }
- // }
- // else
- // {
- // Db.Ado.RollbackTran();
- // }
- // }
- // catch (Exception ex)
- // {
- // Db.Ado.RollbackTran();
- // failCount++;
- // SendErrorToUpstream(1, "", ex.Message, order.Out_no);
- // }
- // }
-
- // return responseContent.OK($"鎵归噺澶勭悊瀹屾垚锛氭垚鍔� {successCount} 鍗曪紝澶辫触 {failCount} 鍗曪紝鏈嶅姟鍣ㄩ敊璇� {serverErrorCount} 鍗曘��");
- // }
- // catch (Exception ex)
- // {
- // return responseContent.Error("鎵归噺澶勭悊澶辫触锛�" + ex.Message);
- // }
- //}
-
- /// <summary>
- /// 鎺ㄩ�佸紓甯镐俊鎭粰涓婃父绯荤粺 1.鍏ュ簱鍗曟帴鍙o紱2.鍏ュ簱鍗曟姤瀹屾垚鎺ュ彛锛�3.鍑哄簱鍗曟帴鍙o紱4.鍑哄簱鎶ュ畬鎴愭帴鍙o紱5.鑽搧鍩虹淇℃伅鍚屾鎺ュ彛锛�6.渚涘簲鍟嗕俊鎭帴鍙o紱7.瀹㈡埛淇℃伅鎺ュ彛锛�8.搴撳瓨鏌ヨ鎺ュ彛
- /// </summary>
- public void SendErrorToUpstream(int type, string code, string message, string remark)
- {
- try
- {
- var url = "http://121.37.118.63:80/GYZ2/95fck/exceptionLog";
-
- var requestData = new
- {
- type = type.ToString(),
- code = code,
- message = message,
- remark = remark
- };
-
- var result = HttpHelper.Post(url, requestData.ToJsonString());
- // 鍙互鍙嶅簭鍒楀寲妫�鏌� resultCode 鏄惁涓�0
- }
- catch (Exception e)
- {
- // 杩欓噷涓嶈鍐嶆姏寮傚父浜嗭紝閬垮厤姝诲惊鐜�
- Console.WriteLine("寮傚父鎺ュ彛鎺ㄩ�佸け璐ワ細" + e.Message);
- }
- }
-
- public WebResponseContent GetPdDeliveryOrders(SaveModel saveModel)
+ #region 鍒涘缓鐩樹簭鍑哄簱鍗�
+ public WebResponseContent CreateCheckOutOrder(UpstramOutOrderInfo order)
{
WebResponseContent content = new WebResponseContent();
try
{
- int pageNo = saveModel.MainData["pageNo"].ObjToInt();
- string warehouseCode = saveModel.MainData["warehouseId"].ToString();
- string orderNo = saveModel.MainData["orderNo"].ToString();
- List<Dt_DeliveryOrder> dt_ReceiveOrders = new List<Dt_DeliveryOrder>();
- if (string.IsNullOrEmpty(orderNo))
+ string WareCodeMJ = WarehouseEnum.楹荤簿搴�.ObjToInt().ToString("000");
+ string WareCodeLD = WarehouseEnum.鍐峰喕搴�.ObjToInt().ToString("000");
+ #region 鐗规畩搴撴埧
+ if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD)
{
- dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.OutStatus == "鏂板缓" || x.OutStatus == "寮�濮�") && x.Warehouse_no == warehouseCode && x.Out_type == "3").Includes(x => x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5);
+ #region 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
+ foreach (var item in order.details)
+ {
+ //鎵惧簱瀛樻壒娆′俊鎭�
+ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num);
+ var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity);
+ if (Qty != item.order_qty) throw new Exception($"鐩樹簭鍑哄簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樹簭鏁伴噺鏈夎");
+ //鎵炬墍鏈夊簱瀛�
+ List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo);
+ foreach (var inventoryInfo in inventoryInfos)
+ {
+ #region 娣诲姞鐩樹簭鍑哄簱浠诲姟
+ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity)
+ {
+ Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
+ {
+ WarehouseCode = inventoryInfo.WarehouseCode,
+ OperateType = OperateTypeEnum.鑷姩瀹屾垚.ToString(),
+ InsertTime = DateTime.Now,
+ TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(),
+ BatchNo = inventoryInfo.BatchNo,
+ MaterielName = inventoryInfo.MaterielName,
+ MaterielCode = inventoryInfo.MaterielCode,
+ MaterielSpec = inventoryInfo.MaterielSpec,
+ TaskType = TaskTypeEnum.ChenckOut.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName,
+ LocationCode = inventoryInfo.LocationCode,
+ OrderNo = order.order_no,
+ StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+ SupplyQuantity = 0,
+ Remark = "鐩樹簭鍏ュ簱"
+ };
+ _supplyTaskHtyService.AddData(supplyTask_Hty);
+ }
+ #endregion
+ inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+ inventoryInfo.SupplyQuantity = 0;
+ inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+ }
+ inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+ inventory_Batch.SupplyQuantity = 0;
+ _inventoryInfoService.UpdateData(inventoryInfos);
+ _inventory_BatchServices.UpdateData(inventory_Batch);
+ }
+ #endregion
+
+ #region 鍒涘缓鐩樼偣鍗�
+ var entityOrder = new Dt_DeliveryOrder
+ {
+ Out_no = order.order_no,
+ Out_type = order.order_type,
+ Client_no = order.client_no,
+ Client_name = order.client_name,
+ OutStatus = "宸插畬鎴�",
+ Account_time = order.account_time,
+ Warehouse_no = order.warehouse_no,
+ Details = order.details.Select(d => new Dt_DeliveryOrderDetail
+ {
+ Goods_no = d.goods_no,
+ Order_qty = Math.Abs(d.order_qty),
+ Order_Outqty = Math.Abs(d.order_qty),
+ Batch_num = d.batch_num,
+ Exp_date = d.exp_date,
+ Reservoirarea = order.warehouse_no,
+ OotDetailStatus = "宸插畬鎴�",
+ Status = 2,
+ }).ToList()
+ };
+ Repository.AddData(entityOrder);
+ #endregion
}
+ #endregion
else
{
- dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.Out_no.Contains(orderNo) || x.Client_no.Contains(orderNo)) && (x.OutStatus == "鏂板缓" || x.OutStatus == "寮�濮�" && x.Out_type == "3") && x.Warehouse_no == warehouseCode).OrderByDescending(x => x.CreateDate).Includes(x => x.Details).ToPageList(pageNo, 5);
+ string WareCodeLK = WarehouseEnum.绔嬪簱.ObjToInt().ToString("000");
+ string WareCodeDJ = WarehouseEnum.澶т欢搴�.ObjToInt().ToString("000");
+
+ foreach (var item in order.details)
+ {
+ //鎵惧簱瀛樻壒娆′俊鎭�
+ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num);
+ var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity);
+ if (Qty != item.order_qty) throw new Exception($"鐩樼泩鍏ュ簱鍗曘�恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐩樼泩鏁伴噺鏈夎");
+ //鎵炬墍鏈夊簱瀛�
+ List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo);
+ //鑾峰彇绔嬪簱鐩樼偣宸紓鏁�.銆傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘��
+ var inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First();
+ var LkQty = Math.Abs(inventoryLK.StockQuantity - inventoryLK.SupplyQuantity);
+ //鑾峰彇澶т欢搴撶洏鐐瑰樊寮傛暟
+ var inventoryDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
+ var DJQty = Math.Abs(inventoryDJ.Sum(x => x.StockQuantity) - inventoryDJ.Sum(x => x.SupplyQuantity));
+ if (LkQty + DJQty != Qty) throw new Exception($"銆恵order.order_no}銆戠墿鏂欑紪鍙枫�恵item.goods_no}銆戠墿鏂欐壒娆°�恵item.batch_num}銆戠殑鐗╂枡淇℃伅涓庣墿鏂欐壒娆′俊鎭洏鐩堟暟閲忎笉绗�");
+ if (LkQty == 0)//绔嬪簱鏃犲樊寮�
+ {
+ #region 搴撳瓨銆佸簱瀛樻壒娆″钩璐�
+ foreach (var inventoryInfo in inventoryInfos)
+ {
+ #region 娣诲姞鐩樹簭鍑哄簱浠诲姟
+ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity)
+ {
+ Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
+ {
+ WarehouseCode = inventoryInfo.WarehouseCode,
+ OperateType = OperateTypeEnum.鑷姩瀹屾垚.ToString(),
+ InsertTime = DateTime.Now,
+ TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(),
+ BatchNo = inventoryInfo.BatchNo,
+ MaterielName = inventoryInfo.MaterielName,
+ MaterielCode = inventoryInfo.MaterielCode,
+ MaterielSpec = inventoryInfo.MaterielSpec,
+ TaskType = TaskTypeEnum.ChenckOut.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName,
+ LocationCode = inventoryInfo.LocationCode,
+ OrderNo = order.order_no,
+ StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+ SupplyQuantity = 0,
+ Remark = "鐩樹簭鍏ュ簱"
+ };
+ _supplyTaskHtyService.AddData(supplyTask_Hty);
+ }
+ #endregion
+ inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+ inventoryInfo.SupplyQuantity = 0;
+ inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+ }
+ _inventoryInfoService.UpdateData(inventoryInfos);
+ inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity;
+ inventory_Batch.SupplyQuantity = 0;
+ _inventory_BatchServices.UpdateData(inventory_Batch);
+ #endregion
+
+ #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
+ var entityOrder = new Dt_DeliveryOrder
+ {
+ Out_no = order.order_no,
+ Out_type = order.order_type,
+ Client_no = order.client_no,
+ Account_time = order.account_time,
+ OutStatus = "宸插畬鎴�",
+ Client_name = order.client_name,
+ Warehouse_no = WareCodeDJ,
+ Details = order.details.Select(d => new Dt_DeliveryOrderDetail
+ {
+ Goods_no = d.goods_no,
+ Order_qty = Math.Abs(d.order_qty),
+ Order_Outqty = Math.Abs(d.order_qty),
+ Batch_num = d.batch_num,
+ Exp_date = d.exp_date,
+ Reservoirarea = WareCodeDJ,
+ OotDetailStatus = "宸插畬鎴�",
+ Status = 2,
+ }).ToList()
+ };
+ Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+ //Repository.AddData(entityOrder);
+ #endregion
+ }
+ else
+ {
+ #region 澶т欢搴撳簱瀛樺钩璐�
+ inventoryInfos = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList();
+ foreach (var inventoryInfo in inventoryInfos)
+ {
+ #region 娣诲姞鐩樹簭鍑哄簱浠诲姟
+ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity)
+ {
+ Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
+ {
+ WarehouseCode = inventoryInfo.WarehouseCode,
+ OperateType = OperateTypeEnum.鑷姩瀹屾垚.ToString(),
+ InsertTime = DateTime.Now,
+ TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(),
+ BatchNo = inventoryInfo.BatchNo,
+ MaterielName = inventoryInfo.MaterielName,
+ MaterielCode = inventoryInfo.MaterielCode,
+ MaterielSpec = inventoryInfo.MaterielSpec,
+ TaskType = TaskTypeEnum.ChenckOut.ObjToInt(),
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName,
+ LocationCode = inventoryInfo.LocationCode,
+ OrderNo = order.order_no,
+ StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity),
+ SupplyQuantity = 0,
+ Remark = "鐩樹簭鍑哄簱"
+ };
+ _supplyTaskHtyService.AddData(supplyTask_Hty);
+ }
+ #endregion
+ inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity;
+ inventoryInfo.SupplyQuantity = 0;
+ inventoryInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+ }
+ _inventoryInfoService.UpdateData(inventoryInfos);
+ #endregion
+
+ #region 鍒涘缓澶т欢搴撶洏鐐瑰崟
+ if (DJQty != 0)
+ {
+ var cabinOrder = new Dt_DeliveryOrder
+ {
+ Out_no = order.order_no,
+ Out_type = order.order_type,
+ Client_name = order.client_name,
+ Account_time = order.account_time,
+ OutStatus = "宸插畬鎴�",
+ Client_no = order.client_no,
+ Warehouse_no = WareCodeDJ,
+ Details = order.details.Select(d => new Dt_DeliveryOrderDetail
+ {
+ Goods_no = d.goods_no,
+ Order_qty = DJQty,
+ Order_Outqty = DJQty,
+ Batch_num = d.batch_num,
+ Exp_date = d.exp_date,
+ Reservoirarea = WareCodeDJ,
+ OotDetailStatus = "宸插畬鎴�",
+ Status = 2,
+ }).ToList()
+ };
+ //Repository.AddData(cabinOrder);
+ Db.InsertNav(cabinOrder).Include(it => it.Details).ExecuteCommand();
+ }
+ #endregion
+
+ #region 鍒涘缓绔嬪簱鐩樼偣鍗�
+ var entityOrder = new Dt_DeliveryOrder
+ {
+ Out_no = order.order_no,
+ Out_type = order.order_type,
+ Client_no = order.client_no,
+ Account_time = order.account_time,
+ OutStatus = "鏂板缓",
+ Client_name = order.client_name,
+ Warehouse_no = WareCodeLK,
+ Details = order.details.Select(d => new Dt_DeliveryOrderDetail
+ {
+ Goods_no = d.goods_no,
+ Order_qty = LkQty,
+ Batch_num = d.batch_num,
+ Exp_date = d.exp_date,
+ Reservoirarea = WareCodeLK,
+ OotDetailStatus = "鏂板缓",
+ Status = 0,
+ }).ToList()
+ };
+ Db.InsertNav(entityOrder).Include(it => it.Details).ExecuteCommand();
+ //Repository.AddData(entityOrder);
+ #endregion
+ }
+ return WebResponseContent.Instance.OK("鎴愬姛");
+ }
}
-
- content.OK(data: dt_ReceiveOrders);
}
- catch (Exception)
+ catch (Exception ex)
{
-
- throw;
+ content.Error(ex.Message);
}
return content;
}
+ #endregion
+
+ //鐩樼偣 鎷挎暣涓壒娆′俊鎭〃鐨勫晢鍝佹壒鍙峰拰鍟嗗搧缂栧彿鏉ヨ繘琛岀洏鐐�
+ public WebResponseContent InventoryGood(string batchNo, string goodsNo)
+ {
+ var response = new WebResponseContent();
+ try
+ {
+ // 1锔忊儯 鏌ユ壘鎸囧畾鎵规涓庣墿鏂欑殑搴撳瓨淇℃伅
+ var batchInfo = BaseDal.Db.Queryable<Dt_Inventory_Batch>()
+ .Where(x => x.BatchNo == batchNo && x.MaterielCode == goodsNo)
+ .First();
+
+ if (batchInfo == null)
+ return response.Error($"鏈壘鍒拌鐗╂枡 [{goodsNo}] 鎵规 [{batchNo}] 鐨勫簱瀛樹俊鎭�");
+
+ // 2锔忊儯 缁勮璇锋眰 DTO锛堝畬鍏ㄧ鍚堟帴鍙f枃妗g粨鏋勶級
+ var ediDto = new TowcsDto.ToediOutInfo
+ {
+ customerCode = "905",
+ materialCode = "YY", // 鐗╂枡绫诲瀷CODE
+ externalOrderNo = $"PDCK-{batchInfo.Id}", // 澶栭儴鍑哄簱鍗曞彿
+ outOrderType = "20", // 鐩樼偣鍑哄簱鍗�
+ priority = 1,
+ Is_cancel = 0,
+ details = new List<TowcsDto.ToeOutdiInDetail>
+ {
+ new TowcsDto.ToeOutdiInDetail
+ {
+ batchNo = batchInfo.BatchNo,
+ productCode = batchInfo.MaterielCode,
+ productName = batchInfo.MaterielName,
+ productSpecifications = batchInfo.MaterielSpec,
+ quantity = (int)batchInfo.SupplyQuantity,
+ //stocktakingDetails = new List<TowcsDto.ToOutediInStock>
+ //{
+ // // 鐩樼偣鏄庣粏鍙牴鎹疄闄呮墭鐩樻媶鍒嗭紱姝ゅ绀轰緥浠�1鏉�
+ // new TowcsDto.ToOutediInStock
+ // {
+ // palletCode = "FC00001",
+ // quantity = batchInfo.SupplyQuantity.ToString()
+ // }
+ //}
+ }
+ }
+ };
+
+ // 3锔忊儯 璋冪敤鎺ュ彛
+ string url = "http://172.16.1.2:9357/file-admin/api/out/ediOut";
+ var result = HttpHelper.Post(url, ediDto.ToJsonString());
+ var resp = JsonConvert.DeserializeObject<TowcsDto.TowcsResponse<object>>(result);
+
+ // 4锔忊儯 鍝嶅簲澶勭悊
+ if (resp == null)
+ return response.Error("WCS 鏃犲搷搴�");
+ if (resp.code != "0")
+ return response.Error($"WCS杩斿洖澶辫触: {resp.msg}");
+
+ return response.OK("鐩樼偣鍑哄簱涓嬪彂鎴愬姛");
+ }
+ catch (Exception ex)
+ {
+ return response.Error("鐩樼偣澶辫触锛�" + ex.Message);
+ }
+ }
+
+
+ /// <summary>
+ /// 鏌ヨ鍑哄簱鍗曞垪琛�
+ /// </summary>
+ /// <param name="saveModel"></param>
+ /// <returns></returns>
public WebResponseContent GetDeliveryOrders(SaveModel saveModel)
{
WebResponseContent content = new WebResponseContent();
@@ -1156,11 +819,11 @@
List<Dt_DeliveryOrder> dt_ReceiveOrders = new List<Dt_DeliveryOrder>();
if (string.IsNullOrEmpty(orderNo))
{
- dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.OutStatus == "鏂板缓" || x.OutStatus == "寮�濮�") && x.Warehouse_no == warehouseCode && x.Out_type != "3").Includes(x => x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5);
+ dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.OutStatus == "鏂板缓" || x.OutStatus == "寮�濮�") && x.Warehouse_no == warehouseCode && x.Out_type != "20").Includes(x => x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5);
}
else
{
- dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.Out_no.Contains(orderNo) || x.Client_no.Contains(orderNo)) && (x.OutStatus == "鏂板缓" || x.OutStatus == "寮�濮�" && x.Out_type != "3") && x.Warehouse_no == warehouseCode).OrderByDescending(x => x.CreateDate).Includes(x => x.Details).ToPageList(pageNo, 5);
+ dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.Out_no.Contains(orderNo) || x.Client_no.Contains(orderNo)) && (x.OutStatus == "鏂板缓" || x.OutStatus == "寮�濮�") && x.Out_type != "20" && x.Warehouse_no == warehouseCode).OrderByDescending(x => x.CreateDate).Includes(x => x.Details).ToPageList(pageNo, 5);
}
content.OK(data: dt_ReceiveOrders);
@@ -1173,131 +836,70 @@
return content;
}
+ /// <summary>
+ /// 鏌ヨ鍑哄簱/鐩樼偣鍗曡鎯� 鐪嬪嚭搴撳崟鏄庣粏銆�
+ /// </summary>
+ /// <param name="pageNo"></param>
+ /// <param name="orderNo"></param>
+ /// <param name="isPick"></param>
+ /// <returns></returns>
public WebResponseContent GetDeliveryOrderDetail(int pageNo, string orderNo, bool isPick)
{
WebResponseContent content = new WebResponseContent();
Dt_DeliveryOrder cabinOrder = new Dt_DeliveryOrder();
if (isPick)
- cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type == "3");
+ cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type == "20");
else
- cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type != "3");
- List<Dt_DeliveryOrderDetail>? cabinOrderDetails = cabinOrder.Details?.Where(x => x.Reservoirarea == pageNo.ToString()).ToList();
+ cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type != "20");
+ //List<Dt_DeliveryOrderDetail>? cabinOrderDetails = cabinOrder.Details?.Where(x => x.Reservoirarea == pageNo.ToString()).ToList();
+ List<Dt_DeliveryOrderDetail>? cabinOrderDetails = cabinOrder.Details?.Where(x => x.Status == 2).ToList();
content.OK(data: cabinOrderDetails);
return content;
}
- public WebResponseContent MatPicking(SaveModel saveModel)
+
+
+ /// <summary>
+ /// pad鍑哄簱瀹屾垚
+ /// </summary>
+ /// <param name="saveModel"></param>
+ /// <returns></returns>
+ public WebResponseContent OutFinish(SaveModel saveModel)
{
WebResponseContent content = new WebResponseContent();
try
{
- var LocationCode = saveModel.MainData["LocationCode"].ToString();
- var orderNo = saveModel.MainData["orderNo"].ToString();
- var batchNo = saveModel.MainData["batchNo"].ToString();
- var Inqty = saveModel.MainData["Inqty"].ObjToInt();
- var warehouseCode = saveModel.MainData["warehouseCode"].ToString();
- Dt_DeliveryOrder cabinOrder = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == orderNo && x.Warehouse_no == warehouseCode && x.Out_type == "3").Includes(x => x.Details).First();
- if (cabinOrder == null) return WebResponseContent.Instance.Error($"鐩樼偣鍗曞凡瀹屾垚");
- Dt_DeliveryOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == batchNo && x.Reservoirarea == warehouseCode).First();
- if (cabinOrderDetail == null) return WebResponseContent.Instance.Error($"鐩樼偣鍗曟槑缁嗗凡瀹屾垚");
- Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == cabinOrderDetail.Goods_no);
- if (materielInfo == null) return WebResponseContent.Instance.Error($"璇风淮鎶ょ墿鏂欑紪鍙枫�恵cabinOrderDetail.Goods_no}銆戠殑鐗╂枡淇℃伅");
- cabinOrderDetail.Order_Outqty += Inqty;
- if (cabinOrderDetail.Order_Outqty > cabinOrderDetail.Order_qty)
- return WebResponseContent.Instance.Error($"瀹炵洏鏁伴噺涓嶅彲瓒呭嚭璐﹂潰鏁伴噺");
-
- #region 澶勭悊鍑哄簱鍗曪紝璐т綅锛屽簱瀛橈紝搴撳瓨鎵规淇℃伅
- _unitOfWorkManage.BeginTran();
-
- #region 鍑哄簱鍗�
- cabinOrder.OutStatus = "寮�濮�";
- cabinOrderDetail.OotDetailStatus = "寮�濮�";
- if (cabinOrderDetail.Order_Outqty == cabinOrderDetail.Order_qty)
- {
- cabinOrderDetail.OotDetailStatus = "宸插畬鎴�";
- _deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.鑷姩瀹屾垚);
- }
- else
- {
- _deliveryOrderDetailServices.Repository.UpdateData(cabinOrderDetail);
- }
- var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Out_type == "3").Includes(x => x.Details).First();
- if (cabinOrder1.Details == null || cabinOrder1.Details.Count < 1) cabinOrder.OutStatus = "宸插畬鎴�";
- if (cabinOrder.OutStatus == "宸插畬鎴�")
- Repository.DeleteAndMoveIntoHty(cabinOrder, OperateTypeEnum.鑷姩瀹屾垚);
- else
- Repository.UpdateData(cabinOrder);
- #endregion
-
- #region 搴撳瓨
- Dt_InventoryInfo inventoryInfo = _inventoryInfoService.Repository.QueryFirst(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no && x.LocationCode == LocationCode);
- if (inventoryInfo == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌揣浣嶃�恵LocationCode}銆戠殑搴撳瓨淇℃伅");
- inventoryInfo.SupplyQuantity += Inqty;
- _inventoryInfoService.UpdateData(inventoryInfo);
- #endregion
-
- #region 浠诲姟璁板綍
- Dt_SupplyTask supplyTask = new Dt_SupplyTask()
- {
- WarehouseCode = cabinOrderDetail.Reservoirarea,
- BatchNo = inventoryInfo.BatchNo,
- MaterielName = inventoryInfo.MaterielName,
- MaterielCode = inventoryInfo.MaterielCode,
- MaterielSpec = inventoryInfo.MaterielSpec,
- TaskType = TaskTypeEnum.OutInventory.ObjToInt(),
- TaskStatus = SupplyStatusEnum.CheckFinish.ObjToInt(),
- CreateDate = DateTime.Now,
- Creater = App.User.UserName,
- LocationCode = LocationCode,
- OrderNo = cabinOrder.Out_no,
- StockQuantity = inventoryInfo.StockQuantity,
- SupplyQuantity = Inqty,
- Remark = "鐩樼偣"
- };
- _supplyTaskService.AddData(supplyTask);
- #endregion
-
- #region 搴撳瓨鎵规
- Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode == inventoryInfo.MaterielCode);
- if (inventory_Batch != null)
- {
- inventory_Batch.SupplyQuantity += Inqty;
- _inventory_BatchServices.UpdateData(inventory_Batch);
- }
- #endregion
-
- _unitOfWorkManage.CommitTran();
- #endregion
-
- content.OK(cabinOrderDetail.Order_Outqty.ToString());
+ var LocationCode = saveModel.MainData["locationCode"].ToString();
+ var TaskId = saveModel.MainData["taskId"].ObjToInt();
+ Dt_SupplyTask supplyTask = _supplyTaskService.Repository.QueryFirst(x => x.TaskId == TaskId && x.TaskStatus == SupplyStatusEnum.NewOut.ObjToInt());
+ if (supplyTask == null) throw new Exception("褰撳墠鍑哄簱浠诲姟宸插畬鎴�");
+ if (supplyTask.LocationCode != LocationCode) throw new Exception($"褰撳墠鍑哄簱璐т綅銆恵LocationCode}銆戜笌浠诲姟鍒嗛厤璐т綅涓嶅尮閰�");
+ content = OutTaskFinish(supplyTask);
}
catch (Exception ex)
{
- _unitOfWorkManage.RollbackTran();
content.Error(ex.Message);
}
return content;
}
- public WebResponseContent FeedbackOut(SaveModel saveModel)
+
+ public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask)
{
WebResponseContent content = new WebResponseContent();
try
{
- var LocationCode = saveModel.MainData["LocationCode"].ToString();
- var orderNo = saveModel.MainData["orderNo"].ToString();
- var batchNo = saveModel.MainData["batchNo"].ToString();
- var Inqty = saveModel.MainData["Inqty"].ObjToInt();
- var warehouseCode = saveModel.MainData["warehouseCode"].ToString();
- Dt_DeliveryOrder cabinOrder = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == orderNo && x.Warehouse_no == warehouseCode && x.Out_type != "3").Includes(x => x.Details).First();
+ Dt_DeliveryOrder? cabinOrder = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == supplyTask.OrderNo && x.Warehouse_no == supplyTask.WarehouseCode).Includes(x => x.Details).First();
if (cabinOrder == null) return WebResponseContent.Instance.Error($"鍑哄簱鍗曞凡瀹屾垚");
- Dt_DeliveryOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == batchNo && x.Reservoirarea == warehouseCode).First();
+
+ Dt_DeliveryOrderDetail? cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == supplyTask.BatchNo && x.Reservoirarea == supplyTask.WarehouseCode && x.Goods_no == supplyTask.MaterielCode).FirstOrDefault();
if (cabinOrderDetail == null) return WebResponseContent.Instance.Error($"鍑哄簱鍗曟槑缁嗗凡瀹屾垚");
- Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == cabinOrderDetail.Goods_no);
+ Dt_MaterielInfo materielInfo = _materielInfoService.Repository.QueryFirst(x => x.MaterielCode == cabinOrderDetail.Goods_no);
if (materielInfo == null) return WebResponseContent.Instance.Error($"璇风淮鎶ょ墿鏂欑紪鍙枫�恵cabinOrderDetail.Goods_no}銆戠殑鐗╂枡淇℃伅");
- cabinOrderDetail.Order_Outqty += Inqty;
+ cabinOrderDetail.Order_Outqty += supplyTask.StockQuantity;
if (cabinOrderDetail.Order_Outqty > cabinOrderDetail.Order_qty)
return WebResponseContent.Instance.Error($"鍑哄簱鏁伴噺涓嶅彲瓒呭嚭鍗曟嵁鏁伴噺");
- #region 澶勭悊鍑哄簱鍗曪紝璐т綅锛屽簱瀛橈紝搴撳瓨鎵规淇℃伅
+
+ #region 澶勭悊鍑哄簱鍗曪紝璐т綅锛屽簱瀛橈紝搴撳瓨鎵规淇℃伅,鍑哄簱浠诲姟
_unitOfWorkManage.BeginTran();
#region 鍑哄簱鍗�
@@ -1306,21 +908,20 @@
if (cabinOrderDetail.Order_Outqty == cabinOrderDetail.Order_qty)
{
cabinOrderDetail.OotDetailStatus = "宸插畬鎴�";
- _deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.鑷姩瀹屾垚);
+ //_deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.鑷姩瀹屾垚);
}
- else
- {
- _deliveryOrderDetailServices.Repository.UpdateData(cabinOrderDetail);
- }
- var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Out_type != "3").Includes(x => x.Details).First();
- if (cabinOrder1.Details == null || cabinOrder1.Details.Count < 1) cabinOrder.OutStatus = "宸插畬鎴�";
+ _deliveryOrderDetailServices.Repository.UpdateData(cabinOrderDetail);
+ var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type != "20").Includes(x => x.Details).First();
+ if (!cabinOrder1.Details.Where(x => x.OotDetailStatus != "宸插畬鎴�").Any())
+ cabinOrder.OutStatus = "宸插畬鎴�";
Repository.UpdateData(cabinOrder);
#endregion
#region 搴撳瓨
- Dt_InventoryInfo inventoryInfo = _inventoryInfoService.Repository.QueryFirst(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no && x.LocationCode == LocationCode);
- if (inventoryInfo == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌揣浣嶃�恵LocationCode}銆戠殑搴撳瓨淇℃伅");
- inventoryInfo.StockQuantity -= Inqty;
+ Dt_InventoryInfo inventoryInfo = _inventoryInfoService.Repository.QueryFirst(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no && x.LocationCode == supplyTask.LocationCode);
+ if (inventoryInfo == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌揣浣嶃�恵supplyTask.LocationCode}銆戠殑搴撳瓨淇℃伅");
+ inventoryInfo.StockQuantity -= supplyTask.StockQuantity;
+ inventoryInfo.OutboundQuantity -= supplyTask.StockQuantity;
if (inventoryInfo.StockQuantity <= 0)
_inventoryInfoService.DeleteData(inventoryInfo);
else
@@ -1328,55 +929,100 @@
#endregion
#region 璐т綅
- var location = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
- if (location == null) return WebResponseContent.Instance.Error($"璇风淮鎶よ揣浣嶇紪鍙枫�恵LocationCode}銆戠殑璐т綅淇℃伅");
- if (location.EnableStatus == EnableStatusEnum.Disable.ObjToInt())
- return WebResponseContent.Instance.Error($"璐т綅缂栧彿銆恵LocationCode}銆戝凡绂佺敤锛岃鎭㈠姝e父鍐嶄娇鐢�");
- Dt_InventoryInfo inventoryInfo1 = _inventoryInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
- if (inventoryInfo1 == null)
+ if (supplyTask.WarehouseCode != WarehouseEnum.绔嬪簱.ObjToInt().ToString("000"))
{
- location.LocationStatus = LocationStatusEnum.Free.ObjToInt();
- _basicService.LocationInfoService.UpdateData(location);
+ var location = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == supplyTask.LocationCode);
+ if (location == null)
+ return WebResponseContent.Instance.Error($"璇风淮鎶よ揣浣嶇紪鍙枫�恵supplyTask.LocationCode}銆戠殑璐т綅淇℃伅");
+ //if (location.EnableStatus == EnableStatusEnum.Disable.ObjToInt())
+ // return WebResponseContent.Instance.Error($"璐т綅缂栧彿銆恵supplyTask.LocationCode}銆戝凡绂佺敤锛岃鎭㈠姝e父鍐嶄娇鐢�");
+ Dt_InventoryInfo inventoryInfo1 = _inventoryInfoService.Repository.QueryFirst(x => x.LocationCode == supplyTask.LocationCode);
+ if (inventoryInfo1 == null)
+ {
+ location.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+ _locationInfoService.UpdateData(location);
+ }
}
#endregion
- #region 浠诲姟璁板綍
- Dt_SupplyTask supplyTask = new Dt_SupplyTask()
- {
- WarehouseCode = cabinOrderDetail.Reservoirarea,
- BatchNo = inventoryInfo.BatchNo,
- MaterielName = inventoryInfo.MaterielName,
- MaterielCode = inventoryInfo.MaterielCode,
- MaterielSpec = inventoryInfo.MaterielSpec,
- TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(),
- TaskType = TaskTypeEnum.OutPick.ObjToInt(),
- CreateDate = DateTime.Now,
- Creater = App.User.UserName,
- LocationCode = location.LocationCode,
- OrderNo = cabinOrder.Out_no,
- StockQuantity = Inqty,
- SupplyQuantity = 0,
- Remark = "鍑哄簱"
- };
- _supplyTaskService.AddData(supplyTask);
- #endregion
+ //_supplyTaskService.UpdateData(supplyTask);
+ supplyTask.TaskNum = cabinOrderDetail.Id;
+ supplyTask.TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt();
+ _supplyTaskService.Repository.DeleteAndMoveIntoHty(supplyTask, OperateTypeEnum.浜哄伐瀹屾垚);
- #region 搴撳瓨鎵规
- Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode == inventoryInfo.MaterielCode);
- if (inventory_Batch != null)
+ #region 搴撳瓨鎵规 濡傛灉浠诲姟绫诲瀷鏄皟鎷ㄥ嚭搴撲换鍔★紙8锛夊氨涓嶄慨鏀规壒娆″簱瀛�
+ if (supplyTask.TaskType != TaskTypeEnum.AllocatOut.ObjToInt())
{
- inventory_Batch.StockQuantity -= Inqty;
- if (inventory_Batch.StockQuantity <= 0)
- _inventory_BatchServices.DeleteData(inventory_Batch);
- else
- _inventory_BatchServices.UpdateData(inventory_Batch);
+ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode == inventoryInfo.MaterielCode);
+ if (inventory_Batch != null)
+ {
+ inventory_Batch.StockQuantity -= supplyTask.StockQuantity;
+ inventory_Batch.OutboundQuantity -= supplyTask.StockQuantity;
+ if (inventory_Batch.StockQuantity <= 0)
+ _inventory_BatchServices.DeleteData(inventory_Batch);
+ else
+ _inventory_BatchServices.UpdateData(inventory_Batch);
+ }
}
#endregion
-
+ if (supplyTask.WarehouseCode == WarehouseEnum.绔嬪簱.ObjToInt().ToString("000"))
+ {
+ materielInfo.Business_qty -= supplyTask.StockQuantity;
+ _materielInfoService.UpdateData(materielInfo);
+ if (materielInfo.Business_qty < materielInfo.MinQty)
+ CreateAllocatInOut(materielInfo);//鍒涘缓璋冩嫧浠诲姟
+ }
_unitOfWorkManage.CommitTran();
#endregion
+ content.OK();
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
- content.OK(cabinOrderDetail.Order_Outqty.ToString());
+ /// <summary>
+ /// 浜哄伐鍦ㄥ嚭搴撳崟涓偣鍑诲畬鎴愭寜閽疄鐜颁笂鎶�
+ /// </summary>
+ /// <param name="key">id</param>
+ /// <returns></returns>
+ public WebResponseContent FinishOutOrder(int key)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ Dt_DeliveryOrder deliveryOrder = BaseDal.QueryFirst(x => x.Id == key);
+ List<Dt_DeliveryOrder> deliveryOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == deliveryOrder.Out_no).Includes(x => x.Details).ToList();//鎵惧嚭鎵�鏈夊嚭搴撳崟鍙风浉鍚岀殑鍑哄簱鍗�
+ _unitOfWorkManage.BeginTran();
+
+ foreach (var item in deliveryOrders)
+ {
+ if (item.Details != null)
+ _deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.浜哄伐瀹屾垚);
+ item.Modifier = App.User.UserName;
+ item.ModifyDate = DateTime.Now;
+ item.Details = null;
+ }
+ BaseDal.DeleteAndMoveIntoHty(deliveryOrders, OperateTypeEnum.浜哄伐瀹屾垚);
+ if (deliveryOrder.Out_type == OutOrderTypeEnum.Allocate.ObjToInt().ToString())
+ _unitOfWorkManage.CommitTran();
+ else
+ {
+ var url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk";
+
+ var requestDate = new
+ {
+ order_no = deliveryOrder.Out_no
+ };
+ var result = HttpHelper.Post(url, requestDate.ToJsonString());
+ var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
+ if (response == null) throw new Exception("涓婃姤ERP鍑哄簱鍗曞畬鎴愬け璐ワ紒");
+ if (response.resultCode != "0") throw new Exception(response.resultMsg);
+ _unitOfWorkManage.CommitTran();
+ }
+ content.OK();
}
catch (Exception ex)
{
--
Gitblit v1.9.3