From a0a0df2e824b6fe7e5a3c0afce78127fecf84fc9 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 03 十一月 2025 08:23:05 +0800
Subject: [PATCH] ERP接口代码更新,WCS代码优化,出入库分配优化
---
项目代码/WMS/WMSServices/WIDESEA_InboundService/InboundOrderService.cs | 1882 ++--------------------------------------------------------
1 files changed, 80 insertions(+), 1,802 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/InboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/InboundOrderService.cs"
index ae1b538..f4cc385 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/InboundOrderService.cs"
@@ -1,1851 +1,129 @@
锘縰sing AutoMapper;
-using HslCommunication.WebSocket;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Newtonsoft.Json;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
-using SqlSugar;
using System;
-using System.Collections;
using System.Collections.Generic;
-using System.Dynamic;
-using System.Globalization;
using System.Linq;
-using System.Linq.Expressions;
-using System.Reflection;
-using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
-using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.MaterielEnum;
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;
-using WIDESEA_DTO.Basic;
-using WIDESEA_DTO.ERP;
-using WIDESEA_DTO.Inbound;
+using WIDESEA_Core;
using WIDESEA_DTO.MES;
-using WIDESEA_External.ERPService;
-using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
-using WIDESEA_IBasicService;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
-using WIDESEA_IRecordService;
-using WIDESEA_IStockRepository;
-using WIDESEA_IStockService;
-using WIDESEA_ITaskInfoRepository;
-using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
-using WIDESEA_StockRepository;
-using static Org.BouncyCastle.Pqc.Crypto.Utilities.PqcOtherInfoGenerator;
+using WIDESEA_DTO.ERP;
+using WIDESEA_Core.Helper;
+using System.Security.Cryptography;
namespace WIDESEA_InboundService
{
public class InboundOrderService : ServiceBase<Dt_InboundOrder, IInboundOrderRepository>, IInboundOrderService
{
- private readonly IMapper _mapper;
- private readonly IUnitOfWorkManage _unitOfWorkManage;
- private readonly IInboundRepository _inboundRepository;
- private readonly IBasicRepository _basicRepository;
- private readonly IStockRepository _stockRepository;
- private readonly IRecordService _recordService;
- private readonly IInvokeERPService _invokeERPService;
- private readonly IWarehouseService _warehouseService;
- private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
-
public IInboundOrderRepository Repository => BaseDal;
-
- public InboundOrderService(IInboundOrderRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, IStockRepository stockRepository, IRecordService recordService, IInvokeERPService invokeERPService, IWarehouseService warehouseService, IPalletTypeInfoRepository palletTypeInfoRepository) : base(BaseDal)
+ private readonly IBasicRepository _basicRepository;
+ private readonly IMapper _mapper;
+ public InboundOrderService(IInboundOrderRepository BaseDal, IBasicRepository basicRepository, IMapper mapper) : base(BaseDal)
{
- _mapper = mapper;
- _unitOfWorkManage = unitOfWorkManage;
- _inboundRepository = inboundRepository;
_basicRepository = basicRepository;
- _stockRepository = stockRepository;
- _recordService = recordService;
- _invokeERPService = invokeERPService;
- _warehouseService = warehouseService;
- _palletTypeInfoRepository = palletTypeInfoRepository;
- }
- public override object GetDetailPage(PageDataOptions pageData)
- {
- Type t = typeof(Dt_InboundOrder);
-
- if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
- string keyName = t.GetKeyName();
- ////鐢熸垚鏌ヨ鏉′欢
- //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
- int totalCount = 0;
- PropertyInfo propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
- if (propertyInfo != null)
- {
- Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
- Navigate navigate = propertyInfo.GetCustomAttribute<Navigate>();
- List<Dt_InboundOrderDetail> list = BaseDal.Db.Queryable<Dt_InboundOrderDetail>().Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
- decimal sum = 0;
- list.ForEach(x =>
- {
- sum += Convert.ToDecimal(x.OrderQuantity);
- });
- PageGridData<Dt_InboundOrderDetail> pageGridData = new PageGridData<Dt_InboundOrderDetail>()
- {
- Total= totalCount,
- Rows=list,
- Summary=new
- {
- OrderQuantity = Math.Round(sum, 3),
- }
- };
- return pageGridData;
- }
- return new PageGridData<object>(total: 0, null);
+ _mapper = mapper;
}
/// <summary>
- /// 鍏朵粬鍏ュ簱鍗曟帴鏀�(璋冩嫈鍏ヤ粨,瀹緵鍥炴敹,鐗╂枡閿�鍞��璐�)
+ /// 娣诲姞ERP鍏ュ簱鍗曚俊鎭�
/// </summary>
/// <returns></returns>
- public WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO model)
+ public WebResponseContent ReceiveInbound(ERPInboundOrderDTO eRPInboundOrderDTO)
{
+ WebResponseContent content=new WebResponseContent();
try
{
- return model.Way switch
+ if (eRPInboundOrderDTO == null)
{
- 1 => AddSingOrder(model),
- 2 => UpdateSingOrder(model),
- 3 => DeleteSingOrder(model),
- _ => WebResponseContent.Instance.Error($"鎿嶄綔绫诲瀷涓嶅瓨鍦�,Way:{model.Way}"),
- };
- }
- catch (Exception ex)
- {
- return WebResponseContent.Instance.Error(ex.Message);
- }
- }
- /// <summary>
- /// 鏂板鍗曟嵁
- /// </summary>
- public WebResponseContent AddSingOrder(ErpInOrderDTO model)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- //鑾峰彇鐗╂枡淇℃伅
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode==model.MCode);
- if (materielInfo==null)
- {
- return content.Error($"鐗╂枡{model.MCode}涓嶅瓨鍦�!");
+ return content.Error("鍏ュ簱淇℃伅涓嶈兘浼犲叆涓虹┖");
}
- Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaId);
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == eRPInboundOrderDTO.WarehouseCode);
if (warehouse == null)
{
- return content.Error($"鏈壘鍒颁粨搴撲俊鎭�");
+ return content.Error($"浠撳簱淇℃伅涓嶅瓨鍦▄eRPInboundOrderDTO.WarehouseCode}");
}
- Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).Includes(x=>x.Details).First();
- if (inboundOrderOld!=null)
+ //鑾峰彇鎵�鏈夌墿鏂�
+ List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == warehouse.WarehouseId && x.MaterielInvOrgId == MaterielInvOrgEnum.鏂板巶.ObjToInt());
+ //鍒ゆ柇鏄惁瀛樺湪鐗╂枡
+ InboundDetailItem? inboundDetailItem = eRPInboundOrderDTO.InboundDetail.FirstOrDefault(x => !materielInfos.Select(x => x.MaterielCode).Contains(x.MaterialCode));
+ if (inboundDetailItem != null)
{
- if (inboundOrderOld.OrderStatus!= OrderDetailStatusEnum.New.ObjToInt())
+ return content.Error($"鍏ュ簱鏉$爜{nameof(inboundDetailItem.BarCode)}:{inboundDetailItem.BarCode}鐗╂枡:{inboundDetailItem.MaterialCode}涓嶅瓨鍦�");
+ }
+ //鑾峰彇鎵�鏈夐噰璐俊鎭�
+ List<Dt_InboundOrder> inboundOrdersOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Includes(x => x.Details).ToList();
+
+ if (eRPInboundOrderDTO.OperateType == 1)
+ {
+ //鍒ゆ柇閲嶅鎻掑叆
+ Dt_InboundOrder? inboundOrderOld = inboundOrdersOld.FirstOrDefault(x => x.UpperOrderNo == eRPInboundOrderDTO.InboundCode);
+ if (inboundOrderOld != null)
{
- return content.Error($"{model.OrderNo}鍗曟嵁宸插紑濮�!");
+ return content.Error($"鍏ュ簱鍗曞崟鍙穥eRPInboundOrderDTO.InboundCode}淇℃伅宸插瓨鍦�");
}
- Dt_InboundOrderDetail? inboundOrderDetailOld = inboundOrderOld.Details?.FirstOrDefault(x => x.RowNo == model.RowNo.ObjToInt() && x.MaterielCode == model.MCode);
- if (inboundOrderDetailOld!=null)
+ List<Dt_InboundOrderDetail> inboundOrderDetails = eRPInboundOrderDTO.InboundDetail.Select(x => _mapper.Map<Dt_InboundOrderDetail>(x)).ToList();
+ Dt_InboundOrder inboundOrder = _mapper.Map<Dt_InboundOrder>(eRPInboundOrderDTO);
+ inboundOrderDetails.ForEach(x =>
{
- inboundOrderDetailOld.OrderQuantity += model.Qty;
- _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetailOld);
- }
- else
- {
- Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail()
- {
- OrderId= inboundOrderOld.Id,
- MaterielCode = model.MCode,
- BatchNo = "",
- OrderQuantity = model.Qty,
- ReceiptQuantity = 0,
- OverInQuantity = 0,
- OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
- Unit = materielInfo.MaterielUnit,
- RowNo = model.RowNo.ObjToInt(),
- MaterielName = materielInfo.MaterielName,
- MaterielSpec = materielInfo.MaterielSpec
- };
- _inboundRepository.InboundOrderDetailRepository.AddData(orderDetail);
- }
- }
- else
- {
- Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail()
- {
- MaterielCode = model.MCode,
- BatchNo = "",
- OrderQuantity = model.Qty,
- ReceiptQuantity = 0,
- OverInQuantity = 0,
- OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
- Unit = materielInfo.MaterielUnit,
- RowNo = model.RowNo.ObjToInt(),
- MaterielName = materielInfo.MaterielName,
- MaterielSpec = materielInfo.MaterielSpec
- };
-
- Dt_InboundOrder inboundOrder = new Dt_InboundOrder()
- {
- UpperOrderNo = model.OrderNo,
- WarehouseId = warehouse.WarehouseId,
- SupplierId = "",
- OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
- CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
- Remark = model.Note,
- Details = new List<Dt_InboundOrderDetail> { orderDetail }
- };
- switch (model.OType)
- {
- case 1:
- inboundOrder.OrderType = InOrderTypeEnum.Allocat.ObjToInt();
- break;
- case 3:
- inboundOrder.OrderType = InOrderTypeEnum.CustomerRecovery.ObjToInt();
- break;
- case 6:
- inboundOrder.OrderType = InOrderTypeEnum.SaleReturn.ObjToInt();
- break;
- default:
- break;
- };
- Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
- }
- return content.OK("鎴愬姛");
- }
- catch (Exception ex)
- {
- content.Error(ex.Message);
- }
- return content;
- }
- /// <summary>
- /// 淇敼鍗曟嵁
- /// </summary>
- public WebResponseContent UpdateSingOrder(ErpInOrderDTO model)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- //鑾峰彇鍗曟嵁淇℃伅
- Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).First();
- if (inboundOrder == null)
- {
- return content.Error($"鍗曟嵁{model.OrderNo}涓嶅瓨鍦�!");
- }
- if (inboundOrder.OrderStatus>=InOrderStatusEnum.鍏ュ簱涓�.ObjToInt())
- {
- return content.Error($"鍗曟嵁{model.OrderNo}鍏ュ簱涓垨宸插畬鎴�");
- }
- }
- catch (Exception ex)
- {
- content.Error(ex.Message);
- }
- return content;
- }
- /// <summary>
- /// 鍒犻櫎鍗曟嵁
- /// </summary>
- public WebResponseContent DeleteSingOrder(ErpInOrderDTO model)
- {
- WebResponseContent content = new WebResponseContent();
- return content;
- }
- public WebResponseContent GetInboundOrders(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<Dt_InboundOrder> dt_ReceiveOrders = new List<Dt_InboundOrder>();
- if (string.IsNullOrEmpty(orderNo))
- {
- dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 10);
- }
- else
- {
- dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => (x.InboundOrderNo.Contains(orderNo)) && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).Includes(x => x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 10);
- }
-
- content.OK(data: dt_ReceiveOrders);
- }
- catch (Exception ex)
- {
- content.Error(ex.Message);
- }
- return content;
- }
- /// <summary>
- /// 鍗曚釜鐗╂枡鐮佺粍鐩� 閫傜敤娴嬭瘯鏋�
- /// </summary>
- /// <param name="inboundOrderId"></param>
- /// <param name="palletCode"></param>
- /// <param name="serNum"></param>
- /// <returns></returns>
- public WebResponseContent MaterielGroup(int inboundOrderId, string palletCode, string serNum)
- {
- try
- {
- Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderId).Includes(x => x.Details).First();
- if (inboundOrder == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅");
- }
- if (inboundOrder.OrderStatus >= InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鍏ュ簱鍗曞凡缁撴潫");
- }
- if (inboundOrder.Details.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅");
- }
- MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNum);
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterielCode);
- if (materielInfo == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
- }
- if (materielInfo.WarehouseId != inboundOrder.WarehouseId)
- {
- return WebResponseContent.Instance.Error($"璇ョ墿鏂欎笉灞炰簬鏈粨");
- }
- Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
- if (receiveOrder == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗�");
- }
- if (receiveOrder.Details.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗曟槑缁�");
- }
- List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList();
- if (!purchaseOrderNos.Contains(model.PurchaseOrderNo))
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旀敹璐у崟鏄庣粏涓噰璐崟");
- }
- Dt_ReceiveOrderDetail? receiveOrderDetail = receiveOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode);
- if (receiveOrderDetail == null)
- {
- return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
- }
- Dt_InboundOrderDetail? inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode);
- if (inboundOrderDetail == null)
- {
- return WebResponseContent.Instance.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
- }
- if (inboundOrderDetail.OrderDetailStatus > OrderDetailStatusEnum.GroupAndInbound.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"瀵瑰簲鍏ュ簱鍗曟槑缁嗗凡缁撴潫");
- }
- float inboundDetailSum = inboundOrderDetail.OverInQuantity + inboundOrderDetail.ReceiptQuantity;
- if (inboundDetailSum == inboundOrderDetail.OrderQuantity)
- {
- return WebResponseContent.Instance.Error($"璇ョ墿鏂欏叆搴撳崟鏄庣粏宸插叏閮ㄧ粍鐩樺畬鎴�");
- }
- if (model.Quantity > receiveOrderDetail.ReceivedQuantity || (inboundDetailSum + model.Quantity) > receiveOrderDetail.ReceivedQuantity)
- {
- return WebResponseContent.Instance.Error($"涓庤鏀惰揣鍗曟槑缁嗘敹璐ф暟閲忎笉涓�鑷�");
- }
- Dt_StockInfo oldStockinfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
- if (oldStockinfo != null)
- {
- return WebResponseContent.Instance.Error($"鎵樼洏閲嶅");
- }
- Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
- {
- BatchNo = model.LotNo,
- MaterielCode = materielInfo.MaterielCode,
- MaterielName = materielInfo.MaterielName,
- OrderNo = inboundOrder.InboundOrderNo,
- SerialNumber = model.SerialNumber,
- StockQuantity = model.Quantity,
- OutboundQuantity = 0,
- Unit = materielInfo.MaterielUnit,
- Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- ProductionDate = model.ProductionDate,
- EffectiveDate = model.EffectiveDate,
- InboundOrderRowNo = inboundOrderDetail.RowNo,
- };
-
- Dt_StockInfo stockInfo = new Dt_StockInfo()
- {
- PalletCode = palletCode,
- StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- WarehouseId = inboundOrder.WarehouseId,
- Details = new List<Dt_StockInfoDetail> { stockInfoDetail }
- };
- inboundOrderDetail.ReceiptQuantity += model.Quantity;
- _unitOfWorkManage.BeginTran();
- if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
- {
- inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
- }
- _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail);
- if (inboundOrder.OrderStatus == InOrderStatusEnum.鏈紑濮�.ObjToInt())
- {
- inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
- BaseDal.UpdateData(inboundOrder);
- }
- _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
- _unitOfWorkManage.CommitTran();
- return WebResponseContent.Instance.OK();
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- return WebResponseContent.Instance.Error(ex.Message);
- }
- }
-
-
- /// <summary>
- /// 鍏ュ钩搴擄紝鐩存帴娣诲姞搴撳瓨
- /// </summary>
- /// <param name="warehouseId"></param>
- /// <param name="serNums"></param>
- /// <returns></returns>
- public WebResponseContent InPinKu(string inboundOrderId, int warehouseId, List<string> serNums)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == warehouseId);
- if (warehouse == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅");
- }
- Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == inboundOrderId && x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).First();
- if (inboundOrder == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅");
- }
- if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅");
- }
-
- //鍏ュ簱鏄庣粏鍘熷畬鎴愭暟閲�
- int oldCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
-
- Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
- if (receiveOrder == null && inboundOrder.OrderType==InOrderTypeEnum.Purchase.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗�");
- }
- if ((receiveOrder?.Details == null || receiveOrder?.Details.Count <= 0) && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗曟槑缁�");
- }
-
- List<string> purchaseOrderNos = receiveOrder?.Details.Select(x => x.PurchaseOrderNo).ToList();
-
- List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums);
-
- if (models.Select(x => x.MaterielCode).Distinct().Count() > 1)
- {
- return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁");
- }
-
- string materielCode = models.FirstOrDefault()?.MaterielCode ?? "";
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
- if (materielInfo == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
- }
-
- List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode).ToList();
-
- if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
- }
- foreach (var model in models)
- {
- if (!inboundOrderDetails.Any(x => x.BatchNo == model.LotNo))
- return WebResponseContent.Instance.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欐壒娆°�恵model.LotNo}銆�");
- }
- if (receiveOrder?.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
- }
- float beforeQuantity = 0;
- Dt_StockInfo stockInfo = new Dt_StockInfo()
- {
- PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"),
- StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
- WarehouseId = inboundOrder.WarehouseId,
- PalletType = PalletTypeEnum.SmallPallet.ObjToInt(),
- LocationCode = "骞冲簱浣�",
- Details = new List<Dt_StockInfoDetail>()
- };
-
- List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
- List<int> detailKeys = new List<int>();
- Dt_ReturnOrder? returnOrder = null;
- foreach (var model in models)
- {
- if (purchaseOrderNos?.FirstOrDefault(x => x == model.PurchaseOrderNo) == null && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟");
- }
-
- Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt() && x.OrderQuantity == model.Quantity && !detailKeys.Contains(x.Id) && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault();
-
- if (notGroupDetail == null)
- {
- return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚");
- }
- detailKeys.Add(notGroupDetail.Id);
-
- Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
- {
- BatchNo = model.LotNo,
- MaterielCode = materielInfo.MaterielCode,
- MaterielName = materielInfo.MaterielName,
- MaterielSpec=materielInfo.MaterielSpec,
- OrderNo = inboundOrder.InboundOrderNo,
- SerialNumber = model.SerialNumber,
- StockQuantity = model.Quantity,
- OutboundQuantity = 0,
- Unit = materielInfo.MaterielUnit,
- Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
- ProductionDate = model.ProductionDate,
- EffectiveDate = model.EffectiveDate,
- InboundOrderRowNo = notGroupDetail.RowNo,
- };
- oldCount++;
-
- if (stockInfo.Id > 0)
- {
- stockInfoDetail.StockId = stockInfo.Id;
- }
- stockInfo.Details.Add(stockInfoDetail);
-
- stockInfoDetails.Add(stockInfoDetail);
-
- notGroupDetail.ReceiptQuantity = model.Quantity;
- notGroupDetail.OverInQuantity = model.Quantity;
- notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
- }
-
- //鍏ュ簱鏄庣粏鏂板瀹屾垚鏁伴噺
- if (inboundOrder.Details.Count == oldCount)
- {
- inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
- //鍒ゆ柇鏄惁涓洪��鏂欏叆搴撳崟
- if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
- {
- returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
- returnOrder.ReturnOrderStatus = ReturnOrderStatusEnum.Returned.ObjToInt();
- foreach (var item in inboundOrder.Details)
- {
- Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x => x.MCode == item.MaterielCode);
- if (returnOrderDetail != null)
- {
- returnOrderDetail.OverReturnQty = item.OverInQuantity;
- returnOrderDetail.OrderDetailStatus = ReturnOrderStatusEnum.Returned.ObjToInt();
- }
- }
- }
- }
- else
- inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
- float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
-
- _unitOfWorkManage.BeginTran();
- if (stockInfo.Id == 0)
- {
- _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
- }
- else
- {
- _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand();
- }
- _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails);
- _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
- if (returnOrder != null)
- {
- _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder);
- _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details);
- }
- _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.Inbound);
- _unitOfWorkManage.CommitTran();
-
- #region 鍏ュ簱瀹屾垚涓婃姤ERP
- if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt())
- {
- if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
- {
- FeedbackReturnOrder(inboundOrder, returnOrder);
- }
- else
- {
- FeedbackInboundOrder(inboundOrder.Id);
- }
- }
- #endregion
- content.OK();
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- content.Error(ex.Message);
- }
- return content;
- }
- /// <summary>
- /// WMS鍏ュ钩搴撲笉鎺ㄥ崟鎹�
- /// </summary>
- /// <param name="warehouseId"></param>
- /// <param name="serNums"></param>
- /// <returns></returns>
- public WebResponseContent WMSInPinKu(int warehouseId, List<string> serNums)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == warehouseId);
- if (warehouse == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅");
- }
- List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums);
- if (models.Select(x => x.MaterielCode).Distinct().Count() > 1)
- {
- return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁");
- }
-
- string materielCode = models.FirstOrDefault()?.MaterielCode ?? "";
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
- if (materielInfo == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
- }
- float beforeQuantity = 0;
- Dt_StockInfo stockInfo = new Dt_StockInfo()
- {
- PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"),
- StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
- WarehouseId = warehouse.WarehouseId,
- PalletType = PalletTypeEnum.SmallPallet.ObjToInt(),
- LocationCode = "骞冲簱浣�",
- Details = new List<Dt_StockInfoDetail>()
- };
- List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
- foreach (var model in models)
- {
- Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
- {
- BatchNo = model.LotNo,
- MaterielCode = materielInfo.MaterielCode,
- MaterielName = materielInfo.MaterielName,
- MaterielSpec = materielInfo.MaterielSpec,
- SerialNumber = model.SerialNumber,
- StockQuantity = model.Quantity,
- OutboundQuantity = 0,
- OrderNo = "",
- Unit = materielInfo.MaterielUnit,
- Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
- ProductionDate = model.ProductionDate,
- EffectiveDate = model.EffectiveDate,
- };
-
- if (stockInfo.Id > 0)
- {
- stockInfoDetail.StockId = stockInfo.Id;
- }
- stockInfo.Details.Add(stockInfoDetail);
-
- stockInfoDetails.Add(stockInfoDetail);
-
- }
- float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
- _unitOfWorkManage.BeginTran();
- if (stockInfo.Id == 0)
- {
- _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
- }
- else
- {
- _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand();
- }
- _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.Inbound);
- _unitOfWorkManage.CommitTran();
- content.OK();
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- content.Error(ex.Message);
- }
- return content;
- }
- /// <summary>
- /// 缁勭洏
- /// </summary>
- /// <param name="saveModel"></param>
- /// <returns></returns>
- public WebResponseContent MaterielGroup(SaveModel saveModel)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- var orderNo = saveModel.MainData["orderNo"].ToString();
- var palletCode = saveModel.MainData["palletCode"].ToString();
- var warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
- var Initiallife = saveModel.MainData["initiallife"].ObjToInt();
- var serNums = saveModel.DelKeys.Select(x => x.ToString()).ToList();
- Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == warehouseId);
- if (warehouse == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅");
- }
-
- Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo && x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).First();
- if (inboundOrder == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅");
- }
- if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅");
- }
- List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums);
- //楠岃瘉鍒ゆ柇鏃堕棿鏍煎紡
- WebResponseContent IsValidContent = IsValidMCDates(models);
- if (!IsValidContent.Status)
- {
- return content.Error(IsValidContent.Message);
- }
- //闄ら噰璐叆搴撳崟浠ュ鍏朵粬鍏ュ簱鍗曠粍鐩樻暟鎹鐞�
- if (inboundOrder.OrderType != InOrderTypeEnum.Purchase.ObjToInt())
- {
- return OtherInGroup(inboundOrder, palletCode, Initiallife, warehouse, models);
- }
- Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
- if (receiveOrder == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗�");
- }
- if (receiveOrder.Details == null || receiveOrder.Details.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗曟槑缁�");
- }
-
- List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList();
- if (models.Select(x => x.MaterielCode).Distinct().Count() > 1)
- {
- return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁");
- }
-
- string materielCode = models.FirstOrDefault()?.MaterielCode ?? "";
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
- if (materielInfo == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
- }
-
- List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode && x.BatchNo == (models.FirstOrDefault()?.LotNo ?? "")).ToList();
-
- if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
- }
- if (receiveOrder.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null)
- {
- return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
- }
-
- float beforeQuantity = 0;
-
- Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
- if (stockInfo == null)
- {
- stockInfo = new Dt_StockInfo()
- {
- PalletCode = palletCode,
- StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- WarehouseId = inboundOrder.WarehouseId,
- PalletType = GetPalletType(warehouse, palletCode),
- Details = new List<Dt_StockInfoDetail>()
- };
- }
- else
- {
- if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鎵樼洏鍙烽噸澶�");
- }
- beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
- }
-
- if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
- {
- stockInfo.Remark = Initiallife.ToString();
- string batchNo = models.FirstOrDefault()?.LotNo ?? "";
- Dt_StockInfoDetail existDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == batchNo);
- if (existDetail != null)
- {
- return WebResponseContent.Instance.Error($"{batchNo}娴嬭瘯鏋跺凡瀛樺湪");
- }
- if (models.Count >= 2)
- {
- return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�");
- }
- if (palletCode.Substring(0, 1) == "6")
- {
- stockInfo.PalletType = PalletTypeEnum.MediumPallet.ObjToInt();
- }
- else
- {
- stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt();
- }
- }
- else if(warehouse.WarehouseCode == WarehouseEnum.HA57.ToString())
- {
- if (models.Count >= 2)
- {
- return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�");
- }
- }
-
- List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
- foreach (var model in models)
- {
- if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null)
- {
- return WebResponseContent.Instance.Error($"鏈湪閲囪喘鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟");
- }
-
- Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus <= OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode==model.MaterielCode && x.BatchNo==model.LotNo && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault();
-
- if (notGroupDetail == null)
- {
- return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚");
- }
- Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
- {
- BatchNo = model.LotNo,
- MaterielCode = materielInfo.MaterielCode,
- MaterielName = materielInfo.MaterielName,
- MaterielSpec = materielInfo.MaterielSpec,
- OrderNo = inboundOrder.InboundOrderNo,
- SerialNumber = model.SerialNumber,
- StockQuantity = model.Quantity,
- OutboundQuantity = 0,
- Unit = materielInfo.MaterielUnit,
- Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- ProductionDate = model.ProductionDate,
- EffectiveDate = model.EffectiveDate,
- InboundOrderRowNo = notGroupDetail.RowNo,
- };
-
- if (stockInfo.Id > 0)
- {
- stockInfoDetail.StockId = stockInfo.Id;
- }
- stockInfo.Details.Add(stockInfoDetail);
-
- stockInfoDetails.Add(stockInfoDetail);
-
- decimal decimalReceiptQuantity = Convert.ToDecimal(notGroupDetail.ReceiptQuantity);
- decimal decimalModelQuantity = Convert.ToDecimal(model.Quantity);
- decimal decimalOrderQuantity = Convert.ToDecimal(notGroupDetail.OrderQuantity);
- decimalReceiptQuantity += decimalModelQuantity;
- // 妫�鏌ユ槸鍚﹁秴鍑鸿鍗曟暟閲�
- if (decimalReceiptQuantity > decimalOrderQuantity)
- {
- return WebResponseContent.Instance.Error($"缁勭洏鏁伴噺婧㈠嚭{decimalReceiptQuantity - decimalOrderQuantity}");
- }
- // 杞洖float绫诲瀷瀛樺偍锛屼絾姣旇緝鍜岃绠楅兘浣跨敤decimal瀹屾垚
- notGroupDetail.ReceiptQuantity = Convert.ToSingle(decimalReceiptQuantity);
- if (notGroupDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
- {
- notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
- }
- }
-
- float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
-
- inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
-
- _unitOfWorkManage.BeginTran();
- if (stockInfo.Id == 0)
- {
- _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
- }
- else
- {
- _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand();
- }
- _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails);
- _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
- _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup);
- _unitOfWorkManage.CommitTran();
- content.OK();
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- content.Error(ex.Message);
- }
- return content;
- }
- public WebResponseContent MaterielPPorGM(string materielBoxCode = "")
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- string SerNum = materielBoxCode.Substring(0, materielBoxCode.LastIndexOf("SC:")-1);
- MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, SerNum);
- //楠岃瘉鍒ゆ柇鏃堕棿鏍煎紡
- WebResponseContent IsValidContent = IsValidMCDates(new List<MatSerNumAnalysisModel>() { model });
- if (!IsValidContent.Status)
- {
- return content.Error(IsValidContent.Message);
- }
- string result = materielBoxCode.Substring(materielBoxCode.LastIndexOf("SC:") + 3);
- //鑾峰彇鍏ュ簱鍗曟槑缁�
- Dt_InboundOrderDetail inboundOrderDetail = _inboundRepository.InboundOrderDetailRepository.QueryFirst(x=>x.BatchNo== model.LotNo && x.MaterielCode== model.MaterielCode);
- if (inboundOrderDetail == null)
- {
- return InOtherGMOrPP(model, result);
- }
- Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().First(x => x.Id == inboundOrderDetail.OrderId);
-
- if (inboundOrder == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅");
- }
- Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId);
- //闄ら噰璐叆搴撳崟浠ュ鍏朵粬鍏ュ簱鍗曠粍鐩樻暟鎹鐞�
- if (inboundOrder.OrderType != InOrderTypeEnum.Purchase.ObjToInt())
- {
- return OtherInGroup(inboundOrder, model.LotNo, 0, warehouse, new List<MatSerNumAnalysisModel>() { model });
- }
- Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
- if (receiveOrder == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗�");
- }
- if (receiveOrder.Details == null || receiveOrder.Details.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗曟槑缁�");
- }
-
- List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList();
-
- string materielCode = model?.MaterielCode ?? "";
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
- if (materielInfo == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
- }
-
- float beforeQuantity = 0;
-
- Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == model.LotNo).Includes(x => x.Details).First();
- if (stockInfo == null)
- {
- stockInfo = new Dt_StockInfo()
- {
- PalletCode = model.LotNo,
- StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- WarehouseId = inboundOrder.WarehouseId,
- PalletType = GetPalletTypeGMOrPP(warehouse, result.Split("*")[0]),
- StockLength = result.Split("*")[0].ObjToInt(),
- Details = new List<Dt_StockInfoDetail>()
- };
- }
- else
- {
- if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鎵樼洏鍙烽噸澶�");
- }
- }
- if (stockInfo.PalletType==-1)
- {
- return WebResponseContent.Instance.Error($"鎵樼洏绫诲瀷涓嶅瓨鍦�");
- }
- List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
- if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null)
- {
- return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鏄庣粏涓壘鍒拌閲囪喘鍗�");
- }
-
- if (inboundOrderDetail.OrderDetailStatus > OrderDetailStatusEnum.Inbounding.ObjToInt() || inboundOrderDetail.OrderQuantity == inboundOrderDetail.ReceiptQuantity)
- {
- return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚");
- }
- Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
- {
- BatchNo = model.LotNo,
- MaterielCode = materielInfo.MaterielCode,
- MaterielName = materielInfo.MaterielName,
- MaterielSpec = materielInfo.MaterielSpec,
- OrderNo = inboundOrder.InboundOrderNo,
- SerialNumber = model.SerialNumber,
- StockQuantity = model.Quantity,
- OutboundQuantity = 0,
- Unit = materielInfo.MaterielUnit,
- Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- ProductionDate = model.ProductionDate,
- EffectiveDate = model.EffectiveDate,
- InboundOrderRowNo = inboundOrderDetail.RowNo,
- };
-
- stockInfo.Details.Add(stockInfoDetail);
-
- stockInfoDetails.Add(stockInfoDetail);
-
- inboundOrderDetail.ReceiptQuantity += model.Quantity;
- if (inboundOrderDetail.ReceiptQuantity > inboundOrderDetail.OrderQuantity)
- {
- return WebResponseContent.Instance.Error($"缁勭洏鏁伴噺婧㈠嚭{inboundOrderDetail.ReceiptQuantity - inboundOrderDetail.OrderQuantity}");
- }
- if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
- {
- inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
- }
- float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
- if (inboundOrder.OrderStatus == InOrderStatusEnum.鏈紑濮�.ObjToInt())
- {
- inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
- }
- _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail);
- _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
- _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup);
- content.OK(data: stockInfo);
- }
- catch (Exception ex)
- {
- content.Error(ex.Message);
- }
- return content;
- }
- public WebResponseContent InOtherGMOrPP(MatSerNumAnalysisModel model,string request = "")
- {
- string materielCode = model?.MaterielCode ?? "";
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
- if (materielInfo == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
- }
- float beforeQuantity = 0;
- Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == materielInfo.WarehouseId);
- Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == model.LotNo).Includes(x => x.Details).First();
- if (stockInfo == null)
- {
- stockInfo = new Dt_StockInfo()
- {
- PalletCode = model.LotNo,
- StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- WarehouseId = warehouse.WarehouseId,
- PalletType = GetPalletTypeGMOrPP(warehouse, request.Split("*")[0]),
- StockLength = request.Split("*")[0].ObjToInt(),
- Details = new List<Dt_StockInfoDetail>()
- };
- }
- else
- {
- if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鎵樼洏鍙烽噸澶�");
- }
- }
- if (stockInfo.PalletType == -1)
- {
- return WebResponseContent.Instance.Error($"鎵樼洏绫诲瀷涓嶅瓨鍦�");
- }
- List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
- Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
- {
- BatchNo = model.LotNo,
- MaterielCode = materielInfo.MaterielCode,
- MaterielName = materielInfo.MaterielName,
- MaterielSpec = materielInfo.MaterielSpec,
- OrderNo = "",
- SerialNumber = model.SerialNumber,
- StockQuantity = model.Quantity,
- OutboundQuantity = 0,
- Unit = materielInfo.MaterielUnit,
- Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- ProductionDate = model.ProductionDate,
- EffectiveDate = model.EffectiveDate,
- InboundOrderRowNo = 0,
- };
-
- stockInfo.Details.Add(stockInfoDetail);
-
- stockInfoDetails.Add(stockInfoDetail);
- float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
- _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup);
- return WebResponseContent.Instance.OK(data: stockInfo);
- }
- public int GetPalletTypeGMOrPP(Dt_Warehouse warehouse, string boxWidth)
- {
- if (warehouse.WarehouseCode == WarehouseEnum.HA152.ToString())
- {
-
- if (boxWidth.ObjToInt() <= 690 && boxWidth.ObjToInt()>=520)
- {
- return 15;
- }
- else if (boxWidth.ObjToInt() > 690 && boxWidth.ObjToInt() <= 1400)
- {
- return 16;
- }
-
- }
- else if (warehouse.WarehouseCode == WarehouseEnum.HA58.ToString())
- {
- Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.WarehouseId == warehouse.WarehouseId);
- return palletTypeInfo.PalletType;
- }
- return -1;
- }
- public WebResponseContent OtherInGroup(Dt_InboundOrder inboundOrder,string? palletCode,int Initiallife,Dt_Warehouse warehouse,List<MatSerNumAnalysisModel> models)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- if (models.Select(x => x.MaterielCode).Distinct().Count() > 1)
- {
- return content.Error($"鐗╂枡涓嶅彲娣锋斁");
- }
- //楠岃瘉鍒ゆ柇鏃堕棿鏍煎紡
- WebResponseContent IsValidContent = IsValidMCDates(models);
- if (!IsValidContent.Status)
- {
- return content.Error(IsValidContent.Message);
- }
- string materielCode = models.FirstOrDefault()?.MaterielCode ?? "";
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
- if (materielInfo == null)
- {
- return content.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
- }
-
- List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode).ToList();
-
- if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0)
- {
- return content.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
- }
-
- float beforeQuantity = 0;
-
- Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
- if (stockInfo == null)
- {
- stockInfo = new Dt_StockInfo()
- {
- PalletCode = palletCode,
- StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- WarehouseId = inboundOrder.WarehouseId,
- PalletType = GetPalletType(warehouse, palletCode),
- Details = new List<Dt_StockInfoDetail>()
- };
- }
- else
- {
- if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
- {
- return content.Error($"鎵樼洏鍙烽噸澶�");
- }
- beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
- }
-
- if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
- {
- stockInfo.Remark = Initiallife.ToString();
- string batchNo = models.FirstOrDefault()?.LotNo ?? "";
- Dt_StockInfoDetail existDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == batchNo);
- if (existDetail != null)
- {
- return content.Error($"{batchNo}娴嬭瘯鏋跺凡瀛樺湪");
- }
- if (models.Count >= 2)
- {
- return content.Error($"缁勭洏鏄庣粏涓嶅敮涓�");
- }
- if (palletCode.Substring(0, 1) == "6")
- {
- stockInfo.PalletType = PalletTypeEnum.MediumPallet.ObjToInt();
- }
- else
- {
- stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt();
- }
- }
- else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ToString())
- {
- if (models.Count >= 2)
- {
- return content.Error($"缁勭洏鏄庣粏涓嶅敮涓�");
- }
- }
-
- List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
- foreach (var model in models)
- {
- Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus <= OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode == model.MaterielCode && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault();
-
- if (notGroupDetail == null)
- {
- return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚");
- }
- Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
- {
- BatchNo = model.LotNo,
- MaterielCode = materielInfo.MaterielCode,
- MaterielName = materielInfo.MaterielName,
- MaterielSpec = materielInfo.MaterielSpec,
- OrderNo = inboundOrder.InboundOrderNo,
- SerialNumber = model.SerialNumber,
- StockQuantity = model.Quantity,
- OutboundQuantity = 0,
- Unit = materielInfo.MaterielUnit,
- Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- ProductionDate = model.ProductionDate,
- EffectiveDate = model.EffectiveDate,
- InboundOrderRowNo = notGroupDetail.RowNo,
- };
-
- if (stockInfo.Id > 0)
- {
- stockInfoDetail.StockId = stockInfo.Id;
- }
- stockInfo.Details.Add(stockInfoDetail);
-
- stockInfoDetails.Add(stockInfoDetail);
-
- notGroupDetail.ReceiptQuantity += model.Quantity;
- if (notGroupDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
- {
- notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
- }
- }
-
- float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
-
- inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
-
- _unitOfWorkManage.BeginTran();
- if (stockInfo.Id == 0)
- {
- _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
- }
- else
- {
- _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand();
- }
- _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails);
- _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
- _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup);
- _unitOfWorkManage.CommitTran();
- content.OK();
- }
- catch (Exception ex)
- {
- content.Error(ex.Message);
- }
- return content;
- }
-
- public WebResponseContent MaterielGroup(string palletCode, int Initiallife, int warehouseId, List<string> serNums)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == warehouseId);
- if (warehouse == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅");
- }
-
- List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums);
-
- if (models.Select(x => x.MaterielCode).Distinct().Count() > 1)
- {
- return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁");
- }
- //楠岃瘉鍒ゆ柇鏃堕棿鏍煎紡
- WebResponseContent IsValidContent = IsValidMCDates(models);
- if (!IsValidContent.Status)
- {
- return content.Error(IsValidContent.Message);
- }
- string materielCode = models.FirstOrDefault()?.MaterielCode ?? "";
- Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
- if (materielInfo == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
- }
-
- float beforeQuantity = 0;
-
- Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
-
- if (stockInfo == null)
- {
- stockInfo = new Dt_StockInfo()
- {
- PalletCode = palletCode,
- StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt(),
- WarehouseId = warehouse.WarehouseId,
- PalletType = GetPalletType(warehouse, palletCode),
- Details = new List<Dt_StockInfoDetail>()
- };
- }
- else
- {
- if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
- {
- return WebResponseContent.Instance.Error($"鎵樼洏鍙烽噸澶�");
- }
- beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
- }
-
- if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
- {
- string batchNo = models.FirstOrDefault()?.LotNo ?? "";
- Dt_StockInfoDetail existDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == batchNo);
- if (existDetail != null)
- {
- return WebResponseContent.Instance.Error($"{batchNo}娴嬭瘯鏋跺凡瀛樺湪");
- }
- if (models.Count >= 2)
- {
- return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�");
- }
- stockInfo.Remark = Initiallife.ToString();
- if (palletCode.Substring(0, 1) == "6")
- {
- stockInfo.PalletType = PalletTypeEnum.MediumPallet.ObjToInt();
- }
- else
- {
- stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt();
- }
- }
- else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ToString())
- {
- if (models.Count >= 2)
- {
- return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�");
- }
- }
-
- List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
- List<int> detailKeys = new List<int>();
- foreach (var model in models)
- {
- Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
- {
- BatchNo = model.LotNo,
- MaterielCode = materielInfo.MaterielCode,
- MaterielName = materielInfo.MaterielName,
- MaterielSpec = materielInfo.MaterielSpec,
- OrderNo = "",
- SerialNumber = model.SerialNumber,
- StockQuantity = model.Quantity,
- OutboundQuantity = 0,
- Unit = materielInfo.MaterielUnit,
- Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
- ProductionDate = model.ProductionDate,
- EffectiveDate = model.EffectiveDate,
- InboundOrderRowNo = 0,
- };
-
- if (stockInfo.Id > 0)
- {
- stockInfoDetail.StockId = stockInfo.Id;
- }
- stockInfo.Details.Add(stockInfoDetail);
-
- stockInfoDetails.Add(stockInfoDetail);
- }
-
- float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
-
- _unitOfWorkManage.BeginTran();
- if (stockInfo.Id == 0)
- {
- _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
- }
- else
- {
- _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand();
- }
- _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup);
- _unitOfWorkManage.CommitTran();
- content.OK();
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- content.Error(ex.Message);
- }
- return content;
- }
- /// <summary>
- /// 鍏ュ簱瀹屾垚涓婃姤ERP
- /// </summary>
- /// <returns></returns>
- public WebResponseContent FeedbackInboundOrder(int inboundOrderId)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderId).Includes(x => x.Details).First();
- if (inboundOrder.Details.Count == 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅");
- }
-
- List<Dt_StockInfoDetail> stockInfoDetails = _stockRepository.StockInfoDetailRepository.QueryData(x => x.OrderNo == inboundOrder.InboundOrderNo);
- if (stockInfoDetails.Count == 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板簱瀛樻槑缁嗕俊鎭�");
- }
- //鑾峰彇璇ュ叆搴撳崟鎵�鏈夊簱瀛�
- List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => stockInfoDetails.GroupBy(x => x.StockId).Select(x => x.Key).Contains(x.Id)).Includes(x => x.Details).ToList();
- Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId);
- if (warehouse == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�");
- }
- List<ERPInboundDetailModel>? detailModels = new List<ERPInboundDetailModel>();
- foreach (var stockInfo in stockInfos)
- {
- foreach (var item in stockInfo.Details.GroupBy(x => x.InboundOrderRowNo).Select(x => x.Key))
- {
- //鍖哄垎涓嶅悓鎵规
- Dt_StockInfoDetail? dt_StockInfoDetail = stockInfo.Details.Where(x => x.InboundOrderRowNo == item).FirstOrDefault();
- ERPInboundDetailModel detailModel = new ERPInboundDetailModel()
- {
- ExpiryDate = dt_StockInfoDetail?.EffectiveDate ?? "",
- LocationCode = warehouse.WarehouseCode,
- MaterialsCode = dt_StockInfoDetail.MaterielCode,
- MfgDate = dt_StockInfoDetail.ProductionDate ?? "",
- QtyCustoms = "0",
- Quantity = stockInfo.Details.Where(x => x.InboundOrderRowNo == item).Sum(x => x.StockQuantity).ToString(),
- Rack = stockInfo.LocationCode,
- ReceiptCode = inboundOrder.UpperOrderNo,
- ReceiptSerNo = item.ToString()
- };
- detailModels.Add(detailModel);
- }
- }
- ERPInboundModel model = new ERPInboundModel()
- {
- Code = CreateCodeByRule(nameof(RuleCodeEnum.RLCodeRule)),
- CreatorCode = inboundOrder.Creater,
- EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
- StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
- SuppliersId = inboundOrder.SupplierId,
- Type = "S",
- UniqueTag = inboundOrder.Id.ToString(),
- WarehouseCode = warehouse.WarehouseCode,
- Way = 1,
- Details = detailModels
- };
- //鎺ㄩ�丒RP
- _invokeERPService.InvokeInboundOrderApi(model);
- return WebResponseContent.Instance.OK();
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- content.Error(ex.Message);
- }
- return content;
- }
- /// <summary>
- /// 閫�鏂欏畬鎴愪笂鎶ヨ嚦ERP
- /// </summary>
- public WebResponseContent FeedbackReturnOrder(Dt_InboundOrder inboundOrder,Dt_ReturnOrder returnOrder)
- {
- WebResponseContent content= new WebResponseContent();
- try
- {
- if (returnOrder==null)
- {
- return content.OK();
- }
- //鑾峰彇浠撳簱缂栫爜
- Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==inboundOrder.WarehouseId);
-
- var groupedDetails = returnOrder.Details.GroupBy(d => new { d.PickCode, d.RowId })
- .Select(g => new
- {
- PickCode = returnOrder.OrderNo,
- RowIndex = g.Key.RowId,
- Details = g.ToList()
- })
- .ToList();
- // 鏋勫缓宓屽缁撴瀯
- var issitems = groupedDetails.Select(g => new ReturnItem
- {
- Pickcode = g.PickCode,
- Rowindex = g.RowIndex,
- PickList = g.Details
- .GroupBy(d => d.MCode)
- .Select(mg => new ReturnPickItem
- {
- Material = mg.Key,
- Qty = mg.Sum(x => x.ReturnQty),
- Dataitem = mg.Select(d => new ReturnDataItem
- {
- Lotno = d.BatchNo,
- Qty = d.ReturnQty,
- Location = warehouse.WarehouseCode,
- Msfpart = d.Code
- }).ToList()
- }).ToList()
- }).ToList();
- //鑾峰彇瀵瑰簲閫�鏂欏崟
- ERPReturnModel returnModel = new ERPReturnModel()
- {
- Way = 1,
- UniqueTag = returnOrder.Id.ToString(),
- Code = CreateCodeByRule(nameof(RuleCodeEnum.TLCodeRule)),
- WarehouseCode = warehouse.WarehouseCode,
- Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
- Createuser=inboundOrder.Creater,
- IsDev=returnOrder.IsDev,
- Issitem= issitems
- };
- _invokeERPService.InvokeReturnApi(returnModel);
- return content.OK();
- }
- catch (Exception ex)
- {
- content.Error(ex.Message);
- }
- return content;
- }
- /// <summary>
- /// 鎴愬搧鍏ュ簱涓婁紶ERP
- /// </summary>
- public WebResponseContent FeedbackProIn(Dt_MesProInOrder mesProInOrder)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- List<ERPProItemsItem> proItemsItems = new List<ERPProItemsItem>();
- Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==mesProInOrder.WarehouseId);
- string batchNoRemark = "";
- foreach (var item in mesProInOrder.Details)
- {
- ERPProItemsItem proItemsItem = new ERPProItemsItem()
- {
- PartNum = item.ProductCode,
- Rev=item.ProductVersion,
- DateCode=item.DateCode,
- BatchNumber= item.ProductCode,
- XLocation=item.XSite,
- Xqty=item.XQty,
- QtySet=item.SETQty,
- QtyPcs=item.OKPCSQTY,
- WoList=new List<ERPProListItem>()
- {
- new ERPProListItem()
- {
- moNumber=item.MoNumber,
- WoNumber=item.ERPOrder,
- QtyPcs=item.OKPCSQTY,
- QtySet=item.SETQty
- }
- }
- };
- batchNoRemark += item.BagNo + ",";
- proItemsItems.Add(proItemsItem);
- }
- ERPProInboundModel proInboundModel = new ERPProInboundModel()
- {
- Way = 1,
- Code = mesProInOrder.ProInOrderNo,
- CreatorCode = "GSWMS",
- CompanyCode = "HATC",
- FactoryCode = "HA02",
- WarehouseCode = warehouse.WarehouseCode,
- LocationCode = warehouse.WarehouseCode,
- StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
- StockFormType= "Production",
- StockFormItems= proItemsItems,
- Remark=batchNoRemark
- };
- string response = _invokeERPService.InvokeProInApi(proInboundModel);
- ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
- if (requestContent.res != 1)
- {
- return content.Error($"{requestContent.Data}");
- }
- content.OK();
- }
- catch (Exception ex)
- {
- content.Error(ex.Message);
- }
- return content;
- }
- 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_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(t => t.MaterielCode == x.MaterialCode);
+ x.MaterialName = materielInfo?.MaterielName;
+ x.Unit = materielInfo?.MaterielUnit;
});
- Dt_CodeRuleConfig codeRuleConfig = sugarClient.Queryable<Dt_CodeRuleConfig>().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<string, object> keyValuePairs = new Dictionary<string, object>() { { 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);
+ inboundOrder.Details = inboundOrderDetails;
+ inboundOrder.WarehouseId = warehouse.WarehouseId;
+ //鏂板
+ BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
}
- catch (Exception ex)
- {
-
- }
- return code;
- }
- }
- #region 寮冪敤
- /// <summary>
- /// 鍏ュ簱瀹屾垚鍥炰紶鍒癊RP
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- //public WebResponseContent FeedbackInboundOrder(int id)
- //{
- // try
- // {
- // Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == id).Includes(x => x.Details).First();
- // if (inboundOrder == null)
- // {
- // return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅");
- // }
- // if (inboundOrder.Details == null || inboundOrder.Details.Count == 0)
- // {
- // return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅");
- // }
- // if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
- // {
- // return WebResponseContent.Instance.Error($"鍏ュ簱鍗曟嵁宸插畬鎴�");
- // }
-
- // List<Dt_StockInfo> stockInfos = Db.Queryable<Dt_StockInfo>().Where(x => x.Details.Any(v => v.OrderNo == inboundOrder.InboundOrderNo)).Includes(x => x.Details).ToList();
- // List<Dt_Warehouse> warehouses = Db.Queryable<Dt_Warehouse>().ToList();
-
- // List<ERPInboundDetailModel> detailModels = new List<ERPInboundDetailModel>();
- // foreach (var item in inboundOrder.Details)
- // {
- // Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(v => v.InboundOrderRowNo == item.RowNo && v.MaterielCode == item.MaterielCode));
- // if (stockInfo == null)
- // {
- // return WebResponseContent.Instance.Error($"鏈壘鍒板簱瀛樹俊鎭�");
- // }
-
- // Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseId == stockInfo.WarehouseId);
- // if (warehouse == null)
- // {
- // return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�");
- // }
-
- // ERPInboundDetailModel detailModel = new ERPInboundDetailModel()
- // {
- // ExpiryDate = stockInfo.Details.FirstOrDefault()?.EffectiveDate ?? "",
- // LocationCode = warehouse.WarehouseCode,
- // MaterialsCode = item.MaterielCode,
- // MfgDate = stockInfo.Details.FirstOrDefault()?.ProductionDate ?? "",
- // QtyCustoms = "0",
- // Quantity = stockInfo.Details.Sum(x => x.StockQuantity).ToString(),
- // Rack = stockInfo.LocationCode,
- // ReceiptCode = inboundOrder.UpperOrderNo,
- // ReceiptSerNo = item.RowNo.ToString()
- // };
- // detailModels.Add(detailModel);
- // }
- // Dt_Warehouse? warehouse2 = warehouses.FirstOrDefault(x => x.WarehouseId == inboundOrder.WarehouseId);
- // if (warehouse2 == null)
- // {
- // return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�");
- // }
- // ERPInboundModel model = new ERPInboundModel()
- // {
- // Code = inboundOrder.InboundOrderNo,
- // CreatorCode = inboundOrder.Creater,//娴嬭瘯
- // EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
- // StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
- // SuppliersId = inboundOrder.SupplierId,
- // Type = "S",
- // UniqueTag = inboundOrder.Id.ToString(),
- // WarehouseCode = warehouse2.WarehouseCode,
- // Way = 1,
- // Details = detailModels
- // };
- // //娴嬭瘯娉ㄩ噴
- // _invokeERPService.InvokeInboundOrderApi(model);
- // return WebResponseContent.Instance.OK();
- // }
- // catch (Exception ex)
- // {
- // return WebResponseContent.Instance.Error(ex.Message);
- // }
- //}
- #endregion
- public int GetPalletType(Dt_Warehouse warehouse, string palletCode)
- {
- if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
- {
- if (palletCode.Substring(0, 1) == "6")
- {
- return PalletTypeEnum.MediumPallet.ObjToInt();
- }
+ //else if (eRPPurchaseOrderDTO.OperateType == 2)
+ //{
+ // //鍒ゆ柇鏄惁瀛樺湪
+ // Dt_UserInfo? userInfoOld = OlduserInfos.FirstOrDefault(x => x.Code == eRPUserInfoDTO.StaffCode);
+ // if (userInfoOld == null)
+ // {
+ // return content.Error($"鏇存柊宸ュ彿{eRPUserInfoDTO.StaffCode}锛屽憳宸eRPUserInfoDTO.StaffName}涓嶅瓨鍦�");
+ // }
+ // Dt_UserInfo userInfo = _mapper.Map<Dt_UserInfo>(eRPUserInfoDTO);
+ // userInfo.Id = userInfoOld.Id;
+ // Sys_User user = _userRepository.QueryFirst(x => x.UserName == userInfo.Code);
+ // if (userInfoOld == null)
+ // {
+ // return content.Error($"鏇存柊宸ュ彿{eRPUserInfoDTO.StaffCode}锛屽憳宸eRPUserInfoDTO.StaffName}锛學MS璐﹀彿涓嶅瓨鍦�");
+ // }
+ // user.Enable = (byte)userInfo.State;
+ // user.UserTrueName = userInfo.Name;
+ // //鏇存柊
+ // BaseDal.UpdateData(userInfo);
+ // _userRepository.UpdateData(user);
+ //}
+ //else if (eRPPurchaseOrderDTO.OperateType == 3)
+ //{
+ // //鍒ゆ柇鏄惁瀛樺湪
+ // Dt_UserInfo? userInfoOld = OlduserInfos.FirstOrDefault(x => x.Code == eRPUserInfoDTO.StaffCode);
+ // if (userInfoOld == null)
+ // {
+ // return content.Error($"鏇存柊宸ュ彿{eRPUserInfoDTO.StaffCode}锛屽憳宸eRPUserInfoDTO.StaffName}涓嶅瓨鍦�");
+ // }
+ // BaseDal.DeleteData(userInfoOld);
+ //}
else
{
- return PalletTypeEnum.LargestPallet.ObjToInt();
+ return content.Error("鏈壘鍒版搷浣滅被鍨�");
}
+ //鏇存柊鏁版嵁
+ return content.OK("鎺ユ敹鎴愬姛");
}
- else if (warehouse.WarehouseCode == WarehouseEnum.HA153.ObjToString())
+ catch (Exception ex)
{
- Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 1));
- if (palletTypeInfo == null)
- {
- throw new Exception($"鎵樼洏鍙烽敊璇�");
- }
- return palletTypeInfo.PalletType;
+ content.Error(ex.Message);
}
- else if (warehouse.WarehouseCode == WarehouseEnum.HA152.ObjToString())
- {
- Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 2));
- if (palletTypeInfo == null)
- {
- throw new Exception($"鎵樼洏鍙烽敊璇�");
- }
- return palletTypeInfo.PalletType;
- }
- else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ObjToString())
- {
- Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 3));
- if (palletTypeInfo == null)
- {
- throw new Exception($"鎵樼洏鍙烽敊璇�");
- }
- return palletTypeInfo.PalletType;
- }
- else if (warehouse.WarehouseCode == WarehouseEnum.HA58.ObjToString())
- {
- Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 2));
- if (palletTypeInfo == null)
- {
- throw new Exception($"鎵樼洏鍙烽敊璇�");
- }
- return palletTypeInfo.PalletType;
- }
- return -1;
- }
- /// <summary>
- /// 鍒ゆ柇姝g‘鏃堕棿鏍煎紡
- /// </summary>
- public WebResponseContent IsValidMCDates(List<MatSerNumAnalysisModel> analysisModels)
- {
- string[] effDates = analysisModels.Select(x => x.EffectiveDate).Distinct().ToArray();
- string[] ProDates = analysisModels.Select(x => x.ProductionDate).Distinct().ToArray();
- foreach (string effDate in effDates)
- {
- string format = "yyyy-MM-dd"; // 鐩爣鏍煎紡
- DateTime parsedDate;
- // 瑙f瀽骞堕獙璇佹牸寮�
- bool isValid = DateTime.TryParseExact(
- effDate,
- format,
- CultureInfo.InvariantCulture,
- DateTimeStyles.None,
- out parsedDate
- );
-
- if (!isValid)
- {
- return WebResponseContent.Instance.Error("鏍煎紡鏃犳晥鎴栨棩鏈熶笉鍚堟硶");
- }
- }
- foreach (string ProDate in ProDates)
- {
- string format = "yyyy-MM-dd"; // 鐩爣鏍煎紡
- DateTime parsedDate;
- // 瑙f瀽骞堕獙璇佹牸寮�
- bool isValid = DateTime.TryParseExact(
- ProDate,
- format,
- CultureInfo.InvariantCulture,
- DateTimeStyles.None,
- out parsedDate
- );
-
- if (!isValid)
- {
- return WebResponseContent.Instance.Error("鏍煎紡鏃犳晥鎴栨棩鏈熶笉鍚堟硶");
- }
- }
- return WebResponseContent.Instance.OK();
+ return content;
}
}
+
}
--
Gitblit v1.9.3