dengjunjie
2025-10-23 4cca607ddce9577864b8a5c9c8edf7c83915b787
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs
@@ -53,10 +53,10 @@
            _supplyTaskService = supplyTaskService;
        }
        /// <summary>
        /// pda获取出库单
        /// pda查询出库单信息
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
@@ -87,14 +87,28 @@
            }
            return content;
        }
        /// <summary>
        /// pda查看入库详情表
        /// </summary>
        /// <param name="pageNo"></param>
        /// <param name="orderNo"></param>
        /// <returns></returns>
        public WebResponseContent GetCabinOrderDetail(int pageNo, string orderNo)
        {
            WebResponseContent content = new WebResponseContent();
            Dt_CabinOrder cabinOrder = Db.Queryable<Dt_CabinOrder>().Includes(x => x.Details).First(x => x.Order_no == orderNo);
            List<Dt_CabinOrderDetail> cabinOrderDetails = cabinOrder.Details.Where(x => x.Reservoirarea == pageNo.ToString()).ToList();
            List<Dt_CabinOrderDetail> cabinOrderDetails = cabinOrder.Details.Where(x => x.Status == 2).ToList();
            content.OK(data: cabinOrderDetails);
            return content;
        }
        /// <summary>
        /// Pad入库完成
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent FeedbackIn([FromBody] SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
@@ -107,7 +121,8 @@
                var warehouseCode = saveModel.MainData["warehouseCode"].ToString();
                Dt_CabinOrder cabinOrder = BaseDal.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == orderNo && x.Warehouse_no == warehouseCode).Includes(x => x.Details).First();
                if (cabinOrder == null) return WebResponseContent.Instance.Error($"入库单已完成");
                Dt_CabinOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == batchNo && x.Reservoirarea == warehouseCode).First();
                //Dt_CabinOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == batchNo && x.Reservoirarea == warehouseCode).First();
                Dt_CabinOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == batchNo && x.Status == 2).First();
                if (cabinOrderDetail == null) return WebResponseContent.Instance.Error($"入库单明细已完成");
                Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == cabinOrderDetail.Goods_no);
                if (materielInfo == null) return WebResponseContent.Instance.Error($"请维护物料编号【{cabinOrderDetail.Goods_no}】的物料信息");
@@ -124,7 +139,34 @@
                if (cabinOrderDetail.Order_Inqty == cabinOrderDetail.Order_qty)
                {
                    cabinOrderDetail.OrderDetailStatus = "已完成";
                    _cabinOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.自动完成);
                    //_cabinOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.自动完成);
                    Dt_CabinOrderDetail_Hty hty = new Dt_CabinOrderDetail_Hty
                    {
                        Id = cabinOrderDetail.OrderId,
                        Reservoirarea = cabinOrderDetail.Reservoirarea,
                        Goods_no = cabinOrderDetail.Goods_no,
                        Order_qty = cabinOrderDetail.Order_qty,
                        Order_Inqty = cabinOrderDetail.Order_Inqty,
                        Batch_num = cabinOrderDetail.Batch_num,
                        Exp_date = cabinOrderDetail.Exp_date,
                        OrderDetailStatus = cabinOrderDetail.OrderDetailStatus,
                        Status = cabinOrderDetail.Status,
                        Creater = cabinOrderDetail.Creater,
                        CreateDate = cabinOrderDetail.CreateDate,
                        Modifier = App.User.UserName,
                        ModifyDate = DateTime.Now
                    };
                    var i = BaseDal.Db.Insertable(hty).ExecuteCommand();
                    if (i<0)
                    {
                        _unitOfWorkManage.RollbackTran();
                    }
                    var v = BaseDal.Db.Deleteable<Dt_CabinOrderDetail>(cabinOrderDetail).ExecuteCommand();
                    if (v < 0)
                    {
                        _unitOfWorkManage.RollbackTran();
                    }
                }
                else
                {
@@ -242,6 +284,8 @@
        }
        /// <summary>
        /// èŽ·å–ä¸Šæ¸¸ç³»ç»Ÿçš„å…¥åº“å•
        /// </summary>
@@ -254,14 +298,16 @@
            {
                // è¯·æ±‚地址
                var url = "http://121.37.118.63:80/GYZ2/95fck/inOrder";
                //if (string.IsNullOrEmpty(SearchDate)) SearchDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                //var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363009261";
                if (string.IsNullOrEmpty(SearchDate)) SearchDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                //// è¯·æ±‚参数
                var requestData = new
                {
                    //searchDate = SearchDate
                    searchDate = "2022-10-10 20:45:16"  // æ­£ç¡®çš„æ ¼å¼
                    searchDate = SearchDate
                    //searchDate = "2022-10-10 20:45:16"  // æ­£ç¡®çš„æ ¼å¼
                };
                //SearchDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
                SearchDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
                // å‘起请求
                var result = HttpHelper.Post(url, requestData.ToJsonString());
@@ -303,127 +349,88 @@
                    foreach (var order in newOrders)
                    {
                        if (order.order_type == "1") //正常入库
                        {
                        }
                        else
                        {
                            //创建出库单
                        }
                        #region åˆ›å»ºä¸€ä¸ªå…¥åº“单方法
                        //排除特殊药品
                        bool skipOrder = false;//标记是否跳过该入库单
                        var entityOrder = new Dt_CabinOrder
                        if (order.warehouse_no != "001" && (order.warehouse_no == "010" || order.warehouse_no == "003" || order.warehouse_no == "017"))//特殊药品库房号进行下面操作
                        {
                            Order_no = order.order_no,
                            //入库单类型
                            Order_type = order.order_type,
                            Supplier_no = order.supplier_no,
                            Account_tiem = order.account_time,
                            OdrderStatus = "新建",
                            Supplier_name = order.supplier_name,
                            Warehouse_no = order.warehouse_no,
                            Details = new List<Dt_CabinOrderDetail>()
                            //Details = order.details.Select(d => new Dt_CabinOrderDetail
                            //{
                            //    //OrderId è¦æ‹¿åˆ°å…¥åº“单表中的id,如何拿不到就将这个字段改了,改成入库单号
                            //    // SqlSugar InsertNav工作原理先插入主表 (Dt_CabinOrder)//获取生成的主键ID//自动设置子表的关联字段 (OrderId)//再插入(Dt_CabinOrderDetail)
                            //    Goods_no = d.goods_no,
                            //    Order_qty = d.order_qty,
                            //    Batch_num = d.batch_num,
                            //    Exp_date = d.exp_date,
                            //    OrderDetailStatus = "新建",
                            //    Status = order.warehouse_no == "001" ? 0 : 2, //如果是001房那么就是未同步状态,如果不是001房那么就是无需同步状态
                            //}).ToList()
                        };
                        foreach (var item in order.details)
                        {
                            // å°†ä¸Šæ¸¸å…¥åº“数量转为正数
                            item.order_qty = Math.Abs(item.order_qty);
                            #region æ ¹æ®ç‰©æ–™ç¼–码查询物料信息
                            Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == item.goods_no);
                            //如果物料信息不存在,跳过整个入库单
                            if (materielInfo == null)
                            //创建入库单主表从表
                            var entityOrder = new Dt_CabinOrder
                            {
                                skipOrder = true;
                                Console.WriteLine($"跳过入库单 {order.order_no},原因:未找到商品 [{item.goods_no}] çš„物料信息。");
                                break;
                            }
                            //  è‹¥ç‰©æ–™ä¸å­˜åœ¨æˆ– MaterielSourceType ä¸ºç©ºï¼Œåˆ™è·³è¿‡æ•´ä¸ªå…¥åº“单
                            if (materielInfo == null || !Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType))
                            {
                                skipOrder = true;
                                break;
                            }
                            //Dt_MedicineGoods materielInfo = BaseDal.Db.Queryable<Dt_MedicineGoods>().Where(x => x.Goods_no == item.goods_no).First();
                            ///根据物料信息大小件属性区分是否入立库 //大件入平库
                            if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)
                            {
                                Dt_CabinOrderDetail orderDetail = new Dt_CabinOrderDetail()
                                Order_no = order.order_no,
                                //入库单类型
                                Order_type = order.order_type,
                                Supplier_no = order.supplier_no,
                                Account_tiem = order.account_time,
                                OdrderStatus = "新建",
                                Supplier_name = order.supplier_name,
                                Warehouse_no = order.warehouse_no,
                                Details = order.details.Select(d => new Dt_CabinOrderDetail
                                {
                                    Reservoirarea = order.warehouse_no,
                                    Goods_no = item.goods_no,
                                    Order_qty = item.order_qty,
                                    Batch_num = item.batch_num,
                                    Exp_date = item.exp_date,
                                    //OrderId è¦æ‹¿åˆ°å…¥åº“单表中的id,如何拿不到就将这个字段改了,改成入库单号
                                    // SqlSugar InsertNav工作原理先插入主表 (Dt_CabinOrder)//获取生成的主键ID//自动设置子表的关联字段 (OrderId)//再插入(Dt_CabinOrderDetail)
                                    Goods_no = d.goods_no,
                                    Order_qty = d.order_qty,
                                    Batch_num = d.batch_num,
                                    Exp_date = d.exp_date,
                                    OrderDetailStatus = "新建",
                                    Status = 2
                                };
                                entityOrder.Details.Add(orderDetail);
                            }
                            else
                                    Status = 2, //如果是001房那么就是未同步状态,如果不是001房那么就是无需同步状态
                                }).ToList()
                            };
                            _CabinOrders.Add(entityOrder);
                        }
                        else
                        {
                            //区分平库立库
                            var entityOrder = new Dt_CabinOrder
                            {
                                Dt_CabinOrderDetail orderDetail = null;
                                var ys = item.order_qty % materielInfo.BoxQty; //不能整除箱规的散件数
                                var xs = item.order_qty / materielInfo.BoxQty;//整箱数量
                                #region ç”Ÿæˆç«‹åº“入库单
                                #region åˆ¤æ–­æ˜¯å¦æœ‰æ•£ä»¶
                                if (ys > 0)
                                Order_no = order.order_no,
                                //入库单类型
                                Order_type = order.order_type,
                                Supplier_no = order.supplier_no,
                                Account_tiem = order.account_time,
                                OdrderStatus = "新建",
                                Supplier_name = order.supplier_name,
                                Warehouse_no = order.warehouse_no,
                                Details = new List<Dt_CabinOrderDetail>()
                            };
                            foreach (var item in order.details)
                            {
                                // å°†ä¸Šæ¸¸å…¥åº“数量转为正数
                                item.order_qty = Math.Abs(item.order_qty);
                                #region æ ¹æ®ç‰©æ–™ç¼–码查询物料信息
                                Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == item.goods_no);
                                //如果物料信息不存在,跳过整个入库单
                                if (materielInfo == null)
                                {
                                    orderDetail = new Dt_CabinOrderDetail()
                                    skipOrder = true;
                                    Console.WriteLine($"跳过入库单 {order.order_no},原因:未找到商品 [{item.goods_no}] çš„物料信息。");
                                    break;
                                }
                                //  è‹¥ç‰©æ–™ä¸å­˜åœ¨æˆ– MaterielSourceType ä¸ºç©ºï¼Œåˆ™è·³è¿‡æ•´ä¸ªå…¥åº“单
                                if (materielInfo == null || !Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType))
                                {
                                    skipOrder = true;
                                    break;
                                }
                                //Dt_MedicineGoods materielInfo = BaseDal.Db.Queryable<Dt_MedicineGoods>().Where(x => x.Goods_no == item.goods_no).First();
                                ///根据物料信息大小件属性区分是否入立库 //大件入平库
                                if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)//如果物料是大件
                                {
                                    Dt_CabinOrderDetail orderDetail = new Dt_CabinOrderDetail()
                                    {
                                        Reservoirarea = order.warehouse_no,
                                        Goods_no = item.goods_no,
                                        Order_qty = ys,
                                        Batch_num = item.batch_num,
                                        Exp_date = item.exp_date,
                                        OrderDetailStatus = "新建",
                                        Status = 0
                                    };
                                    materielInfo.Business_qty += ys;
                                }
                                #endregion
                                #region åˆ¤æ–­ç«‹åº“库存是否大于立库最低库存数
                                while (materielInfo.Business_qty < materielInfo.MinQty && xs > 0)
                                {
                                    xs--;
                                    if (orderDetail == null)
                                    {
                                        orderDetail = new Dt_CabinOrderDetail()
                                        {
                                            Reservoirarea = order.warehouse_no,
                                            Goods_no = item.goods_no,
                                            Order_qty = materielInfo.BoxQty,
                                            Batch_num = item.batch_num,
                                            Exp_date = item.exp_date,
                                            OrderDetailStatus = "新建",
                                            Status = 0
                                        };
                                        materielInfo.Business_qty += materielInfo.BoxQty;
                                    }
                                    else
                                    {
                                        orderDetail.Order_qty += materielInfo.BoxQty;
                                        materielInfo.Business_qty += materielInfo.BoxQty;
                                    }
                                }
                                #endregion
                                if (orderDetail != null) entityOrder.Details.Add(orderDetail);
                                #endregion
                                #region å‰©ä½™æ•´ä»¶å…¥å¹³åº“
                                if (xs > 0)
                                {
                                    orderDetail = new Dt_CabinOrderDetail()
                                    {
                                        Reservoirarea = order.warehouse_no,
                                        Goods_no = item.goods_no,
                                        Order_qty = materielInfo.BoxQty * xs,
                                        Order_qty = item.order_qty,
                                        Batch_num = item.batch_num,
                                        Exp_date = item.exp_date,
                                        OrderDetailStatus = "新建",
@@ -431,25 +438,98 @@
                                    };
                                    entityOrder.Details.Add(orderDetail);
                                }
                                else
                                {
                                    Dt_CabinOrderDetail orderDetail = null;
                                    var ys = item.order_qty % materielInfo.BoxQty; //不能整除箱规的散件数
                                    //var xs = item.order_qty / materielInfo.BoxQty;//整箱数量
                                    var xs = (int)(item.order_qty / materielInfo.BoxQty);//保留整数
                                    #region ç”Ÿæˆç«‹åº“入库单
                                    #region åˆ¤æ–­æ˜¯å¦æœ‰æ•£ä»¶
                                    if (ys > 0)
                                    {
                                        orderDetail = new Dt_CabinOrderDetail()
                                        {
                                            Reservoirarea = order.warehouse_no,
                                            Goods_no = item.goods_no,
                                            Order_qty = ys,
                                            Batch_num = item.batch_num,
                                            Exp_date = item.exp_date,
                                            OrderDetailStatus = "新建",
                                            Status = 0
                                        };
                                        materielInfo.Business_qty += ys;
                                    }
                                    #endregion
                                    #region åˆ¤æ–­ç«‹åº“库存是否大于立库最低库存数
                                    while (materielInfo.Business_qty < materielInfo.MinQty && xs > 0) //当业务数量和整箱数都大于0的时候才会停止循环
                                    {
                                        xs--;
                                        if (orderDetail == null)
                                        {
                                            orderDetail = new Dt_CabinOrderDetail()
                                            {
                                                Reservoirarea = order.warehouse_no,
                                                Goods_no = item.goods_no,
                                                Order_qty = materielInfo.BoxQty,
                                                Batch_num = item.batch_num,
                                                Exp_date = item.exp_date,
                                                OrderDetailStatus = "新建",
                                                Status = 0
                                            };
                                            materielInfo.Business_qty += materielInfo.BoxQty;
                                        }
                                        else
                                        {
                                            orderDetail.Order_qty += materielInfo.BoxQty;
                                            materielInfo.Business_qty += materielInfo.BoxQty;
                                        }
                                    }
                                    if (orderDetail != null) entityOrder.Details.Add(orderDetail);
                                    #endregion
                                    #endregion
                                    #region å‰©ä½™æ•´ä»¶å…¥å¹³åº“
                                    if (xs > 0)
                                    {
                                        orderDetail = new Dt_CabinOrderDetail()
                                        {
                                            Reservoirarea = order.warehouse_no,
                                            Goods_no = item.goods_no,
                                            Order_qty = materielInfo.BoxQty * xs,
                                            Batch_num = item.batch_num,
                                            Exp_date = item.exp_date,
                                            OrderDetailStatus = "新建",
                                            Status = 2
                                        };
                                        entityOrder.Details.Add(orderDetail);
                                    }
                                    #endregion
                                }
                                _basicService.MaterielInfoService.Repository.UpdateData(materielInfo);
                                //_medicineGoodsServices.Db.Updateable(materielInfo).ExecuteCommand();
                                #endregion
                            }
                            _basicService.MaterielInfoService.Repository.UpdateData(materielInfo);
                            //_medicineGoodsServices.Db.Updateable(materielInfo).ExecuteCommand();
                            #endregion
                            // â—如果跳过该单,则直接continue,不保存
                            if (skipOrder)
                            {
                                Console.WriteLine($"跳过入库单 {order.order_no},因为存在未定义物料属性的商品。");
                                continue;
                            }
                            _CabinOrders.Add(entityOrder);
                            orderNos.Add(order.order_no);
                        }
                        // â—如果跳过该单,则直接continue,不保存
                        if (skipOrder)
                        {
                            Console.WriteLine($"跳过入库单 {order.order_no},因为存在未定义物料属性的商品。");
                            continue;
                        }
                        _CabinOrders.Add(entityOrder);
                        orderNos.Add(order.order_no);
                    };
                    BaseDal.Db.InsertNav(_CabinOrders).Include(x => x.Details).ExecuteCommand();
                    //在下发给wcs 
                    //var reslut=  EdiIn(); //发给下游
                     //EdiIn(); //发给下游
                    //如果这个方法成功了,那么就调用CompleteOrder接口,然后改变
                    Db.Ado.CommitTran();
                    return responseContent.OK("同步入库单成功");
@@ -698,8 +778,11 @@
                // 3. å†è¿‡æ»¤æŽ‰ä¸ç¬¦åˆæ¡ä»¶çš„æ˜Žç»†ï¼ˆåªä¿ç•™ Status=0)
                foreach (var order in orders)
                {
                    Console.WriteLine($"订单 {order.Order_no} åŽŸæ˜Žç»†æ•°ï¼š{order.Details.Count}");
                    order.Details = order.Details.Where(d => d.Status == 0).ToList();
                    Console.WriteLine($"订单 {order.Order_no} è¿‡æ»¤åŽæ˜Žç»†æ•°ï¼š{order.Details.Count}");
                }
                if (orders == null || !orders.Any())
                {
@@ -707,18 +790,13 @@
                    return WebResponseContent.Instance.Error("没有符合条件的订单需要推送");
                }
                // 4. éåŽ†è®¢å•ï¼Œç»„è£… DTO å¹¶æŽ¨é€
                foreach (var order in orders)
                {
                    string materialCode = "YY";//默认值
                    //获取当前订单的第一个明细项
                    var firstDetail = order.Details.FirstOrDefault();
                    if (firstDetail?.MedicineGoods != null && !string.IsNullOrEmpty(firstDetail.MedicineGoods.MaterielErpType))
                    {
                        //如果条件满足,将物料代码设置为第一个明细项对应的药品物料代码
                        materialCode = firstDetail.MedicineGoods.MaterielErpType;
                    }
                    // ä»Žç¬¬ä¸€ä¸ªæœ‰ MedicineGoods çš„æ˜Žç»†ä¸­å–出 MaterielErpType
                    string materialCode = order.Details
                        .Select(d => d.MedicineGoods?.MaterielErpType)
                        .FirstOrDefault(x => !string.IsNullOrEmpty(x)) ?? "YY"; // é»˜è®¤å€¼YY
                    var ediDto = new ToediInInfo
                    {
@@ -753,22 +831,11 @@
                            manufacturer = d.MedicineGoods?.Factory,
                            //房号
                            libraryNo = order.Warehouse_no,
                            //盘盈入库
                            //stocktakingDetails = new List<ToediInStock>()
                            //stocktakingDetails = new List<ToediInStock>()
                            //{
                            //    new ToediInStock
                            //    {
                            //         //料箱号
                            //        palletCode = "PDA001",
                            //        //数量
                            //        quantity = d.Order_qty.ToString()
                            //    }
                            // }
                        }).ToList()
                    };
                    var url = "http://172.16.1.2:9357/file-admin/api/in/ediIn";
                    //var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363019549";
                    var result = HttpHelper.Post(url, ediDto.ToJsonString());
                    var resp = JsonConvert.DeserializeObject<TowcsResponse<object>>(result);
@@ -780,9 +847,9 @@
                           .Where(o => o.Id == order.Id)
                           .ExecuteCommand();
                        // æ›´æ–°æ˜Žç»†çŠ¶æ€ä¸ºå·²åŒæ­¥
                        // æ›´æ–°æ˜Žç»†çŠ¶æ€ä¸ºå·²åŒæ­¥  //这里要是将新建--》开始状态,在后端接口返回我们的时候在返回已完成
                        BaseDal.Db.Updateable<Dt_CabinOrderDetail>()
                          .SetColumns(d => new Dt_CabinOrderDetail { Status = 1, OrderDetailStatus = "已完成" })
                          .SetColumns(d => new Dt_CabinOrderDetail { Status = 1, OrderDetailStatus = "开始" })
                          .Where(d => d.OrderId == order.Id && d.Status == 0)
                          .ExecuteCommand();