using AutoMapper; using MailKit.Search; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.CodeConfigEnum; using WIDESEA_Core.DB; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_Core.Seed; using WIDESEA_Core.Utilities; using WIDESEA_DTO.Basic; using WIDESEA_DTO.ERP; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.Outbound; using WIDESEA_External.ERPService; using WIDESEA_External.Model; using WIDESEA_IBasicService; using WIDESEA_IOutboundRepository; using WIDESEA_IOutboundService; using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_Model.Models; namespace WIDESEA_OutboundService { public class OutboundOrderService : ServiceBase, IOutboundOrderService { private readonly IMapper _mapper; private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IBasicService _basicService; private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository; private readonly IStockService _stockService; public IOutboundOrderRepository Repository => BaseDal; private readonly IInvokeERPService _invokeERPService; private readonly IOutStockLockInfoService _outStockLockInfoService; private readonly IOutboundOrderRepository _outboundOrderRepository; public OutboundOrderService(IOutboundOrderRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IBasicService basicService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IStockService stockService, IInvokeERPService invokeERPService, IOutStockLockInfoService outStockLockInfoService, IOutboundOrderRepository outboundOrderRepository) : base(BaseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; _basicService = basicService; _outboundOrderDetailRepository = outboundOrderDetailRepository; _stockService = stockService; _invokeERPService = invokeERPService; _outStockLockInfoService = outStockLockInfoService; _outboundOrderRepository = outboundOrderRepository; } public override WebResponseContent AddData(SaveModel saveModel) { if (saveModel.MainData.TryGetValue(nameof(Dt_OutboundOrder.UpperOrderNo).FirstLetterToLower(), out object? upperOrderNo) && upperOrderNo != null && !string.IsNullOrEmpty(upperOrderNo.ToString())) { Dt_OutboundOrder outboundOrder = BaseDal.QueryFirst(x => x.UpperOrderNo == upperOrderNo.ToString() && x.WarehouseId == Convert.ToInt32(saveModel.MainData[nameof(Dt_OutboundOrder.WarehouseId).FirstLetterToLower()])); if (outboundOrder != null) { return WebResponseContent.Instance.Error($"{upperOrderNo}领料单号已存在"); } } if (saveModel.DetailData.Count>0) { for (int i = 0; i < saveModel.DetailData.Count; i++) { saveModel.DetailData[i].Add("orderDetailStatus", OrderDetailStatusEnum.New.ObjToInt()); } } return base.AddData(saveModel); } public WebResponseContent GetOutboundOrders(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); try { int pageNo = saveModel.MainData["pageNo"].ObjToInt(); string? orderNo = saveModel.MainData["orderNo"].ToString(); int warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); List _OutboundOrders = new List(); if (string.IsNullOrEmpty(orderNo)) { _OutboundOrders = Db.Queryable().Where(x => x.OrderStatus < OutOrderStatusEnum.出库完成.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); } else { _OutboundOrders = Db.Queryable().Where(x => (x.OrderNo.Contains(orderNo)) && x.OrderStatus < OutOrderStatusEnum.出库完成.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); } content.OK(data: _OutboundOrders); } catch (Exception ex) { content.Error(ex.Message); } return content; } public WebResponseContent outpinku(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); try { var orderNo = saveModel.MainData["orderNo"].ToString(); var warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); var serNum = saveModel.MainData["sn"].ToString(); Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == warehouseId); if (warehouse == null) { return WebResponseContent.Instance.Error($"未找到该仓库信息"); } Dt_OutboundOrder outboundOrder = BaseDal.Db.Queryable().Where(x => x.OrderNo == orderNo && x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).First(); if (outboundOrder == null) { return WebResponseContent.Instance.Error($"未找到出库单信息"); } if (outboundOrder.Details == null || outboundOrder.Details.Count <= 0) { return WebResponseContent.Instance.Error($"未找到出库单明细信息"); } MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis(AnalysisCodeEnum.MatSerNumAnalysis, serNum); Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == model.MaterielCode); if (materielInfo == null) { return WebResponseContent.Instance.Error($"未找到该物料的信息"); } if (materielInfo.WarehouseId != outboundOrder.WarehouseId) { return WebResponseContent.Instance.Error($"该物料不属于本仓"); } Dt_OutboundOrderDetail outboundOrderDetail = outboundOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode); if (outboundOrderDetail == null) return WebResponseContent.Instance.Error($"该物料不属于本出库单"); if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) return WebResponseContent.Instance.Error($"本出库单当前物料已出库完成"); if (outboundOrderDetail.OrderQuantity - outboundOrderDetail.OverOutQuantity < model.Quantity) return WebResponseContent.Instance.Error($"出库数量超出出库单"); Dt_StockInfoDetail stockInfoDetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.MaterielCode == model.MaterielCode && x.BatchNo == model.LotNo); if (stockInfoDetail == null) return WebResponseContent.Instance.Error($"未找到库存"); if (stockInfoDetail.StockQuantity < model.Quantity) return WebResponseContent.Instance.Error($"库存不足"); Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.Id == stockInfoDetail.StockId); if (stockInfo == null) return WebResponseContent.Instance.Error($"未找到库存主表"); if (stockInfo.LocationCode != "平库位") return WebResponseContent.Instance.Error($"库存不属于平库位"); Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo() { PalletCode = stockInfo.PalletCode, AssignQuantity = model.Quantity, MaterielCode = model.MaterielCode, BatchNo = model.LotNo, LocationCode = stockInfo.LocationCode, MaterielName = materielInfo.MaterielName, OrderDetailId = outboundOrderDetail.Id, OrderNo = outboundOrder.OrderNo, OrderType = outboundOrder.OrderType, OriginalQuantity = stockInfoDetail.StockQuantity, Status = OutLockStockStatusEnum.出库完成.ObjToInt(), StockId = stockInfo.Id, TaskNum = 0, OrderQuantity = outboundOrderDetail.OrderQuantity, Unit = outboundOrderDetail.Unit, ProductionDate = stockInfoDetail.ProductionDate, EffectiveDate = stockInfoDetail.EffectiveDate }; #region 修改出库单 outboundOrderDetail.OverOutQuantity += outStockLockInfo.AssignQuantity; if (outboundOrderDetail.OrderQuantity > outboundOrderDetail.OverOutQuantity) outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); else outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); int overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); if (outboundOrder.Details.Count == overCount) outboundOrder.OrderStatus = OutOrderStatusEnum.出库完成.ObjToInt(); else outboundOrder.OrderStatus = OutOrderStatusEnum.出库中.ObjToInt(); #endregion #region 修改库存 stockInfoDetail.StockQuantity -= stockInfoDetail.StockQuantity - outStockLockInfo.AssignQuantity; #endregion _unitOfWorkManage.BeginTran(); _outStockLockInfoService.Repository.AddData(outStockLockInfo); BaseDal.UpdateData(outboundOrder); _outboundOrderDetailRepository.UpdateData(outboundOrderDetail); if (stockInfoDetail.StockQuantity > 0) { _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail); } else { _stockService.StockInfoDetailService.Repository.DeleteData(stockInfoDetail); if (stockInfo.Details.Count <= 1) _stockService.StockInfoService.Repository.DeleteData(stockInfo); } _unitOfWorkManage.CommitTran(); #region 出库完成上报ERP //生产领料,研发领料,标准领料,推送ERP出库 if (outboundOrder.OrderStatus == OutOrderStatusEnum.出库完成.ObjToInt() && outboundOrder.OrderType==OutOrderTypeEnum.Issue.ObjToInt()) _invokeERPService.InvokeOutStandardsApi(GetERPIssueModel(outboundOrder, warehouse.WarehouseCode)); #endregion content.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } public ERPIssueModel GetERPIssueModel(Dt_OutboundOrder outboundOrder, string WarehouseCode) { ERPIssueModel issueModel = new ERPIssueModel(); try { List stockLockInfos = _outStockLockInfoService.OutStockLockInfos(outboundOrder.OrderNo); List eRPPickModels = new List(); foreach (var item in stockLockInfos) { ERPPickItemModel pickItemModel = new ERPPickItemModel() { Lotno = item.BatchNo, Qty = item.AssignQuantity.ToString(), Location = WarehouseCode }; //获取出库单明细 Dt_OutboundOrderDetail outboundOrderDetail = outboundOrder.Details.FirstOrDefault(x => x.Id == item.OrderDetailId); ERPPickModel pickModel = new ERPPickModel() { Rowindex = outboundOrderDetail.RowNo, Material = outboundOrderDetail.MaterielCode, Qty = pickItemModel.Qty, Dataitem = new List { pickItemModel } }; eRPPickModels.Add(pickModel); } ERPIssueItemModel issueItemModel = new ERPIssueItemModel() { Pickcode = outboundOrder.UpperOrderNo, PickList = eRPPickModels }; string Createuser = ""; if (!string.IsNullOrEmpty(App.User.UserName)) Createuser = App.User.UserName; else Createuser = stockLockInfos.FirstOrDefault().Creater; issueModel = new ERPIssueModel() { UniqueTag = outboundOrder.Id.ToString(), Code = CreateCodeByRule(nameof(RuleCodeEnum.FLCodeRule)), WarehouseCode = WarehouseCode, Docremark = "", Deptno = outboundOrder.DepartmentCode, Deptname = outboundOrder.DepartmentName, Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Createuser = Createuser, Issitem = new List() { issueItemModel }, }; //更新发料单号 outboundOrder.UpFLOrderNo = issueModel.Code; BaseDal.UpdateData(outboundOrder); } catch (Exception ex) { throw new Exception(ex.Message); } return issueModel; } public WebResponseContent ReceiveOutOrder(ErpOutOrderDTO model) { try { Dt_OutboundOrder oldOutboundOrder = BaseDal.Db.Queryable().Where(x => x.UpperOrderNo == model.OrderNo && x.OrderStatus < OutOrderStatusEnum.关闭.ObjToInt()).Includes(x => x.Details).OrderBy(x => x.CreateDate).First(); Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == model.MCode); if (materielInfo == null) { DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"未找到该物料信息"); } Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == model.WaId); if (warehouse == null) { DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"未找到该仓库信息"); } if (materielInfo.WarehouseId!= materielInfo.WarehouseId) { DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"物料{materielInfo}不属于{warehouse.WarehouseName}"); } if (model.Way == 1) { if (oldOutboundOrder != null) { if (oldOutboundOrder.Details.FirstOrDefault(x => x.RowNo == Convert.ToInt32(model.RowNo)) != null) { DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"该明细行号已存在"); } if (oldOutboundOrder.WarehouseId != warehouse.WarehouseId) { DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"仓库不一致"); } else { Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail() { RowNo = Convert.ToInt32(model.RowNo), BatchNo = model.MLot, MaterielCode = model.MCode, MaterielName = materielInfo.MaterielName, MaterielSpec=materielInfo.MaterielSpec, OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), OrderQuantity = model.Qty, OrderId = oldOutboundOrder.Id }; _outboundOrderDetailRepository.AddData(outboundOrderDetail); } } else { Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail() { RowNo = Convert.ToInt32(model.RowNo), BatchNo = model.MLot, MaterielCode = model.MCode, MaterielSpec = materielInfo.MaterielSpec, MaterielName = materielInfo.MaterielName, OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), OrderQuantity = model.Qty, Unit = materielInfo.MaterielUnit }; Dt_OutboundOrder outboundOrder = new Dt_OutboundOrder() { UpperOrderNo = model.OrderNo, OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(), OrderType = OutOrderTypeEnum.Issue.ObjToInt(), CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), WarehouseId = warehouse.WarehouseId, DepartmentCode = model.DepartmentCode, DepartmentName = model.DepartmentName, Details = new List { outboundOrderDetail }, Remark = model.Node }; outboundOrder.OrderType = model.OType switch { 1 or 2 or 3=> OutOrderTypeEnum.Issue.ObjToInt(), 4=>OutOrderTypeEnum.Quality.ObjToInt(), 5=>OutOrderTypeEnum.Allocate.ObjToInt(), 6=>OutOrderTypeEnum.MaintenanceIssue.ObjToInt(), 7=>OutOrderTypeEnum.SaleOut.ObjToInt(), 8=>OutOrderTypeEnum.Rework.ObjToInt(), _=>0 }; Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand(); } } else if (model.Way == 2) { if (oldOutboundOrder == null) { return WebResponseContent.Instance.Error($"未找到该出库单"); } Dt_OutboundOrderDetail? outboundOrderDetail = oldOutboundOrder.Details.FirstOrDefault(x => x.RowNo == Convert.ToInt32(model.RowNo)); if (outboundOrderDetail == null) { return WebResponseContent.Instance.Error($"未找到该明细行号信息"); } if (outboundOrderDetail.OrderDetailStatus != OrderDetailStatusEnum.New.ObjToInt()) { return WebResponseContent.Instance.Error($"该明细不可修改"); } outboundOrderDetail = new Dt_OutboundOrderDetail() { RowNo = Convert.ToInt32(model.RowNo), BatchNo = model.MLot, MaterielCode = model.MCode, MaterielSpec = materielInfo.MaterielSpec, MaterielName = materielInfo.MaterielName, OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), OrderQuantity = model.Qty, Unit = model.Unit, }; _outboundOrderDetailRepository.UpdateData(outboundOrderDetail); } else if (model.Way == 3) { if (oldOutboundOrder == null) { return WebResponseContent.Instance.Error($"未找到该出库单"); } _unitOfWorkManage.BeginTran(); BaseDal.DeleteData(oldOutboundOrder); _outboundOrderDetailRepository.DeleteData(oldOutboundOrder.Details); _unitOfWorkManage.CommitTran(); } return WebResponseContent.Instance.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } /// /// 该单据失败进行删除 /// /// public void DelOutOrder(Dt_OutboundOrder outboundOrder) { try { if (outboundOrder != null && outboundOrder.Details.Count > 0) { _unitOfWorkManage.BeginTran(); _outboundOrderRepository.DeleteAndMoveIntoHty(outboundOrder, OperateTypeEnum.自动删除); _outboundOrderDetailRepository.DeleteAndMoveIntoHty(outboundOrder.Details, OperateTypeEnum.自动删除); _unitOfWorkManage.CommitTran(); } } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); throw new Exception(ex.Message); } } //上报出库完成 public WebResponseContent TestOutUpload(int id, List? outStockLockInfos) { try { Dt_OutboundOrder outboundOrder = Db.Queryable().Where(x => x.Id == id).Includes(x => x.Details).First(); Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == outboundOrder.WarehouseId); ERPIssueModel issueModel = new ERPIssueModel(); List stockInfos = new List(); List _OutStockLockInfos = new List(); int overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); if (outboundOrder.Details.Count == overCount) { outboundOrder.OrderStatus = OutOrderStatusEnum.出库完成.ObjToInt(); _outboundOrderRepository.UpdateData(outboundOrder); } if (outboundOrder == null) { return WebResponseContent.Instance.Error("出库单不存在"); } if (outboundOrder.CreateType == OrderCreateTypeEnum.CreateInSystem.ObjToInt()) { return WebResponseContent.Instance.OK(); } //测试架库给ERP上报出库完成 if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) { List eRPPicks = new List(); foreach (var item in outboundOrder.Details) { if (item.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) continue; stockInfos = TestOutStocksUpdate(warehouse, item).Data as List ?? null; if (stockInfos == null) continue; List eRPOutPick = new List(); for (int i = 0; i < stockInfos.Count; i++) { ERPPickItemModel pickItemModel = new ERPPickItemModel() { Lotno = stockInfos[i].Details[0].BatchNo, Qty = stockInfos[i].Details[0].StockQuantity.ObjToInt().ToString(), Location = warehouse.WarehouseCode }; eRPOutPick.Add(pickItemModel); } ERPPickModel pickModel = new ERPPickModel() { Rowindex = item.RowNo, Material = item.MaterielCode, Qty = (item.OrderQuantity.ObjToInt()).ToString(), Dataitem = eRPOutPick }; eRPPicks.Add(pickModel); } ERPIssueItemModel issueItemModel = new ERPIssueItemModel() { Pickcode = outboundOrder.UpperOrderNo, PickList = eRPPicks }; issueModel = new ERPIssueModel() { UniqueTag = id.ToString(), Code = CreateCodeByRule(nameof(RuleCodeEnum.FLCodeRule)), WarehouseCode = warehouse.WarehouseCode, Docremark = "", Deptno = outboundOrder.DepartmentCode, Deptname = outboundOrder.DepartmentName, Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Createuser = outboundOrder.Creater, Issitem = new List() { issueItemModel }, }; //更新发料单号 outboundOrder.UpFLOrderNo = issueModel.Code; BaseDal.UpdateData(outboundOrder); _invokeERPService.InvokeOutStandardsApi(issueModel); } else { #region MyRegion foreach (var item in outStockLockInfos) { if (item.OrderQuantity == item.AssignQuantity) { item.Status = OutLockStockStatusEnum.出库完成.ObjToInt(); } _OutStockLockInfos.Add(item); } #endregion #region MyRegion //List eRPPickModels = new List(); ////获取出库详情单 //foreach (var item in outStockLockInfos) //{ // ERPPickItemModel pickItemModel = new ERPPickItemModel() // { // Lotno = item.BatchNo, // Qty = item.AssignQuantity.ObjToInt().ToString(), // Location = warehouse.WarehouseCode // }; // //获取出库单明细 // Dt_OutboundOrderDetail outboundOrderDetail = outboundOrder.Details.FirstOrDefault(x => x.Id == item.OrderDetailId); // ERPPickModel pickModel = new ERPPickModel() // { // Rowindex = outboundOrderDetail.RowNo, // Material = outboundOrderDetail.MaterielCode, // Qty = pickItemModel.Qty, // Dataitem = new List { pickItemModel } // }; // if (item.OrderQuantity == item.AssignQuantity) // { // item.Status = OutLockStockStatusEnum.出库完成.ObjToInt(); // } // eRPPickModels.Add(pickModel); // _OutStockLockInfos.Add(item); //} //ERPIssueItemModel issueItemModel = new ERPIssueItemModel() //{ // Pickcode = outboundOrder.UpperOrderNo, // PickList = eRPPickModels //}; //issueModel = new ERPIssueModel() //{ // UniqueTag = id.ToString(), // Code = CreateCodeByRule(nameof(RuleCodeEnum.FLCodeRule)), // WarehouseCode = warehouse.WarehouseCode, // Docremark = "", // Deptno = outboundOrder.DepartmentCode, // Deptname = outboundOrder.DepartmentName, // Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), // Createuser = outStockLockInfos.FirstOrDefault().Creater, // Issitem = new List() { issueItemModel }, //}; #endregion if (stockInfos.Count > 0) { _stockService.StockInfoService.Repository.UpdateData(stockInfos); } else { _outStockLockInfoService.Repository.UpdateData(_OutStockLockInfos); } //出库完成上报ERP 测试注释 if (outboundOrder.OrderStatus == OutOrderStatusEnum.出库完成.ObjToInt()) { issueModel = GetERPIssueModel(outboundOrder, warehouse.WarehouseCode); _invokeERPService.InvokeOutStandardsApi(issueModel); } } return WebResponseContent.Instance.OK(); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } static object lock_code = new object(); public string CreateCodeByRule(string ruleCode) { lock (lock_code) { string code = string.Empty; DateTime dateTime = DateTime.Now; DateTime now = DateTime.Now; try { if (string.IsNullOrEmpty(ruleCode)) throw new ArgumentNullException(nameof(ruleCode)); SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig { IsAutoCloseConnection = true, DbType = DbType.SqlServer, ConnectionString = DBContext.ConnectionString }); Dt_CodeRuleConfig codeRuleConfig = sugarClient.Queryable().Where(x => x.RuleCode == ruleCode).First(); if (codeRuleConfig == null) throw new ArgumentNullException(nameof(codeRuleConfig)); if (codeRuleConfig.ModifyDate != null) { dateTime = Convert.ToDateTime(codeRuleConfig.ModifyDate); } else { dateTime = Convert.ToDateTime(codeRuleConfig.CreateDate); } if (now.Year == dateTime.Year && now.Month == dateTime.Month && now.Day == dateTime.Day) { now = dateTime; codeRuleConfig.CurrentVal = Convert.ToInt32(codeRuleConfig.CurrentVal) + 1; } else { codeRuleConfig.CurrentVal = 1; } codeRuleConfig.ModifyDate = DateTime.Now; code = codeRuleConfig.Format; code = code.Replace($"[{CodeFormatTypeEnum.YYYY}]", now.Year.ToString().PadLeft(4, '0')); code = code.Replace($"[{CodeFormatTypeEnum.MM}]", now.Month.ToString().PadLeft(2, '0')); code = code.Replace($"[{CodeFormatTypeEnum.DD}]", now.Day.ToString().PadLeft(2, '0')); code = code.Replace($"[{CodeFormatTypeEnum.ST}]", codeRuleConfig.StartStr?.ToString() ?? ""); code = code.Replace($"[{CodeFormatTypeEnum.NUM}]", codeRuleConfig.CurrentVal.ToString().PadLeft(codeRuleConfig.Length, '0')); Dictionary keyValuePairs = new Dictionary() { { nameof(codeRuleConfig.CurrentVal), codeRuleConfig.CurrentVal }, { nameof(codeRuleConfig.Id), codeRuleConfig.Id }, { nameof(codeRuleConfig.ModifyDate), DateTime.Now } }; sugarClient.Updateable(keyValuePairs).AS(MainDb.CodeRuleConfig).WhereColumns(nameof(codeRuleConfig.Id)).ExecuteCommand(); sugarClient.Updateable(codeRuleConfig); } catch (Exception ex) { } return code; } } /// /// 更改出库单库存状态 /// /// /// /// public WebResponseContent TestOutStocksUpdate(Dt_Warehouse warehouse, Dt_OutboundOrderDetail outboundOrderDetails) { try { //获取出库单库存 List stockInfos = BaseDal.Db.Queryable().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(j => j.MaterielCode == outboundOrderDetails.MaterielCode)).Take((int)outboundOrderDetails.OrderQuantity).ToList(); if (stockInfos.Count <= 0) { return WebResponseContent.Instance.OK(); } //更改状态 stockInfos.ForEach(x => { x.StockStatus = StockStatusEmun.入库完成.ObjToInt(); }); return WebResponseContent.Instance.OK("成功", stockInfos); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } /// /// 根据出库单推送ERP系统 /// /// /// /// public WebResponseContent PushERPOutBound(int outId, string WarehouseCode) { WebResponseContent content=new WebResponseContent(); try { //获取出库单 Dt_OutboundOrder outboundOrder = Db.Queryable().Where(x => x.Id == outId).Includes(x => x.Details).First(); if (outboundOrder == null) { return content.Error("出库单不存在"); } if (outboundOrder.Details.Count!=(outboundOrder.Details.Where(x=>x.OrderDetailStatus==OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count)||outboundOrder.OrderStatus!=OutOrderStatusEnum.出库完成.ObjToInt()) { return content.Error("该出库单未完成"); } ERPIssueModel issueModel = GetERPIssueModel(outboundOrder, WarehouseCode); string response=_invokeERPService.InvokeOutStandardsApi(issueModel); return content.OK(response); } catch (Exception ex) { content.Error(ex.Message); } return content; } public WebResponseContent OutUpOrderGetFLOrder() { WebResponseContent content = new WebResponseContent(); try { //获取出库单 List outboundOrders = BaseDal.QueryData(x => x.OrderStatus == OutOrderStatusEnum.出库完成.ObjToInt() && x.UpFLOrderNo == null); List logs = BaseDal.Db.Queryable().Where(x => x.RequestParam.Contains("领料出库通知单") && x.Id > 14606).ToList(); foreach (var item in outboundOrders) { Sys_Log? log = logs.FirstOrDefault(x=>x.RequestParam.Contains(item.UpperOrderNo)); if (log == null) { continue; } ERPBaseModel baseModel= log.RequestParam.DeserializeObject>(); item.UpFLOrderNo = baseModel.Data.Code; } BaseDal.UpdateData(outboundOrders); content.OK(); } catch (Exception ex) { content.Error(ex.Message); } return content; } } }