已删除5个文件
已修改32个文件
已添加19个文件
| | |
| | | [Description("空箱åºåº")] |
| | | OutEmpty = 140, |
| | | /// <summary> |
| | | /// è°æ¨åºåº |
| | | /// </summary> |
| | | [Description("è°æ¨åºåº")] |
| | | OutAllocate = 150, |
| | | /// <summary> |
| | | /// MESåºåº |
| | | /// </summary> |
| | | [Description("MESåºåº")] |
| | |
| | | MesMatReturn = 560, |
| | | |
| | | /// <summary> |
| | | /// è°æ¨å
¥åº |
| | | /// </summary> |
| | | [Description("è°æ¨å
¥åº")] |
| | | InAllocate = 570, |
| | | |
| | | /// <summary> |
| | | /// 线边ä»å
¥åº |
| | | /// </summary> |
| | | [Description("线边ä»å
¥åº")] |
| | |
| | | |
| | | if (agvUpdateModel.Method == "end") |
| | | { |
| | | if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt()) PutFinish(task.NextAddress); |
| | | if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) PutFinish(task.NextAddress); |
| | | _taskService.TaskCompleted(task.TaskNum); |
| | | } |
| | | agvResponseContent.Code = "0"; |
| | |
| | | |
| | | app.MapControllers(); |
| | | |
| | | BarcodeScanner.StartServer(); |
| | | //BarcodeScanner.StartServer(); |
| | | app.Run(); |
| | | |
| | |
| | | { |
| | | try |
| | | { |
| | | if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt()) |
| | | if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) |
| | | task.CurrentAddress = GetAGVAddress(task.CurrentAddress); |
| | | else |
| | | task.NextAddress = GetAGVAddress(task.NextAddress); |
| | |
| | | /// å
¶ä»å
¥åºå |
| | | /// </summary> |
| | | [Description("å
¶ä»å
¥åºå")] |
| | | Other = 130 |
| | | Other = 130, |
| | | /// <summary> |
| | | /// 客ä¾åæ¶ |
| | | /// </summary> |
| | | [Description("客ä¾åæ¶")] |
| | | CustomerRecovery=135 |
| | | } |
| | | } |
| | |
| | | /// å
¶ä»åºåºå |
| | | /// </summary> |
| | | [Description("å
¶ä»åºåºå")] |
| | | Other = 235 |
| | | Other = 235, |
| | | |
| | | /// <summary> |
| | | /// ç»´ä¿®åæå |
| | | /// </summary> |
| | | [Description("ç»´ä¿®åæå")] |
| | | MaintenanceIssue = 240, |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace WIDESEA_Common.OrderEnum |
| | | { |
| | | /// <summary> |
| | | /// éæç¶æ |
| | | /// </summary> |
| | | public enum ReturnOrderStatusEnum |
| | | { |
| | | /// <summary> |
| | | /// æªéæ |
| | | /// </summary> |
| | | [Description("æªéæ")] |
| | | NotReturn = 0, |
| | | |
| | | /// <summary> |
| | | /// éæä¸ |
| | | /// </summary> |
| | | [Description("éæä¸")] |
| | | Returning = 1, |
| | | |
| | | /// <summary> |
| | | /// éæå®æ |
| | | /// </summary> |
| | | [Description("éæå®æ")] |
| | | Returned = 2 |
| | | } |
| | | /// <summary> |
| | | /// éæç±»å |
| | | /// </summary> |
| | | public enum ReturnOrderTypeEnum |
| | | { |
| | | /// <summary> |
| | | /// æ åéæ |
| | | /// </summary> |
| | | [Description("æ åéæ")] |
| | | StandardReturn = 1, |
| | | /// <summary> |
| | | /// Boméæ |
| | | /// </summary> |
| | | [Description("Boméæ")] |
| | | BomReturn = 2 |
| | | } |
| | | } |
| | |
| | | OutEmpty = 140, |
| | | |
| | | /// <summary> |
| | | /// è°æ¨åºåº |
| | | /// </summary> |
| | | [Description("è°æ¨åºåº")] |
| | | OutAllocate = 150, |
| | | |
| | | /// <summary> |
| | | /// MESåºåº |
| | | /// </summary> |
| | | [Description("MESåºåº")] |
| | |
| | | MesMatReturn = 560, |
| | | |
| | | /// <summary> |
| | | /// è°æ¨å
¥åº |
| | | /// </summary> |
| | | [Description("è°æ¨å
¥åº")] |
| | | InAllocate = 570, |
| | | |
| | | /// <summary> |
| | | /// 空箱å
¥åº |
| | | /// </summary> |
| | | [Description("空箱å
¥åº")] |
| | |
| | | /// å
¥æåå·ç¼ç è§å |
| | | /// </summary> |
| | | [Description("å
¥æåå·ç¼ç è§å")] |
| | | RLCodeRule |
| | | RLCodeRule, |
| | | /// <summary> |
| | | /// éæåå·ç¼ç è§å |
| | | /// </summary> |
| | | [Description("éæåå·ç¼ç è§å")] |
| | | TLCodeRule, |
| | | } |
| | | } |
| | |
| | | /// 夿³¨ |
| | | /// </summary> |
| | | [PropertyValidate("夿³¨")] |
| | | public string Node { get; set; } |
| | | public string Note { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åæ¶ç±»å |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.Attributes; |
| | | |
| | | namespace WIDESEA_DTO.ERP |
| | | { |
| | | /// <summary> |
| | | /// æ å/boméæ |
| | | /// </summary> |
| | | [ModelValidate] |
| | | public class ErpReturnOrderDTO |
| | | { |
| | | /// <summary> |
| | | /// æä½ç±»å<br/> |
| | | /// 1ï¼æ°å¢<br/> |
| | | /// 2ï¼ä¿®æ¹<br/> |
| | | /// 3ï¼å é¤(å é¤åªè¦æç»è¡å·å颿åå·) |
| | | /// </summary> |
| | | [PropertyValidate("æä½ç±»å", NotNullAndEmpty = true, Check = new object[] { 1, 2, 3 })] |
| | | public int Way { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éæè®¢åå· |
| | | /// </summary> |
| | | [PropertyValidate("éæè®¢åå·", NotNullAndEmpty = true)] |
| | | public string OrderNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä»åºç¼å· |
| | | /// </summary> |
| | | [PropertyValidate("ä»åºç¼å·", NotNullAndEmpty = true)] |
| | | public string WaCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 忮夿³¨ |
| | | /// </summary> |
| | | public string? Note { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 订åç±»å<br/> |
| | | /// 1ï¼æ åéæ<br/> |
| | | /// 2ï¼boméæ<br/> |
| | | /// </summary> |
| | | [PropertyValidate("订åç±»å", NotNullAndEmpty = true, Check = new object[] { 1, 2 })] |
| | | public int OrderType { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦ç å |
| | | /// 0:å¦ |
| | | /// 1:æ¯ |
| | | /// </summary> |
| | | [PropertyValidate("æ¯å¦ç å", NotNullAndEmpty = true, Check = new object[] { 0, 1 })] |
| | | public int IsDev { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å表 |
| | | /// </summary> |
| | | [PropertyValidate("å表", NotNullAndEmpty = true)] |
| | | public List<ReturnDetail> Issitem { get; set; } |
| | | } |
| | | /// <summary> |
| | | /// éææç» |
| | | /// </summary> |
| | | [ModelValidate] |
| | | public class ReturnDetail |
| | | { |
| | | /// <summary> |
| | | /// ç³è¯·åå·(åæå) |
| | | /// </summary> |
| | | [PropertyValidate("ç³è¯·åå·", NotNullAndEmpty = true)] |
| | | public string PickCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç³è¯·åå·è¡å·(åæåæç»è¡å·) |
| | | /// </summary> |
| | | [PropertyValidate("ç³è¯·åå·è¡å·", NotNullAndEmpty = false)] |
| | | public int? ApplyRow { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éæè¡å· |
| | | /// </summary> |
| | | [PropertyValidate("éæè¡å·", NotNullAndEmpty = true)] |
| | | public int RowId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éæä¿¡æ¯ |
| | | /// </summary> |
| | | [PropertyValidate("éæä¿¡æ¯", NotNullAndEmpty = true)] |
| | | public List<ReturnInfo> PickList { get; set; } |
| | | } |
| | | /// <summary> |
| | | /// éæä¿¡æ¯ |
| | | /// </summary> |
| | | [ModelValidate] |
| | | public class ReturnInfo |
| | | { |
| | | /// <summary> |
| | | /// ç©æç¼ç |
| | | /// </summary> |
| | | [PropertyValidate("ç©æç¼ç ", NotNullAndEmpty = true)] |
| | | public string MCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å¯éæ°é |
| | | /// </summary> |
| | | [PropertyValidate("å¯éæ°é", NotNullAndEmpty = true)] |
| | | public float Qty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åä½ |
| | | /// </summary> |
| | | [PropertyValidate("åä½", NotNullAndEmpty = true)] |
| | | public string Unit { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éåæ°é |
| | | /// </summary> |
| | | [PropertyValidate("éåæ°é", NotNullAndEmpty = true)] |
| | | public float ReturnQty { get; set; } |
| | | |
| | | public string? Code { get; set; } |
| | | } |
| | | } |
| | |
| | | return response; |
| | | } |
| | | /// <summary> |
| | | /// ERPéæä¸æ¥æ¥å£è°ç¨ |
| | | /// </summary> |
| | | public string InvokeReturnApi(ERPReturnModel returnModel) |
| | | { |
| | | Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeErpApi.ToString()); |
| | | ERPBaseModel<ERPReturnModel> model = new ERPBaseModel<ERPReturnModel>() |
| | | { |
| | | Data = returnModel, |
| | | Desc = "ææéåº", |
| | | Type = "importMaterialsIssueNoteWMS", |
| | | SecurityCode = "TeChuang" |
| | | }; |
| | | string request = JsonConvert.SerializeObject(model, settings).Replace("issitem", "Issitem"); |
| | | string response = HttpHelper.Post(apiInfo.ApiAddress, request); |
| | | return response; |
| | | } |
| | | /// <summary> |
| | | /// ERPç©æåºåºæ¥å£è°ç¨ |
| | | /// </summary> |
| | | /// <param name="outboundModel"></param> |
| | |
| | | /// <summary> |
| | | /// ERPç©æåºåºæ¥å£è°ç¨ |
| | | /// </summary> |
| | | /// <param name="outboundModel"></param> |
| | | /// <returns></returns> |
| | | //string InvokeOutboundOrderApi(ERPOutboundModel outboundModel); |
| | | string InvokeOutStandardsApi(ERPIssueModel issueModel); |
| | | /// <summary> |
| | | /// ERPéæä¸æ¥æ¥å£è°ç¨ |
| | | /// </summary> |
| | | string InvokeReturnApi(ERPReturnModel returnModel); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace WIDESEA_External.Model |
| | | { |
| | | /// <summary> |
| | | /// éæååä¼ ERP |
| | | /// </summary> |
| | | public class ERPReturnModel |
| | | { |
| | | /// <summary> |
| | | /// æä½å¼ |
| | | /// </summary> |
| | | public int Way { get; set; } |
| | | /// <summary> |
| | | /// 主é®å¼ |
| | | /// </summary> |
| | | public string UniqueTag { get; set; } |
| | | /// <summary> |
| | | /// éæåå· |
| | | /// </summary> |
| | | public string Code { get; set; } |
| | | /// <summary> |
| | | /// ä»åºç¼ç |
| | | /// </summary> |
| | | public string WarehouseCode { get; set; } |
| | | /// <summary> |
| | | /// 忮夿³¨ |
| | | /// </summary> |
| | | public string Docremark { get; set; } |
| | | /// <summary> |
| | | /// éææ¶é´ |
| | | /// </summary> |
| | | public string Createtime { get; set; } |
| | | /// <summary> |
| | | /// éæäººå |
| | | /// </summary> |
| | | public string Createuser { get; set; } |
| | | /// <summary> |
| | | /// æ¯å¦ç å |
| | | /// </summary> |
| | | public int IsDev { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public List<ReturnItem> Issitem { get; set; } |
| | | } |
| | | public class ReturnItem |
| | | { |
| | | /// <summary> |
| | | /// éæç³è¯·åå· |
| | | /// </summary> |
| | | public string Pickcode { get; set; } |
| | | /// <summary> |
| | | /// éæè¡å· |
| | | /// </summary> |
| | | public int Rowindex { get; set; } |
| | | /// <summary> |
| | | /// éæä¿¡æ¯ |
| | | /// </summary> |
| | | public List<ReturnPickItem> PickList { get; set; } |
| | | } |
| | | |
| | | public class ReturnPickItem |
| | | { |
| | | /// <summary> |
| | | /// ç©æç¼ç |
| | | /// </summary> |
| | | public string Material { get; set; } |
| | | /// <summary> |
| | | /// æ¹æ¬¡æ°éæ»å |
| | | /// </summary> |
| | | public float Qty { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public List<ReturnDataItem> Dataitem { get; set; } |
| | | } |
| | | |
| | | public class ReturnDataItem |
| | | { |
| | | /// <summary> |
| | | /// æ¹æ¬¡å· |
| | | /// </summary> |
| | | public string Lotno { get; set; } |
| | | /// <summary> |
| | | /// éåæ°é |
| | | /// </summary> |
| | | public float Qty { get; set; } |
| | | /// <summary> |
| | | /// å¨åº |
| | | /// </summary> |
| | | public string Location { get; set; } |
| | | /// <summary> |
| | | /// å¶é é¨ä»¶ |
| | | /// </summary> |
| | | public string Msfpart { get; set; } |
| | | } |
| | | } |
| | |
| | | IPurchaseOrderDetailRepository PurchaseOrderDetailRepository { get; } |
| | | |
| | | IPurchaseOrderRepository PurchaseOrderRepository { get; } |
| | | IReturnOrderRepository ReturnOrderRepository { get; } |
| | | IReturnOrderDetailRepository ReturnOrderDetailRepository { get; } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_IInboundRepository |
| | | { |
| | | /// <summary> |
| | | /// éæåæç»ä»å¨æ¥å£å± |
| | | /// </summary> |
| | | public interface IReturnOrderDetailRepository : IRepository<Dt_ReturnOrderDetail> |
| | | { |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_IInboundRepository |
| | | { |
| | | /// <summary> |
| | | /// éæåä»å¨æ¥å£å± |
| | | /// </summary> |
| | | public interface IReturnOrderRepository : IRepository<Dt_ReturnOrder> |
| | | { |
| | | } |
| | | } |
| | |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_DTO; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_DTO.Inbound; |
| | | using WIDESEA_External.Model; |
| | | using WIDESEA_IInboundRepository; |
| | |
| | | /// <returns></returns> |
| | | WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder); |
| | | /// <summary> |
| | | /// |
| | | /// éæå®æä¸æ¥è³ERP |
| | | /// </summary> |
| | | /// <param name="warehouse"></param> |
| | | /// <param name="palletCode"></param> |
| | | /// <param name="materielInfo"></param> |
| | | public WebResponseContent FeedbackReturnOrder(Dt_InboundOrder inboundOrder,Dt_ReturnOrder returnOrder); |
| | | /// <summary> |
| | | /// æ ¹æ®ä»åºåæçå·è·åæçç±»å |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | int GetPalletType(Dt_Warehouse warehouse, string palletCode); |
| | | /// <summary> |
| | | /// å
¶ä»å
¥åºåæ¥æ¶(è°æå
¥ä»,客ä¾åæ¶,ç©æéå®éè´§) |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO model); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_IInboundService |
| | | { |
| | | public interface IReturnOrderDetailService : IService<Dt_ReturnOrderDetail> |
| | | { |
| | | IReturnOrderDetailRepository Repository { get; } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_IInboundService |
| | | { |
| | | public interface IReturnOrderService : IService<Dt_ReturnOrder> |
| | | { |
| | | IReturnOrderRepository Repository { get; } |
| | | /// <summary> |
| | | /// è·åæ¥æ¶éæå |
| | | /// </summary> |
| | | WebResponseContent ReturnOrder(ErpReturnOrderDTO model); |
| | | /// <summary> |
| | | /// è·åéæå |
| | | /// </summary> |
| | | WebResponseContent GetReturnOrders(SaveModel saveModel); |
| | | /// <summary> |
| | | /// 确认éåºæ ¹æ®éåºåçæå
¥åºå |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | WebResponseContent IsReturnCreateInOrder(int returnId); |
| | | } |
| | | } |
| | |
| | | public IPurchaseOrderDetailRepository PurchaseOrderDetailRepository { get; } |
| | | |
| | | public IPurchaseOrderRepository PurchaseOrderRepository { get; } |
| | | public IReturnOrderRepository ReturnOrderRepository { get; } |
| | | public IReturnOrderDetailRepository ReturnOrderDetailRepository { get; } |
| | | |
| | | public InboundRepository(IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository, IReceiveOrderDetailRepository receiveOrderDetailRepository, IReceiveOrderRepository receiveOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IPurchaseOrderRepository purchaseOrderRepository) |
| | | public InboundRepository(IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository, IReceiveOrderDetailRepository receiveOrderDetailRepository, IReceiveOrderRepository receiveOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IPurchaseOrderRepository purchaseOrderRepository, IReturnOrderRepository returnOrderRepository, IReturnOrderDetailRepository returnOrderDetailRepository) |
| | | { |
| | | InboundOrderDetailRepository = inboundOrderDetailRepository; |
| | | InboundOrderRepository = inboundOrderRepository; |
| | |
| | | ReceiveOrderRepository = receiveOrderRepository; |
| | | PurchaseOrderDetailRepository = purchaseOrderDetailRepository; |
| | | PurchaseOrderRepository = purchaseOrderRepository; |
| | | ReturnOrderRepository = returnOrderRepository; |
| | | ReturnOrderDetailRepository = returnOrderDetailRepository; |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_InboundRepository |
| | | { |
| | | public class ReturnOrderDetailRepository : RepositoryBase<Dt_ReturnOrderDetail>, IReturnOrderDetailRepository |
| | | { |
| | | public ReturnOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) |
| | | { |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_InboundRepository |
| | | { |
| | | public class ReturnOrderRepository : RepositoryBase<Dt_ReturnOrder>, IReturnOrderRepository |
| | | { |
| | | public ReturnOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) |
| | | { |
| | | } |
| | | } |
| | | } |
| | |
| | | _palletTypeInfoRepository = palletTypeInfoRepository; |
| | | } |
| | | /// <summary> |
| | | /// å
¶ä»å
¥åºåå建 |
| | | /// å
¶ä»å
¥åºåæ¥æ¶(è°æå
¥ä»,客ä¾åæ¶,ç©æéå®éè´§) |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO erpInOrder) |
| | | public WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO model) |
| | | { |
| | | try |
| | | { |
| | | return model.Way switch |
| | | { |
| | | 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_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseCode == erpInOrder.WaId); |
| | | //è·åç©æä¿¡æ¯ |
| | | Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode==model.MCode); |
| | | if (materielInfo==null) |
| | | { |
| | | return content.Error($"ç©æ{model.MCode}ä¸åå¨!"); |
| | | } |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaId); |
| | | if (warehouse == null) |
| | | { |
| | | return content.Error("æªæ¾å°ä»åºä¿¡æ¯"); |
| | | return content.Error($"æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | //è·åæ¯å¦åå¨è®¢å |
| | | Dt_InboundOrder inboundOrder = BaseDal.QueryFirst(x => x.InboundOrderNo == erpInOrder.OrderNo); |
| | | if (erpInOrder.Way == 1) |
| | | Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).Includes(x=>x.Details).First(); |
| | | if (inboundOrderOld!=null) |
| | | { |
| | | if (inboundOrder != null) |
| | | if (inboundOrderOld.OrderStatus!= OrderDetailStatusEnum.New.ObjToInt()) |
| | | { |
| | | |
| | | return content.Error($"{model.OrderNo}忮已å¼å§!"); |
| | | } |
| | | } |
| | | else if (erpInOrder.Way == 2) |
| | | { |
| | | |
| | | Dt_InboundOrderDetail? inboundOrderDetailOld = inboundOrderOld.Details?.FirstOrDefault(x => x.RowNo == model.RowNo.ObjToInt() && x.MaterielCode == model.MCode); |
| | | if (inboundOrderDetailOld!=null) |
| | | { |
| | | 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(); |
| | | 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) |
| | |
| | | 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) |
| | | if (receiveOrder == null && inboundOrder.OrderType==InOrderTypeEnum.Purchase.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçæ¶è´§å"); |
| | | } |
| | | if (receiveOrder.Details == null || receiveOrder.Details.Count <= 0) |
| | | 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<string> purchaseOrderNos = receiveOrder?.Details.Select(x => x.PurchaseOrderNo).ToList(); |
| | | |
| | | List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); |
| | | |
| | |
| | | if (!inboundOrderDetails.Any(x => x.BatchNo == model.LotNo)) |
| | | return WebResponseContent.Instance.Error($"æªå¨å
¥åºåæç»ä¸æ¾å°è¯¥ç©ææ¹æ¬¡ã{model.LotNo}ã"); |
| | | } |
| | | if (receiveOrder.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null) |
| | | if (receiveOrder?.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªå¨æ¶è´§åæç»ä¸æ¾å°è¯¥ç©æä¿¡æ¯"); |
| | | } |
| | |
| | | |
| | | 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) |
| | | if (purchaseOrderNos?.FirstOrDefault(x => x == model.PurchaseOrderNo) == null && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªå¨æ¶è´§åæç»ä¸æ¾å°è¯¥éè´å"); |
| | | } |
| | |
| | | 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(); |
| | |
| | | } |
| | | _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.OrderStatus == InOrderStatusEnum.å
¥åºå®æ.ObjToInt()) |
| | | FeedbackInboundOrder(inboundOrder); |
| | | if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.å
¥åºå®æ.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt()) |
| | | { |
| | | if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) |
| | | { |
| | | FeedbackReturnOrder(inboundOrder, returnOrder); |
| | | } |
| | | else |
| | | { |
| | | FeedbackInboundOrder(inboundOrder); |
| | | } |
| | | } |
| | | #endregion |
| | | content.OK(); |
| | | } |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å
¥åºåæç»ä¿¡æ¯"); |
| | | } |
| | | |
| | | List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); |
| | | //é¤éè´å
¥åºå以å¤å
¶ä»å
¥åºåç»çæ°æ®å¤ç |
| | | 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) |
| | | { |
| | |
| | | } |
| | | |
| | | 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) |
| | | { |
| | |
| | | { |
| | | if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªå¨æ¶è´§åæç»ä¸æ¾å°è¯¥éè´å"); |
| | | 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(); |
| | | 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 content; |
| | | } |
| | | 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($"ç©æä¸å¯æ··æ¾"); |
| | | } |
| | | |
| | | 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) |
| | | { |
| | |
| | | } |
| | | 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.Qty), |
| | | Dataitem = mg.Select(d => new ReturnDataItem |
| | | { |
| | | Lotno = d.BatchNo, |
| | | Qty = d.Qty, |
| | | 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; |
| | | } |
| | | static object lock_code = new object(); |
| | | public string CreateCodeByRule(string ruleCode) |
| | | { |
| | |
| | | return code; |
| | | } |
| | | } |
| | | |
| | | #region å¼ç¨ |
| | | /// <summary> |
| | | /// å
¥åºå®æåä¼ å°ERP |
| | | /// </summary> |
| | |
| | | // return WebResponseContent.Instance.Error(ex.Message); |
| | | // } |
| | | //} |
| | | |
| | | #endregion |
| | | public int GetPalletType(Dt_Warehouse warehouse, string palletCode) |
| | | { |
| | | if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_IInboundService; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_InboundService |
| | | { |
| | | public class ReturnOrderDetailService : ServiceBase<Dt_ReturnOrderDetail, IReturnOrderDetailRepository>, IReturnOrderDetailService |
| | | { |
| | | public IReturnOrderDetailRepository Repository => BaseDal; |
| | | |
| | | public ReturnOrderDetailService(IReturnOrderDetailRepository BaseDal) : base(BaseDal) |
| | | { |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_IInboundService; |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_IBasicRepository; |
| | | using WIDESEA_IOutboundService; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using SqlSugar.Extensions; |
| | | using WIDESEA_Common.CommonEnum; |
| | | |
| | | namespace WIDESEA_InboundService |
| | | { |
| | | public class ReturnOrderService : ServiceBase<Dt_ReturnOrder, IReturnOrderRepository>, IReturnOrderService |
| | | { |
| | | public IReturnOrderRepository Repository => BaseDal; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IBasicRepository _basicRepository; |
| | | private readonly IOutboundService _outboundService; |
| | | public ReturnOrderService(IReturnOrderRepository BaseDal,IUnitOfWorkManage unitOfWorkManage,IBasicRepository basicRepository, |
| | | IOutboundService outboundService) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _basicRepository = basicRepository; |
| | | _outboundService = outboundService; |
| | | } |
| | | /// <summary> |
| | | /// è·åéæå |
| | | /// </summary> |
| | | /// <param name="saveModel"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetReturnOrders(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_ReturnOrder> returnOrders = new List<Dt_ReturnOrder>(); |
| | | if (string.IsNullOrEmpty(orderNo)) |
| | | { |
| | | returnOrders = Db.Queryable<Dt_ReturnOrder>().Where(x => x.ReturnOrderStatus < ReturnOrderStatusEnum.Returning.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); |
| | | } |
| | | else |
| | | { |
| | | returnOrders = Db.Queryable<Dt_ReturnOrder>().Where(x => (x.OrderNo.Contains(orderNo)) && x.ReturnOrderStatus < ReturnOrderStatusEnum.Returning.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); |
| | | } |
| | | |
| | | content.OK(data: returnOrders); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// è·åæ¥æ¶éæå |
| | | /// </summary> |
| | | public WebResponseContent ReturnOrder(ErpReturnOrderDTO model) |
| | | { |
| | | try |
| | | { |
| | | return model.Way switch |
| | | { |
| | | 1 => AddReturnOrder(model), |
| | | 2 => UpdateReturnOrder(model), |
| | | 3 => DeleteReturnOrder(model), |
| | | _ => WebResponseContent.Instance.Error($"æä½ç±»åä¸åå¨,Way:{model.Way}"), |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// æ°å»ºéæå |
| | | /// </summary> |
| | | public WebResponseContent AddReturnOrder(ErpReturnOrderDTO model) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (BaseDal.QueryFirst(x => x.OrderNo == model.OrderNo) != null) |
| | | { |
| | | return content.Error($"éæåå·{model.OrderNo}å·²åå¨!"); |
| | | } |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaCode); |
| | | if (warehouse == null) |
| | | { |
| | | return content.Error($"æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | List<Dt_ReturnOrderDetail> returnOrderDetails = new List<Dt_ReturnOrderDetail>(); |
| | | foreach (var item in model.Issitem) |
| | | { |
| | | //夿åæåå· |
| | | Dt_OutboundOrder outboundOrder = _outboundService.OutboundOrderService.Repository.Db.Queryable<Dt_OutboundOrder>().Where(x=>x.UpFLOrderNo==item.PickCode).Includes(x=>x.Details).First() ?? throw new Exception($"ç³è¯·åå·(åæå){item.PickCode}ä¸åå¨"); |
| | | |
| | | foreach (var pickitem in item.PickList) |
| | | { |
| | | Dt_OutboundOrderDetail outboundOrderDetail = outboundOrder.Details.Find(x => x.MaterielCode == pickitem.MCode) ?? throw new Exception($"{item.PickCode}ç³è¯·åå·ä¸ç©æ{pickitem.MCode}ä¸åå¨"); |
| | | //è·å对åºåºåºå详æ
|
| | | Dt_OutStockLockInfo outStockLockInfo = _outboundService.OutboundStockLockInfoService.Repository.QueryFirst(x => x.OrderDetailId == outboundOrderDetail.Id); |
| | | |
| | | Dt_ReturnOrderDetail returnOrderDetail = new Dt_ReturnOrderDetail() |
| | | { |
| | | PickCode = item.PickCode, |
| | | ApplyRow = item.ApplyRow ?? 0, |
| | | RowId = item.RowId, |
| | | OrderDetailStatus = ReturnOrderStatusEnum.NotReturn.ObjToInt(), |
| | | MCode = pickitem.MCode, |
| | | MaterielName = outboundOrderDetail.MaterielName, |
| | | MaterielSpec = outboundOrderDetail.MaterielSpec ?? "", |
| | | BatchNo = outStockLockInfo.BatchNo, |
| | | Qty = pickitem.Qty, |
| | | ReturnQty = pickitem.ReturnQty, |
| | | OverReturnQty = 0, |
| | | Unit = pickitem.Unit, |
| | | Code = pickitem.Code |
| | | }; |
| | | returnOrderDetails.Add(returnOrderDetail); |
| | | } |
| | | } |
| | | Dt_ReturnOrder returnOrder = new Dt_ReturnOrder() |
| | | { |
| | | OrderNo=model.OrderNo, |
| | | WarehouseId=warehouse.WarehouseId, |
| | | ReturnOrderType=model.OrderType, |
| | | ReturnOrderStatus=ReturnOrderStatusEnum.NotReturn.ObjToInt(), |
| | | UploadStatus= WhetherEnum.False.ObjToInt(), |
| | | IsDev=model.IsDev, |
| | | Remark=model.Note, |
| | | Details= returnOrderDetails |
| | | }; |
| | | Db.InsertNav(returnOrder).Include(x => x.Details).ExecuteCommand(); |
| | | |
| | | content.OK("æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// ä¿®æ¹éæå |
| | | /// </summary> |
| | | public WebResponseContent UpdateReturnOrder(ErpReturnOrderDTO model) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// å é¤éæå |
| | | /// </summary> |
| | | public WebResponseContent DeleteReturnOrder(ErpReturnOrderDTO model) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// 确认éåºæ ¹æ®éåºåçæå
¥åºå |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent IsReturnCreateInOrder(int returnId) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_ReturnOrder returnOrder = Db.Queryable<Dt_ReturnOrder>().Where(x => x.Id == returnId).Includes(x => x.Details).First(); |
| | | if (returnOrder==null) |
| | | { |
| | | return content.Error("æªæ¾å°éæè¯¥ä¿¡æ¯"); |
| | | } |
| | | if (returnOrder.Details==null || returnOrder.Details.Count<=0) |
| | | { |
| | | return content.Error("æªæ¾å°è¯¥éæåä¿¡æ¯"); |
| | | } |
| | | if (returnOrder.ReturnOrderStatus!=ReturnOrderStatusEnum.NotReturn.ObjToInt()) |
| | | { |
| | | return content.Error("该éæå已宿æéæä¸"); |
| | | } |
| | | List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>(); |
| | | foreach (var item in returnOrder.Details) |
| | | { |
| | | Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail() |
| | | { |
| | | MaterielCode=item.MCode, |
| | | BatchNo=item.BatchNo, |
| | | OrderQuantity=item.ReturnQty, |
| | | ReceiptQuantity=0, |
| | | OverInQuantity=0, |
| | | OrderDetailStatus= OrderDetailStatusEnum.New.ObjToInt(), |
| | | Unit=item.Unit, |
| | | RowNo=item.RowId, |
| | | MaterielName=item.MaterielName, |
| | | MaterielSpec=item.MaterielSpec, |
| | | }; |
| | | inboundOrderDetails.Add(orderDetail); |
| | | } |
| | | Dt_InboundOrder inboundOrder = new Dt_InboundOrder() |
| | | { |
| | | WarehouseId=returnOrder.WarehouseId, |
| | | UpperOrderNo=returnOrder.OrderNo, |
| | | SupplierId="", |
| | | OrderType= InOrderTypeEnum.Return.ObjToInt(), |
| | | OrderStatus= InOrderStatusEnum.æªå¼å§.ObjToInt(), |
| | | CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), |
| | | Remark=returnOrder.Remark, |
| | | Details= inboundOrderDetails |
| | | }; |
| | | returnOrder.ReturnOrderStatus=ReturnOrderStatusEnum.Returning.ObjToInt(); |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.UpdateData(returnOrder); |
| | | Db.InsertNav(inboundOrder).Include(x=>x.Details).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return content.OK("æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | } |
| | | } |
| | |
| | | <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_ICheckRepository\WIDESEA_ICheckRepository.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IInboundService\WIDESEA_IInboundService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_ITaskInfoRepository\WIDESEA_ITaskInfoRepository.csproj" /> |
| | |
| | | /// <summary> |
| | | /// ç©æåç§° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "ç©æåç§°")] |
| | | [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "ç©æåç§°")] |
| | | public string MaterielName { get; set; } |
| | | |
| | | /// <summary> |
| | |
| | | /// <summary> |
| | | /// ç©æåç§° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "ç©æåç§°")] |
| | | [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "ç©æåç§°")] |
| | | public string MaterielName { get; set; } |
| | | } |
| | | } |
| | |
| | | /// <summary> |
| | | /// ç©æåç§° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "ç©æåç§°")] |
| | | [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "ç©æåç§°")] |
| | | public string MaterielName { get; set; } |
| | | |
| | | /// <summary> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.Attributes; |
| | | using WIDESEA_Core.CodeConfigEnum; |
| | | using WIDESEA_Core.DB.Models; |
| | | |
| | | namespace WIDESEA_Model.Models |
| | | { |
| | | /// <summary> |
| | | /// éæå |
| | | /// </summary> |
| | | [SugarTable(nameof(Dt_ReturnOrder), "éæå")] |
| | | public class Dt_ReturnOrder : BaseEntity |
| | | { |
| | | /// <summary> |
| | | /// ä¸»é® |
| | | /// </summary> |
| | | [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主é®")] |
| | | public int Id { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éæåå· |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "éæåå·")] |
| | | public string OrderNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä»åºä¸»é® |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "ä»åºä¸»é®")] |
| | | public int WarehouseId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 订åç±»å<br/> |
| | | /// 1ï¼æ åéæ<br/> |
| | | /// 2ï¼boméæ<br/> |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "订åç±»å")] |
| | | public int ReturnOrderType { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 订åç¶æ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "订åç¶æ")] |
| | | public int ReturnOrderStatus { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä¸ä¼ ç¶æ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "ä¸ä¼ ç¶æ")] |
| | | public int UploadStatus { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦ç å |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "æ¯å¦ç å")] |
| | | public int IsDev { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 夿³¨ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "夿³¨")] |
| | | public string Remark { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éæåæç» |
| | | /// </summary> |
| | | [PropertyValidate("éæåæç»", NotNullAndEmpty = true), Navigate(NavigateType.OneToMany, nameof(Dt_ReturnOrderDetail.ReturnId), nameof(Id))] |
| | | public List<Dt_ReturnOrderDetail> Details { get; set; } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.Attributes; |
| | | using WIDESEA_Core.CodeConfigEnum; |
| | | using WIDESEA_Core.DB.Models; |
| | | |
| | | namespace WIDESEA_Model.Models |
| | | { |
| | | /// <summary> |
| | | /// éæåæç» |
| | | /// </summary> |
| | | [SugarTable(nameof(Dt_ReturnOrderDetail), "éæåæç»")] |
| | | public class Dt_ReturnOrderDetail : BaseEntity |
| | | { |
| | | /// <summary> |
| | | /// ä¸»é® |
| | | /// </summary> |
| | | [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主é®")] |
| | | public int Id { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éæåä¸»é® |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "éæå主é®")] |
| | | public int ReturnId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç³è¯·åå·(åæå) |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false,Length =50, ColumnDescription = "ç³è¯·åå·(åæå)")] |
| | | public string PickCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç³è¯·åå·è¡å·(åæåæç»è¡å·) |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "ç³è¯·åå·è¡å·(åæåæç»è¡å·)")] |
| | | public int ApplyRow { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éæè¡å· |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "éæè¡å·")] |
| | | public int RowId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æç»åç¶æ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "æç»åç¶æ")] |
| | | public int OrderDetailStatus { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç©æç¼ç |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false,Length =50, ColumnDescription = "ç©æç¼ç ")] |
| | | public string MCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç©æåç§° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "ç©æåç§°")] |
| | | public string MaterielName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç©æè§æ ¼ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "ç©æè§æ ¼")] |
| | | public string MaterielSpec { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¹æ¬¡å· |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "æ¹æ¬¡å·")] |
| | | public string BatchNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å¯éæ°é |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "å¯éæ°é")] |
| | | public float Qty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// éåæ°é |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "éåæ°é")] |
| | | public float ReturnQty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å·²éåæ°é |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "å·²éåæ°é")] |
| | | public float OverReturnQty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åä½ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false,Length =20, ColumnDescription = "åä½")] |
| | | public string Unit { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å¶é é¨ä»¶code |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "å¶é é¨ä»¶code")] |
| | | public string Code { get; set; } |
| | | } |
| | | } |
| | |
| | | public string UpperOrderNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åææ¨éåæ®ç¼å· |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "åææ¨éåæ®ç¼å·")] |
| | | public string UpFLOrderNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åæ®ç±»å |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "åæ®ç±»å", IsOnlyIgnoreUpdate = true)] |
| | |
| | | public string MaterielName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç©æè§æ ¼ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "ç©æè§æ ¼")] |
| | | public string MaterielSpec { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¹æ¬¡å· |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "æ¹æ¬¡å·")] |
| | |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | #region åºåºå®æä¸æ¥ERP |
| | | if (outboundOrder.OrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | //çäº§é¢æ,ç åé¢æï¼æ åé¢æï¼æ¨éERPåºåº |
| | | if (outboundOrder.OrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt() && outboundOrder.OrderType==OutOrderTypeEnum.Issue.ObjToInt()) |
| | | _invokeERPService.InvokeOutStandardsApi(GetERPIssueModel(outboundOrder, warehouse.WarehouseCode)); |
| | | #endregion |
| | | content.OK(); |
| | |
| | | Createuser = string.IsNullOrEmpty(Createuser) ? Createuser : "admin", |
| | | Issitem = new List<ERPIssueItemModel>() { issueItemModel }, |
| | | }; |
| | | //æ´æ°åæåå· |
| | | outboundOrder.UpFLOrderNo = issueModel.Code; |
| | | BaseDal.UpdateData(outboundOrder); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | BatchNo = model.MLot, |
| | | MaterielCode = model.MCode, |
| | | MaterielName = materielInfo.MaterielName, |
| | | MaterielSpec=materielInfo.MaterielSpec, |
| | | OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), |
| | | OrderQuantity = model.Qty, |
| | | OrderId = oldOutboundOrder.Id |
| | |
| | | RowNo = Convert.ToInt32(model.RowNo), |
| | | BatchNo = model.MLot, |
| | | MaterielCode = model.MCode, |
| | | MaterielSpec = materielInfo.MaterielSpec, |
| | | MaterielName = materielInfo.MaterielName, |
| | | OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), |
| | | OrderQuantity = model.Qty, |
| | |
| | | DepartmentName = model.DepartmentName, |
| | | Details = new List<Dt_OutboundOrderDetail> { 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(); |
| | | } |
| | |
| | | RowNo = Convert.ToInt32(model.RowNo), |
| | | BatchNo = model.MLot, |
| | | MaterielCode = model.MCode, |
| | | MaterielSpec = materielInfo.MaterielSpec, |
| | | MaterielName = materielInfo.MaterielName, |
| | | OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), |
| | | OrderQuantity = model.Qty, |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥åºåºå"); |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.DeleteData(oldOutboundOrder); |
| | | _outboundOrderDetailRepository.DeleteData(oldOutboundOrder.Details); |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | |
| | | Createuser = outboundOrder.Creater, |
| | | Issitem = new List<ERPIssueItemModel>() { issueItemModel }, |
| | | }; |
| | | //æ´æ°åæåå· |
| | | outboundOrder.UpFLOrderNo = issueModel.Code; |
| | | BaseDal.UpdateData(outboundOrder); |
| | | _invokeERPService.InvokeOutStandardsApi(issueModel); |
| | | } |
| | | else |
| | |
| | | // Issitem = new List<ERPIssueItemModel>() { 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); |
| | | 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(); |
| | | } |
| | |
| | | |
| | | public List<Dt_StockInfo> GetStockInfos(string materielCode, string lotNo, List<string> locationCodes) |
| | | { |
| | | List<Dt_StockInfo> stockInfos = null; |
| | | if (!string.IsNullOrEmpty(lotNo)) |
| | | { |
| | | return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode && v.BatchNo == lotNo)).ToList(); |
| | | var stockSort = Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode && v.BatchNo == lotNo)).ToList(); |
| | | stockInfos = stockSort.OrderBy(x=>x.Details.FirstOrDefault()?.EffectiveDate).ToList(); |
| | | } |
| | | else |
| | | { |
| | | return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList(); |
| | | var stockSort = Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList(); |
| | | stockInfos = stockSort.OrderBy(x => x.Details.FirstOrDefault()?.EffectiveDate).ToList(); |
| | | } |
| | | |
| | | |
| | | return stockInfos; |
| | | //ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>().Where(x => locationCodes.Contains(x.LocationCode)); |
| | | //ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)); |
| | | //return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).OrderBy(a => a.CreateDate).Includes(a => a.Details).ToList(); |
| | |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.Enums; |
| | |
| | | { |
| | | List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>(); |
| | | float stockTotalQuantity = stockInfos.Select(x => x.Details.Sum(v => v.StockQuantity - v.OutboundQuantity)).Sum(x => x); |
| | | stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); |
| | | //stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); |
| | | if (stockTotalQuantity >= needQuantity)//åºåå¤ |
| | | { |
| | | int index = 0; |
| | |
| | | WarehouseId = warehouse.WarehouseId, |
| | | StockStatus = StockStatusEmun.MESéåº.ObjToInt() |
| | | }; |
| | | |
| | | Dt_StockInfoDetail_Hty stockInfoDetail_Hty = _stockRepository.StockInfoDetail_HtyRepository.QueryFirst(x => x.BatchNo == model.MaterialLot && x.MaterielCode == model.MaterialCode); |
| | | Dt_StockInfo_Hty stockInfo_Hty = _stockRepository.StockInfo_HtyRepository.QueryData(x=>x.PalletCode== model.CarrierCode).OrderByDescending(x=>x.SourceId).First(); |
| | | Dt_StockInfoDetail_Hty stockInfoDetail_Hty = _stockRepository.StockInfoDetail_HtyRepository.QueryFirst(x => x.StockId==stockInfo_Hty.SourceId); |
| | | |
| | | Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() |
| | | { |
| | |
| | | stockInfo.LocationCode = locationInfo.LocationCode; |
| | | |
| | | #region 空箱å
¥åº/æ£éååº/çäº§éæ |
| | | if (task.TaskType == TaskTypeEnum.InEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.InPick.ObjToInt() || task.TaskType==TaskTypeEnum.ProductionReturn.ObjToInt()) |
| | | if (task.TaskType == TaskTypeEnum.InEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.InPick.ObjToInt() || (task.TaskType==TaskTypeEnum.ProductionReturn.ObjToInt() && warehouse.WarehouseCode==WarehouseEnum.HA64.ToString())) |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); |
| | |
| | | |
| | | Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First(); |
| | | Dt_InboundOrderDetail? inboundOrderDetail = null; |
| | | Dt_ReturnOrder? returnOrder = null; |
| | | //æ åå
¥åºæµç¨æ¥æ¾å
¥åºåæ® |
| | | if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt()) |
| | | { |
| | | //æ¥è¯¢å宿çå
¥åºæç»æ°é |
| | | int overCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count; |
| | | if (stockInfo.StockStatus == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt()) |
| | | inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo); |
| | | foreach (var item in stockInfo.Details) |
| | | { |
| | | inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo); |
| | | foreach (var item in stockInfo.Details) |
| | | if (inboundOrderDetail == null) |
| | | { |
| | | if (inboundOrderDetail == null) |
| | | { |
| | | continue; |
| | | } |
| | | ERPInboundDetailModel detailModel = new ERPInboundDetailModel() |
| | | { |
| | | ExpiryDate = item.EffectiveDate ?? "", |
| | | LocationCode = warehouse.WarehouseCode, |
| | | MaterialsCode = item.MaterielCode, |
| | | MfgDate = item.ProductionDate ?? "", |
| | | QtyCustoms = "0", |
| | | Quantity = item.StockQuantity.ToString(), |
| | | Rack = stockInfo.LocationCode, |
| | | ReceiptCode = inboundOrder.UpperOrderNo, |
| | | ReceiptSerNo = item.InboundOrderRowNo.ToString() |
| | | }; |
| | | inboundOrderDetail.OverInQuantity += item.StockQuantity; |
| | | if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity) |
| | | { |
| | | inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); |
| | | overCount += 1; |
| | | } |
| | | else if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) |
| | | { |
| | | inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt(); |
| | | } |
| | | continue; |
| | | } |
| | | inboundOrderDetail.OverInQuantity += item.StockQuantity; |
| | | if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity) |
| | | { |
| | | inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); |
| | | overCount += 1; |
| | | } |
| | | else if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) |
| | | { |
| | | inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt(); |
| | | } |
| | | } |
| | | if (inboundOrder.Details.Count == overCount) |
| | | { |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (inboundOrder.OrderStatus == InOrderStatusEnum.æªå¼å§.ObjToInt()) |
| | | else if (inboundOrder.OrderStatus == InOrderStatusEnum.æªå¼å§.ObjToInt()) |
| | | { |
| | | inboundOrder.OrderStatus = InOrderStatusEnum.å
¥åºä¸.ObjToInt(); |
| | | } |
| | |
| | | _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); |
| | | _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail); |
| | | } |
| | | if (returnOrder!=null) |
| | | { |
| | | _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder); |
| | | _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details); |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | | //åå¨å
¥åºåå¹¶ç¶æä¸ºå®æç¶ææ¨éè³ERP |
| | | if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.å
¥åºå®æ.ObjToInt()) |
| | | _inboundOrderService.FeedbackInboundOrder(inboundOrder); |
| | | if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.å
¥åºå®æ.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt()) |
| | | { |
| | | if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) |
| | | { |
| | | _inboundOrderService.FeedbackReturnOrder(inboundOrder, returnOrder); |
| | | } |
| | | else |
| | | { |
| | | _inboundOrderService.FeedbackInboundOrder(inboundOrder); |
| | | } |
| | | } |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>(); |
| | | List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>(); |
| | | |
| | | if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt()) |
| | | if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt())) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°åºåºè¯¦æ
ä¿¡æ¯"); |
| | | } |
| | |
| | | task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt()) |
| | | if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt()|| task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt()) |
| | | { |
| | | //å¤çåºåºè¯¦æ
|
| | | if (outboundOrderDetails.Count > 0) |
| | | { |
| | | _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails); |
| | | } |
| | | |
| | | stockInfo.LocationCode = ""; |
| | | stockInfo.StockStatus = StockStatusEmun.åºåºå®æ.ObjToInt(); |
| | | _stockService.StockInfoService.Repository.UpdateData(stockInfo); |
| | |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.LocationEnum; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_Common.WareHouseEnum; |
| | |
| | | return WebResponseContent.Instance.Error($"该ç«ç¹å·²ææªæ§è¡çä»»å¡"); |
| | | } |
| | | |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.PalletCode== palletCode).Includes(x=>x.Details).First(); |
| | | if (stockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°ç»çä¿¡æ¯"); |
| | |
| | | Roadway = "", |
| | | SourceAddress = stationCode, |
| | | TargetAddress = "", |
| | | TaskType = stockInfo.StockStatus == StockStatusEmun.æ£é宿.ObjToInt() ? TaskTypeEnum.InPick.ObjToInt() : TaskTypeEnum.Inbound.ObjToInt(), |
| | | TaskType = TaskTypeEnum.Inbound.ObjToInt(), |
| | | TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | PalletType = stockInfo.PalletType |
| | | }; |
| | | |
| | | //è·åæ¯å¦åå¨å
¥åºå |
| | | Dt_InboundOrder? inboundOrder = null; |
| | | if (stockInfo!=null && stockInfo.Details.Count>0) |
| | | { |
| | | string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? ""; |
| | | inboundOrder =_inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.å
¥åºå®æ.ObjToInt()); |
| | | } |
| | | |
| | | if (inboundOrder != null) |
| | | { |
| | | if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt()) |
| | | { |
| | | newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt(); |
| | | } |
| | | else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) |
| | | { |
| | | newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt(); |
| | | } |
| | | } |
| | | if (stockInfo.StockStatus == StockStatusEmun.æå¨ç»çæå.ObjToInt()) |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.æå¨ç»çå
¥åºç¡®è®¤.ObjToInt(); |
| | | } |
| | | else if (stockInfo.StockStatus == StockStatusEmun.æ£é宿.ObjToInt()) |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | newTask.TaskType = TaskTypeEnum.InPick.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | } |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | int taskId = BaseDal.AddData(newTask); |
| | | newTask.TaskId = taskId; |
| | |
| | | return WebResponseContent.Instance.Error($"该ç«ç¹å·²ææªæ§è¡çä»»å¡"); |
| | | } |
| | | |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); |
| | | if (stockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°ç»çä¿¡æ¯"); |
| | |
| | | PalletType = stockInfo.PalletType |
| | | }; |
| | | |
| | | //è·åæ¯å¦åå¨å
¥åºå |
| | | Dt_InboundOrder? inboundOrder = null; |
| | | if (stockInfo != null && stockInfo.Details.Count > 0) |
| | | { |
| | | string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? ""; |
| | | inboundOrder = _inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.å
¥åºå®æ.ObjToInt()); |
| | | } |
| | | |
| | | if (inboundOrder != null) |
| | | { |
| | | if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt()) |
| | | { |
| | | newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt(); |
| | | } |
| | | else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) |
| | | { |
| | | newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt(); |
| | | } |
| | | } |
| | | if (stockInfo.StockStatus == StockStatusEmun.æå¨ç»çæå.ObjToInt()) |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.æå¨ç»çå
¥åºç¡®è®¤.ObjToInt(); |
| | |
| | | } |
| | | else if (stockInfo.StockStatus == StockStatusEmun.æ£é宿.ObjToInt()) |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.æ£é宿.ObjToInt(); |
| | | newTask.TaskType = TaskTypeEnum.InPick.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | } |
| | | |
| | | LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; |
| | | _unitOfWorkManage.BeginTran(); |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation); |
| | |
| | | (List<Dt_StockInfo>, List<Dt_OutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails); |
| | | if (result.Item1 != null && result.Item1.Count > 0) |
| | | { |
| | | tasks = GetTasks(result.Item1, TaskTypeEnum.Outbound); |
| | | Dt_OutboundOrder outboundOrder =_outboundService.OutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId); |
| | | TaskTypeEnum typeEnum = outboundOrder.OrderType switch |
| | | { |
| | | (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound, |
| | | (int)OutOrderTypeEnum.Allocate=> TaskTypeEnum.OutAllocate, |
| | | (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality, |
| | | _ =>new TaskTypeEnum() |
| | | }; |
| | | tasks = GetTasks(result.Item1, typeEnum); |
| | | result.Item2.ForEach(x => |
| | | { |
| | | x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); |
| | |
| | | #endregion |
| | | |
| | | #region 䏿¥ERP |
| | | if (outboundOrder.OrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | if (outboundOrder.OrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt() && outboundOrder.OrderType==OutOrderTypeEnum.Issue.ObjToInt()) |
| | | { |
| | | //List<ERPPickModel> eRPPickModels = new List<ERPPickModel>(); |
| | | //outStockLockInfos.ForEach(x => |
| | |
| | | BaseDal.AddData(tasks); |
| | | if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) |
| | | { |
| | | stockInfos.ForEach(x => |
| | | { |
| | | x.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | }); |
| | | WebResponseContent content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks); |
| | | |
| | | if (!content.Status) |
| | |
| | | private readonly IOutboundService _outboundService; |
| | | private readonly IInboundService _inboundService; |
| | | private readonly IInvokeERPService _invokeERPService; |
| | | private readonly IReturnOrderService _returnOrderService; |
| | | |
| | | public ErpController(IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, |
| | | IInvokeERPService invokeERPService) |
| | | IInvokeERPService invokeERPService, IReturnOrderService returnOrderService) |
| | | { |
| | | _basicService = basicService; |
| | | _outboundService = outboundService; |
| | | _inboundService = inboundService; |
| | | _invokeERPService = invokeERPService; |
| | | _returnOrderService = returnOrderService; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | if (content.Status) return Instance.OK(); |
| | | else return Instance.Error(content.Message); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥æ¶ERPéæåä¿¡æ¯ |
| | | /// </summary> |
| | | [HttpPost, Route("ReturnOrder"), AllowAnonymous, MethodParamsValidate] |
| | | public ErpResponseContent ReturnOrder([FromBody] Root<ErpReturnOrderDTO> model) |
| | | { |
| | | WebResponseContent content = _returnOrderService.ReturnOrder(model.Content); |
| | | if (content.Status) return Instance.OK(); |
| | | else return Instance.Error(content.Message); |
| | | } |
| | | /// <summary> |
| | | /// å
¶ä»å
¥åºåæ¥æ¶(è°æå
¥ä»,客ä¾åæ¶,ç©æéå®éè´§) |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | [HttpPost, Route("ReceiveWarehousingOrder"), AllowAnonymous, MethodParamsValidate] |
| | | public ErpResponseContent ReceiveWarehousingOrder([FromBody] Root<ErpInOrderDTO> model) |
| | | { |
| | | WebResponseContent content = _inboundService.InbounOrderService.ReceiveWarehousingOrder(model.Content); |
| | | if (content.Status) return Instance.OK(); |
| | | else return Instance.Error(content.Message); |
| | | } |
| | | /// <summary> |
| | | /// æ¨éERPåºåº |
| | | /// </summary> |
| | |
| | | { |
| | | return _invokeERPService.InvokeInboundOrderApi(inboundModel); |
| | | } |
| | | /// <summary> |
| | | /// æ¨éERPéæä¸æ¥ |
| | | /// </summary> |
| | | [HttpPost, Route("InvokeReturnApi"), AllowAnonymous] |
| | | public string InvokeReturnApi([FromBody] ERPReturnModel returnModel) |
| | | { |
| | | return _invokeERPService.InvokeReturnApi(returnModel); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.AspNetCore.Authorization; |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseController; |
| | | using WIDESEA_IInboundService; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_WMSServer.Controllers.Inbound |
| | | { |
| | | /// <summary> |
| | | /// éæå |
| | | /// </summary> |
| | | [Route("api/ReturnOrder")] |
| | | [ApiController] |
| | | public class ReturnOrderController : ApiBaseController<IReturnOrderService, Dt_ReturnOrder> |
| | | { |
| | | public ReturnOrderController(IReturnOrderService service) : base(service) |
| | | { |
| | | } |
| | | /// <summary> |
| | | /// è·åéæå |
| | | /// </summary> |
| | | [HttpPost,Route("GetReturnOrders")] |
| | | public WebResponseContent GetReturnOrders([FromBody] SaveModel saveModel) |
| | | { |
| | | return Service.GetReturnOrders(saveModel); |
| | | } |
| | | /// <summary> |
| | | /// 确认éåºæ ¹æ®éåºåçæå
¥åºå |
| | | /// </summary> |
| | | /// <param name="returnId">éæåID</param> |
| | | /// <returns></returns> |
| | | [HttpPost, Route("IsReturnCreateInOrder")] |
| | | public WebResponseContent IsReturnCreateInOrder(int returnId) |
| | | { |
| | | return Service.IsReturnCreateInOrder(returnId); |
| | | } |
| | | } |
| | | } |
| | |
| | | //è¿æ¥å符串 |
| | | //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", |
| | | //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | "ConnectionString": "Data Source=10.30.4.92;Initial Catalog=WMS_TC;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | //æ§WMSæ°æ®åºè¿æ¥ |
| | | //"TeConnectionString": "Data Source=10.30.4.92;Initial Catalog=TeChuang;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | //è·¨å |
| | |
| | | let config = { |
| | | baseUrl: 'http://10.30.4.92:9283', |
| | | baseUrl: 'http://127.0.0.1:9293', |
| | | urls: [ |
| | | 'http://10.30.4.92:9283', |
| | | 'http://10.30.4.92:9283' |
| | |
| | | responseType: 'text', |
| | | showLoading: true, // æ¯å¦æ¾ç¤ºè¯·æ±ä¸çloading |
| | | loadingText: '请æ±ä¸...', |
| | | loadingTime: 800, // 卿¤æ¶é´å
ï¼è¯·æ±è¿æ²¡åæ¥çè¯ï¼å°±æ¾ç¤ºå è½½ä¸å¨ç»ï¼åä½ms |
| | | loadingTime: 1500, // 卿¤æ¶é´å
ï¼è¯·æ±è¿æ²¡åæ¥çè¯ï¼å°±æ¾ç¤ºå è½½ä¸å¨ç»ï¼åä½ms |
| | | timer: null, // 宿¶å¨ |
| | | originalData: false, // æ¯å¦å¨æ¦æªå¨ä¸è¿åæå¡ç«¯çåå§æ°æ®ï¼è§ææ¡£è¯´æ |
| | | loadingMask: true, // å±ç¤ºloadingçæ¶åï¼æ¯å¦ç»ä¸ä¸ªéæçèå±ï¼é²æ¢è§¦æ¸ç©¿é |