1
dengjunjie
2025-06-19 fbc6fae6c793220d0b67ac603ce9bbf22837de79
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs
@@ -1,22 +1,26 @@
using AutoMapper;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Utilities;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_IStockService;
using WIDESEA_ITaskInfoRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundService
@@ -25,30 +29,43 @@
    {
        private readonly IMapper _mapper;
        private readonly IMaterielInfoService _materielInfoService;
        private readonly IStockInfoService  _stockService;
        private readonly IStockInfoService _stockService;
        private readonly IStockInfoDetailService _stockDetailService;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IBasicRepository _basicRepository;
        private readonly ITaskRepository _taskRepository;
        private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository;
        private readonly SqlSugarClient _dbBase;
        public IOutboundOrderRepository Repository => BaseDal;
        public OutboundOrderService(IOutboundOrderRepository BaseDal, IMapper mapper, IMaterielInfoService materielInfoService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService) : base(BaseDal)
        public OutboundOrderService(IOutboundOrderRepository BaseDal, IBasicRepository basicRepository, IMapper mapper, IMaterielInfoService materielInfoService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService, IUnitOfWorkManage unitOfWorkManage, ITaskRepository taskRepository, IOutboundOrderDetailRepository outboundOrderDetailRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _materielInfoService = materielInfoService;
            _stockDetailService = stockDetailService;
             _stockService = stockInfoService;
            _basicRepository = basicRepository;
            _stockService = stockInfoService;
            _dbBase = unitOfWorkManage.GetDbClient();
            _taskRepository = taskRepository;
            _outboundOrderDetailRepository = outboundOrderDetailRepository;
        }
        public override WebResponseContent AddData(SaveModel saveModel)
        {
            OutboundOrderAddDTO outboundOrder = saveModel.MainData.DicToModel<OutboundOrderAddDTO>();
            List<OutboundOrderDetailAddDTO> orderDetailAddDTOs = saveModel.DetailData.DicToIEnumerable<OutboundOrderDetailAddDTO>();
            outboundOrder.Details = orderDetailAddDTOs.GroupBy(x => x.MaterielCode).Select(x => new OutboundOrderDetailAddDTO
            {
                BatchNo = x.FirstOrDefault()?.BatchNo ?? "",
                MaterielCode = x.Key,
                OrderQuantity = x.Sum(x => x.OrderQuantity),
                Remark = x.FirstOrDefault(v => !string.IsNullOrEmpty(v.Remark))?.Remark ?? ""
            }).ToList();
            #region æ ¹æ®ç‰©æ–™ç¼–号合并出库数量
            //outboundOrder.Details = orderDetailAddDTOs.GroupBy(x => x.MaterielCode).Select(x => new OutboundOrderDetailAddDTO
            //{
            //    BatchNo = x.FirstOrDefault()?.BatchNo ?? "",
            //    MaterielCode = x.Key,
            //    OrderQuantity = x.Sum(x => x.OrderQuantity),
            //    Remark = x.FirstOrDefault(v => !string.IsNullOrEmpty(v.Remark))?.Remark ?? ""
            //}).ToList();
            #endregion
            outboundOrder.Details = new List<OutboundOrderDetailAddDTO>();
            outboundOrder.Details.AddRange(orderDetailAddDTOs);
            return AddOutboundOrder(outboundOrder);
        }
@@ -60,7 +77,7 @@
                return WebResponseContent.Instance.Error("物料重复");
            }
            outboundOrderDetails = outboundOrderDetails.Where(x => (x.Id > 0 && x.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) || x.Id == 0).ToList();
            List<Dictionary<string, object>> dics = new List<Dictionary<string, object>>();
            JsonSerializerSettings settings = new JsonSerializerSettings();
            settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
@@ -75,6 +92,31 @@
            return base.UpdateData(saveModel);
        }
        public override WebResponseContent DeleteData(object[] keys)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                List<Dt_OutboundOrder> _OutboundOrders = BaseDal.Db.Queryable<Dt_OutboundOrder>().Includes(x => x.Details).Where(x => keys.Contains(x.Id)).ToList();
                if (_OutboundOrders.Count < 1) throw new Exception("未找到出库单");
                List<Dt_OutboundOrderDetail> orderDetails = new List<Dt_OutboundOrderDetail>();
                foreach (var item in _OutboundOrders)
                {
                    if (item.Details.Where(x => x.LockQuantity != x.OverOutQuantity).Any())
                        throw new Exception("存在未出库完成托盘");
                    orderDetails.AddRange(item.Details);
                    item.Details = null;
                }
                BaseDal.DeleteAndMoveIntoHty(_OutboundOrders, OperateType.人工删除);
                content.Status = _outboundOrderDetailRepository.DeleteAndMoveIntoHty(orderDetails, OperateType.人工删除);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        public WebResponseContent AddOutboundOrder(OutboundOrderAddDTO orderAddDTO)
        {
            WebResponseContent content = new();
@@ -86,6 +128,7 @@
                #endregion
                Dt_OutboundOrder outboundOrder = _mapper.Map<Dt_OutboundOrder>(orderAddDTO);
                outboundOrder.OrderNo = DateTime.Now.ToString("yyMMddHHmmss");
                outboundOrder.OrderStatus = InboundStatusEnum.未开始.ObjToInt();
                bool a = BaseDal.Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand();
                content = WebResponseContent.Instance.OK();
@@ -126,20 +169,6 @@
                return (false, "单据已存在", outboundOrderAddDTO);
            }
            return (true, "成功", outboundOrderAddDTO);
        }
        public WebResponseContent ReleaseOutOrder(int orderId)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
            }
            catch (Exception ex)
            {
            }
            return content;
        }
    }
}