ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/views/outbound/outPicking.vue
@@ -200,6 +200,8 @@ </el-row> </div> <print-view ref="printView" @parentcall="parentcall"></print-view> <!-- ç¡®è®¤å¯¹è¯æ¡ --> <el-dialog v-model="confirmDialogVisible" title="æä½ç¡®è®¤" width="400px" :before-close="handleDialogClose"> <div class="confirm-content"> @@ -218,7 +220,10 @@ </template> <script> import printView from "@/extension/outbound/extend/printView.vue" export default { components: { printView }, name: 'OutPicking', data() { return { @@ -415,6 +420,9 @@ operator: this.getUserName() }).then(response => { if (response.status) { if (response.data.scannedDetail.isUnpacked && response.data.scannedDetail.materialCodes.length > 0) { this.$refs.printView.open(response.data.scannedDetail.materialCodes); } this.$message.success('æ£é确认æå') this.resetMaterialBarcode() // this.loadUnpickedData() ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1204.46620/CodeChunks.dbBinary files differ
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1204.46620/CodeChunks.db-shmBinary files differ
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1204.46620/CodeChunks.db-walBinary files differ
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1204.46620/SemanticSymbols.dbBinary files differ
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1204.46620/SemanticSymbols.db-shmBinary files differ
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1204.46620/SemanticSymbols.db-walBinary files differ
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs
@@ -6,6 +6,7 @@ using Newtonsoft.Json; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_Core.HttpContextUser; using WIDESEA_Core.Util; @@ -16,14 +17,14 @@ namespace WIDESEA_BasicService.MESOperation { public class FeedbackMesService : IFeedbackMesService public class FeedbackMesService : ServiceBase<Dt_MesReturnRecord, IRepository<Dt_MesReturnRecord>>, IFeedbackMesService { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly HttpClientHelper _httpClientHelper; private readonly IRepository<Dt_OutboundOrder> _outboundOrderRepository; private readonly IBasicService _basicService; public FeedbackMesService(IUnitOfWorkManage unitOfWorkManage, HttpClientHelper httpClientHelper, IRepository<Dt_OutboundOrder> outboundOrderRepository, IBasicService basicService) public FeedbackMesService(IRepository<Dt_MesReturnRecord> BaseDal, IUnitOfWorkManage unitOfWorkManage, HttpClientHelper httpClientHelper, IRepository<Dt_OutboundOrder> outboundOrderRepository, IBasicService basicService) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _httpClientHelper = httpClientHelper; ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielCodeInfoService.cs
@@ -14,13 +14,13 @@ namespace WIDESEA_BasicService { public class MaterielCodeInfoService : ServiceBase<Dt_MaterielCodeInfo, IRepository<Dt_MaterielCodeInfo>>, IMaterielCodeInfoService public class MaterielCodeInfoService : ServiceBase<Dt_MaterialCodeInfo, IRepository<Dt_MaterialCodeInfo>>, IMaterielCodeInfoService { public MaterielCodeInfoService(IRepository<Dt_MaterielCodeInfo> BaseDal) : base(BaseDal) public MaterielCodeInfoService(IRepository<Dt_MaterialCodeInfo> BaseDal) : base(BaseDal) { } public IRepository<Dt_MaterielCodeInfo> Repository => BaseDal; public IRepository<Dt_MaterialCodeInfo> Repository => BaseDal; } } ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_DTO/CalcOut/MaterialCodeReturnDTO.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,66 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO.CalcOut { /// <summary> /// /// </summary> public class MaterialCodeReturnDTO { // ç©æå·ï¼ç©æåï¼ä¾åºåï¼éè´åå·ï¼è§æ ¼ï¼æ°éï¼æ¹æ¬¡ï¼æ¡ç ï¼ååºãæ¥æ /// <summary> /// ç©æç¼å· /// </summary> public string MaterialCode { get; set; } /// <summary> /// ç©æåç§° /// </summary> public string MaterialName { get; set; } /// <summary> /// ä¾åºåç¼å· /// </summary> public string SuplierCode { get; set; } /// <summary> /// éè´åå· /// </summary> public string PruchaseOrderNo { get; set; } /// <summary> /// ç©æè§æ ¼ /// </summary> public string MaterialSpec { get; set; } /// <summary> /// æ¹æ¬¡ /// </summary> public string BatchNo { get; set; } /// <summary> /// ååº /// </summary> public string FactoryArea { get; set; } /// <summary> /// æ¥æ /// </summary> public string Date { get; set; } /// <summary> /// æ¡ç /// </summary> public string Barcode { get; set; } /// <summary> /// æ°é /// </summary> public decimal Quantity { get; set; } } } ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_DTO/CalcOut/ScannedStockDetailDTO.cs
@@ -60,5 +60,10 @@ /// æ¯å¦æå /// </summary> public bool IsUnpacked { get; set; } /// <summary> /// /// </summary> public List<MaterialCodeReturnDTO> MaterialCodes { get; set; } } } ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielCodeInfoService.cs
@@ -9,8 +9,8 @@ namespace WIDESEA_IBasicService { public interface IMaterielCodeInfoService : IService<Dt_MaterielCodeInfo> public interface IMaterielCodeInfoService : IService<Dt_MaterialCodeInfo> { public IRepository<Dt_MaterielCodeInfo> Repository { get; } public IRepository<Dt_MaterialCodeInfo> Repository { get; } } } ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielCodeInfo.cs
@@ -12,8 +12,8 @@ /// <summary> /// ç©æç ä¿¡æ¯ /// </summary> [SugarTable(nameof(Dt_MaterielCodeInfo), "ç©æç ä¿¡æ¯")] public class Dt_MaterielCodeInfo : BaseEntity [SugarTable(nameof(Dt_MaterialCodeInfo), "ç©æç ä¿¡æ¯")] public class Dt_MaterialCodeInfo : BaseEntity { /// <summary> /// ä¸»é® @@ -25,46 +25,85 @@ /// ç©æç¼å· /// </summary> [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "ç©æç¼å·")] public string MaterielCode { get; set; } public string MaterialCode { get; set; } /// <summary> /// ä»åºä¸»é® /// ç©æåç§° /// </summary> [SugarColumn(IsNullable = false, ColumnDescription = "ä»åºç¼å·")] public int WarehouseId { get; set; } [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "ç©æåç§°")] public string? MaterialName { get; set; } /// <summary> /// æ¹æ¬¡å· /// ä¾åºåç¼å· /// </summary> [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "æ¹æ¬¡å·")] public string LotNo { get; set; } /// <summary> /// çäº§æ¥æ /// </summary> [ImporterHeader(Name = "çäº§æ¥æ")] [ExporterHeader(DisplayName = "çäº§æ¥æ")] [SugarColumn(IsNullable = false, IsOnlyIgnoreUpdate = true, ColumnDescription = "çäº§æ¥æ")] public DateTime ProductionDate { get; set; } /// <summary> /// æææ /// </summary> [ImporterHeader(Name = "æææ")] [ExporterHeader(DisplayName = "æææ")] [SugarColumn(IsNullable = false, IsOnlyIgnoreUpdate = true, ColumnDescription = "æææ")] public DateTime EffectiveDate { get; set; } [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "ä¾åºåç¼å·")] public string? SuplierCode { get; set; } /// <summary> /// éè´åå· /// </summary> [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "éè´åå·")] public string PurchaseOrderNo { get; set; } [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "éè´åå·")] public string? PruchaseOrderNo { get; set; } /// <summary> /// æ°é /// ç©æè§æ ¼ /// </summary> [SugarColumn(IsNullable = false, ColumnDescription = "æ°é")] public float Quantity { get; set; } [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "ç©æè§æ ¼")] public string? MaterialSpec { get; set; } /// <summary> /// æ¹æ¬¡ /// </summary> [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "æ¹æ¬¡")] public string? BatchNo { get; set; } /// <summary> /// ååº /// </summary> [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "ååº")] public string? FactoryArea { get; set; } /// <summary> /// æ¥æ /// </summary> [SugarColumn(IsNullable = false, ColumnDescription = "ç©æç¼å·")] public string Date { get; set; } /// <summary> /// æ°æ¡ç /// </summary> [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "æ°æ¡ç ")] public string NewBarcode { get; set; } /// <summary> /// åæ¡ç /// </summary> [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "åæ¡ç ")] public string OldBarcode { get; set; } /// <summary> /// åæ°é /// </summary> [SugarColumn(IsNullable = false, ColumnDescription = "åæ°é")] public decimal OriginalQuantity { get; set; } /// <summary> /// æ°æ°é /// </summary> [SugarColumn(IsNullable = false, ColumnDescription = "æ°æ°é")] public decimal AfterQuantity { get; set; } /// <summary> /// åä½ /// </summary> [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "åä½")] public string Unit { get; set; } /// <summary> /// 夿³¨ /// </summary> [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "夿³¨")] public string? Remark { get; set; } } } ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
@@ -1,4 +1,5 @@ using Newtonsoft.Json; using AutoMapper; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using SqlSugar; using WIDESEA_Common.LocationEnum; @@ -21,7 +22,7 @@ { public partial class OutboundService : IOutboundService { private readonly IMapper _mapper; public IUnitOfWorkManage _unitOfWorkManage { get; } public IOutboundOrderDetailService OutboundOrderDetailService { get; } @@ -42,9 +43,11 @@ private readonly IRepository<Dt_LocationInfo> _locationInfoRepository; private readonly IRepository<Dt_StockQuantityChangeRecord> _stockChangeRepository; private readonly IRepository<Dt_StockInfoDetail_Hty> _stockDetailHistoryRepository; private readonly IFeedbackMesService _feedbackMesService; public OutboundService(IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> detailRepository, IRepository<Dt_OutboundOrder> outboundRepository, IRepository<Dt_OutStockLockInfo> outboundLockInfoRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_StockQuantityChangeRecord> stockChangeRepository, IRepository<Dt_StockInfoDetail_Hty> stockDetailHistoryRepository, IBasicService basicService, IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService) public OutboundService(IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> detailRepository, IRepository<Dt_OutboundOrder> outboundRepository, IRepository<Dt_OutStockLockInfo> outboundLockInfoRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_StockQuantityChangeRecord> stockChangeRepository, IRepository<Dt_StockInfoDetail_Hty> stockDetailHistoryRepository, IBasicService basicService, IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, IFeedbackMesService feedbackMesService) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; Db = _unitOfWorkManage.GetDbClient(); OutboundOrderDetailService = outboundOrderDetailService; @@ -59,8 +62,10 @@ _stockChangeRepository = stockChangeRepository; _stockDetailHistoryRepository = stockDetailHistoryRepository; _basicService = basicService; _feedbackMesService = feedbackMesService; } #region åºåºåé /// <summary> /// 忣åºåºæä½ /// </summary> @@ -783,6 +788,7 @@ return false; } } #endregion /// <summary> @@ -888,7 +894,7 @@ // 8. 夿æ¯å¦éè¦æå ï¼å½åºåºæ°éå°äºåºåæ°éæ¶éè¦æå ï¼ bool isUnpacked = actualOutboundQuantity < stockDetail.StockQuantity; string newBarcode = string.Empty; List<MaterialCodeReturnDTO> returnDTOs = new List<MaterialCodeReturnDTO>(); // 9. å¼å¯äºå¡ _unitOfWorkManage.BeginTran(); @@ -899,7 +905,7 @@ // æ ¹æ®æ¯å¦æå æ§è¡ä¸åçæä½ if (isUnpacked) { newBarcode = PerformUnpackOperation(stockDetail, stockInfo, actualOutboundQuantity, request, beforeQuantity, lockInfo.TaskNum.GetValueOrDefault()); returnDTOs = PerformUnpackOperation(stockDetail, stockInfo, actualOutboundQuantity, request, beforeQuantity, lockInfo.TaskNum.GetValueOrDefault()); } else { @@ -993,14 +999,14 @@ BeforeQuantity = beforeQuantity, AfterQuantity = isUnpacked ? actualOutboundQuantity : 0, ChangeQuantity = -actualOutboundQuantity, IsUnpacked = isUnpacked IsUnpacked = isUnpacked, MaterialCodes = returnDTOs }; response.Success = true; response.Message = isUnpacked ? $"æå åºåºå®æï¼å·²çææ°æ¡ç ï¼{newBarcode}" : "åºåºå®æ"; response.Message = "åºåºå®æ"; response.ScannedDetail = scannedDetail; response.UpdatedDetails = updateDetails; response.NewBarcode = newBarcode; // æ£æ¥åºåºåæ¯å¦å®æ if (CheckOutboundOrderCompleted(request.OrderNo)) @@ -1074,10 +1080,16 @@ /// <param name="beforeQuantity"></param> /// <param name="taskNum"></param> /// <returns></returns> private string PerformUnpackOperation(Dt_StockInfoDetail stockDetail, Dt_StockInfo stockInfo, private List<MaterialCodeReturnDTO> PerformUnpackOperation(Dt_StockInfoDetail stockDetail, Dt_StockInfo stockInfo, decimal actualOutboundQuantity, OutboundCompleteRequestDTO request, decimal beforeQuantity, int taskNum) { string newBarcode = GenerateNewBarcode(); string remark = $"æå è®°å½ï¼åæ¡ç ï¼{request.Barcode}ï¼åæ°éï¼{stockDetail.StockQuantity}ï¼åºåºæ¡ç ï¼{newBarcode}ï¼ åºåºæ°éï¼{actualOutboundQuantity}ï¼ååºæ¡ç ï¼{request.Barcode}ï¼ååºæ°éï¼{stockDetail.StockQuantity - actualOutboundQuantity},æä½è ï¼{request.Operator}"; List<Dt_MaterialCodeInfo> materialCodeInfos = CreateMaterialCodeInfos(stockDetail, newBarcode, actualOutboundQuantity, remark); List<MaterialCodeReturnDTO> returnDTOs = _mapper.Map<List<MaterialCodeReturnDTO>>(materialCodeInfos); // ä¿ååå§åºåæç»å°åå²è®°å½ Dt_StockInfoDetail_Hty originalHistoryRecord = new Dt_StockInfoDetail_Hty @@ -1138,7 +1150,7 @@ }; _stockChangeRepository.AddData(unpackChangeRecord); return newBarcode; return returnDTOs; } /// <summary> @@ -1214,6 +1226,64 @@ } /// <summary> /// /// </summary> /// <param name="stockDetail"></param> /// <param name="newBarcode"></param> /// <param name="splitQuantity"></param> /// <param name="afterQuantity"></param> /// <param name="remark"></param> /// <returns></returns> private List<Dt_MaterialCodeInfo> CreateMaterialCodeInfos(Dt_StockInfoDetail stockDetail, string newBarcode, decimal splitQuantity, string remark) { List<Dt_MaterialCodeInfo> materialCodeInfos = new List<Dt_MaterialCodeInfo>(); Dt_MaterielInfo? materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == stockDetail.MaterielCode); Dt_MaterialCodeInfo outMaterialCodeInfo = new Dt_MaterialCodeInfo() { AfterQuantity = splitQuantity, BatchNo = stockDetail.BatchNo, FactoryArea = stockDetail.FactoryArea, MaterialName = materielInfo?.MaterielName ?? stockDetail.MaterielName, MaterialSpec = materielInfo?.MaterielSpec ?? "", MaterialCode = stockDetail.MaterielCode, NewBarcode = newBarcode, OldBarcode = stockDetail.Barcode, OriginalQuantity = stockDetail.StockQuantity, PruchaseOrderNo = stockDetail.OrderNo, SuplierCode = stockDetail.SupplyCode, Unit = stockDetail.Unit, Date = DateTime.Now.ToString("yyyy-MM-dd"), Remark = remark }; materialCodeInfos.Add(outMaterialCodeInfo); Dt_MaterialCodeInfo returnMaterialCodeInfo = new Dt_MaterialCodeInfo() { AfterQuantity = stockDetail.StockQuantity - splitQuantity, BatchNo = stockDetail.BatchNo, FactoryArea = stockDetail.FactoryArea, MaterialName = materielInfo?.MaterielName ?? stockDetail.MaterielName, MaterialSpec = materielInfo?.MaterielSpec ?? "", MaterialCode = stockDetail.MaterielCode, NewBarcode = stockDetail.Barcode, OldBarcode = stockDetail.Barcode, OriginalQuantity = stockDetail.StockQuantity, PruchaseOrderNo = stockDetail.OrderNo, SuplierCode = stockDetail.SupplyCode, Unit = stockDetail.Unit, Date = DateTime.Now.ToString("yyyy-MM-dd"), Remark = remark }; materialCodeInfos.Add(returnMaterialCodeInfo); _basicService.MaterielCodeInfoService.Repository.AddData(materialCodeInfos); return materialCodeInfos; } /// <summary> /// æ´æ°è¯¥æçè¯¥ç©æçææéå®è®°å½ç累计已åºåºæ°é /// </summary> /// <param name="stockId">åºåID</param> ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielCodeInfoController.cs
@@ -8,7 +8,7 @@ { [Route("api/MaterielCodeInfo")] [ApiController] public class MaterielCodeInfoController : ApiBaseController<IMaterielCodeInfoService, Dt_MaterielCodeInfo> public class MaterielCodeInfoController : ApiBaseController<IMaterielCodeInfoService, Dt_MaterialCodeInfo> { public MaterielCodeInfoController(IMaterielCodeInfoService service) : base(service) { ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs
@@ -1,14 +1,15 @@ using Autofac.Builder; using AutoMapper; using System; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autofac.Builder; using AutoMapper; using WIDESEA_Common.OrderEnum; using WIDESEA_Core.Helper; using WIDESEA_Core.HttpContextUser; using WIDESEA_DTO; using WIDESEA_DTO.CalcOut; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.Outbound; using WIDESEA_DTO.System; @@ -38,6 +39,8 @@ CreateMap<Dt_Task, Dt_Task_Hty>() .ForMember(dest => dest.SourceId, opt => opt.Ignore()) // æå¨å¡«å ï¼å¿½ç¥æ å° .ForMember(dest => dest.OperateType, opt => opt.Ignore()); // æå¨å¡«å ï¼å¿½ç¥æ å° CreateMap<Dt_MaterialCodeInfo, MaterialCodeReturnDTO>().ForMember(a => a.Quantity, b => b.MapFrom(c => c.AfterQuantity)).ForMember(a => a.Barcode, b => b.MapFrom(c => c.NewBarcode)); } } }