dengjunjie
2025-10-23 56827df8730c172c6c654fb78fed073ef8d694cb
优化入库单处理
已修改12个文件
已添加1个文件
881 ■■■■■ 文件已修改
新建文件夹/PDA/pages/stash/inboundorder.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/PDA/pages/stash/raworderboxing.vue 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/HierarchyCache.v1.txt 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_ISquareCabinServices/ICabinOrderServices.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_Model/Models/SquareCabin/Dt_CabinOrderDetail_Hty .cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_Model/Models/SquareCabin/Dt_CabinOrder_Hty.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs 581 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WMS/src/views/inbound/inboundOrder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WMS/src/views/inbound/inboundOrderDetail_Hty.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/医药项目系统WMS (上游).xlsx 补丁 | 查看 | 原始文档 | blame | 历史
н¨Îļþ¼Ð/PDA/pages/stash/inboundorder.vue
@@ -69,7 +69,9 @@
            this.isLoaded=true;
        },
        onShow() {
            this.isLoaded = uni.getStorageSync('isLoaded');
            if (this.isLoaded) {
                uni.removeStorageSync('isLoaded');
                // ä»Žå…¶ä»–页面返回时刷新
                this.getData();
            }
н¨Îļþ¼Ð/PDA/pages/stash/raworderboxing.vue
@@ -37,7 +37,8 @@
                            <view style="display: flex;justify-content: space-around;margin-top: 2%;">
                                <!-- <button @click="reset" type="default" size="default"
                                    style="width: 160rpx;border: 1rpx solid #007aff;color: #007aff;">重置</button> -->
                                <button @click="submit" type="primary" size="default" style="width: 200rpx;">确认入库</button>
                                <button @click="submit" type="primary" size="default"
                                    style="width: 200rpx;">确认入库</button>
                            </view>
                        </uni-forms-item>
                    </uni-forms>
@@ -136,8 +137,8 @@
                matInfos: [],
                orderNo: "",
                batchNo:"",
                orderqty:"",
                Inqty:"",
                orderqty: 0,
                Inqty: 0,
                goods_no:"",
                batch_num:"",
                order_qty:"",
@@ -451,6 +452,9 @@
                    })
                    return;
                }
                uni.showLoading({
                    title: '提交中...'
                });
                this.$u.post('/api/CabinOrder/FeedbackIn', {
                    MainData: {
                        "LocationCode": this.barcode,
@@ -461,23 +465,74 @@
                    },
                    DelKeys: this.sns
                }).then(res => {
                    uni.hideLoading();
                    this.Testcheck = false;
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "入库成功",
                            type: "success"
                        })
                        this.Inqty=res.message;
                        this.Inqty = parseInt(res.message);
                        this.order_Inqty="已入库数量:"+this.Inqty;
                        this.barcode="";
                        this.materSn="";
                        if (this.Inqty == this.orderqty) {
                            uni.setStorageSync('isLoaded', true);
                            this.handleInboundComplete();
                        }
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    uni.hideLoading();
                    this.$refs.uToast.show({
                        title: "网络错误,请重试",
                        type: "error"
                })
                })
            },
            // æ–°å¢žæ–¹æ³•处理入库完成逻辑
            handleInboundComplete() {
                // æ˜¾ç¤ºå®Œæˆæç¤º
                // uni.showModal({
                //     title: '提示',
                //     content: '入库已完成,是否返回首页?',
                //     success: (res) => {
                //         if (res.confirm) {
                //             // ç”¨æˆ·ç‚¹å‡»ç¡®å®š
                //             setTimeout(() => {
                //                 // uni.redirectTo({
                //                 //     url: '/pages/stash/inboundorder?warehouseId='+this.warehouseId // æ›¿æ¢ä¸ºä½ çš„目标页面路径
                //                 // });
                //                 uni.navigateBack({
                //                     delta: 2
                //                 });
                //             }, 500);
                //         } else {
                //             // ç”¨æˆ·ç‚¹å‡»å–消,可以停留在当前页面
                //             // æˆ–者执行其他操作
                //         }
                //     }
                // });
                // æˆ–者直接跳转(不询问用户)
                setTimeout(() => {
                // æ–¹å¼2:跳转到指定页面
                // uni.redirectTo({
                //     url: '/pages/order/list' // æ›¿æ¢ä¸ºä½ çš„目标页面路径
                // });
                // æ–¹å¼3:跳转到首页
                // uni.switchTab({
                //     url: '/pages/index/index'
                // });
                // æ–¹å¼1:使用uni.navigateBack返回上一页
                    uni.navigateBack({
                        delta: 2
                    });
                }, 600);
            }
        }
    }
н¨Îļþ¼Ð/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/HierarchyCache.v1.txt
Binary files differ
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs
@@ -16,11 +16,6 @@
        /// <summary>
        /// å°ä»¶
        /// </summary>
        SelfMadePart = 2,
        /// <summary>
        /// é‡‡è´­&自制件
        /// </summary>
        PurchaseAndSelf = 3
        SelfMadePart = 2
    }
}
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs
@@ -9,68 +9,28 @@
{
    /// <summary>
    /// ä»“库
    /// HA57 = æ·®å®‰äºŒåŽ‚ - æ¿æ–™ä»“<br/>
    /// HA58 = æ·®å®‰äºŒåŽ‚ - PP仓<br/>
    /// HA60 = æ·®å®‰äºŒåŽ‚ - è¾…料仓<br/>
    /// HA64 = æ·®å®‰äºŒåŽ‚ - æµ‹è¯•架仓<br/>
    /// HA71 = æ·®å®‰äºŒåŽ‚ - æˆå“ä»“<br/>
    /// HA72 = æ·®å®‰äºŒåŽ‚ - å°¾æ•°ä»“<br/>
    /// HA73 = æ·®å®‰äºŒåŽ‚ - ç ”发仓<br/>
    /// HA101 = æ·®å®‰äºŒåŽ‚ - æˆå“ä»“平库<br/>
    /// HA152 = æ·®å®‰äºŒåŽ‚ - å¹²è†œä»“<br/>
    /// HA153 = æ·®å®‰äºŒåŽ‚ - æ²¹å¢¨ä»“<br/>
    /// </summary>
    public enum WarehouseEnum
    {
        /// <summary>
        /// æ¿æ–™ä»“
        /// æ™ºèƒ½ç«‹åº“
        /// </summary>
        [Description("板料仓")]
        HA57,
        [Description("智能立库")]
        ç«‹åº“ = 1,
        /// <summary>
        /// PP仓
        /// å¤§ä»¶åº“
        /// </summary>
        [Description("PP仓")]
        HA58,
        [Description("大件库")]
        å¤§ä»¶åº“,
        /// <summary>
        /// è¾…料仓
        /// éº»ç²¾åº“
        /// </summary>
        [Description("辅料仓")]
        HA60,
        [Description("麻精库")]
        éº»ç²¾åº“,
        /// <summary>
        /// æµ‹è¯•架仓
        /// å†·å†»åº“
        /// </summary>
        [Description("测试架仓")]
        HA64,
        /// <summary>
        /// æˆå“ä»“
        /// </summary>
        [Description("成品仓")]
        HA71,
        /// <summary>
        /// å°¾æ•°ä»“
        /// </summary>
        [Description("尾数仓")]
        HA72,
        /// <summary>
        /// ç ”发仓
        /// </summary>
        [Description("研发仓")]
        HA73,
        /// <summary>
        /// æˆå“ä»“平库
        /// </summary>
        [Description("成品仓平库")]
        HA101,
        /// <summary>
        /// å¹²è†œä»“
        /// </summary>
        [Description("干膜仓")]
        HA152,
        /// <summary>
        /// æ²¹å¢¨ä»“
        /// </summary>
        [Description("油墨仓")]
        HA153
        [Description("冷冻库")]
        å†·å†»åº“ = 10
    }
}
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_ISquareCabinServices/ICabinOrderServices.cs
@@ -19,8 +19,6 @@
        /// <returns></returns>
        WebResponseContent GetUpstreamOrder();
        WebResponseContent GetUpstreamOrder2();
        /// <summary>
        /// å…¥åº“报完成接口
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Model/Models/SquareCabin/Dt_CabinOrderDetail_Hty .cs
@@ -1,4 +1,5 @@
using SqlSugar;
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,57 +10,30 @@
namespace WIDESEA_Model.Models
{
    [SugarTable("Dt_CabinOrderDetail_Hty ", "入库明细历史表")]
    public class Dt_CabinOrderDetail_Hty : BaseEntity
    public class Dt_CabinOrderDetail_Hty : Dt_CabinOrderDetail, IBaseHistoryEntity
    {
        [SugarColumn(ColumnName = "HistoryId", IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "历史记录主键")]
        public int  HistoryId { get; set; }
        // ä¿ç•™åŽŸè¡¨æ‰€æœ‰å­—æ®µ
        [SugarColumn(ColumnName = "Id", ColumnDescription = "原主键")]
        public int Id { get; set; }
        //区域(自己建立或者他们直接给出来)
        [SugarColumn(ColumnName = "Reservoirarea", IsNullable = true, Length = 50, ColumnDescription = "库区")]
        public string Reservoirarea { get; set; }
        [SugarColumn(ColumnName = "Goods_no", IsNullable = true, Length = 50, ColumnDescription = "药品编码")]
        public string Goods_no { get; set; }
        [SugarColumn(ColumnName = "Order_qty", IsNullable = true, ColumnDescription = "订单入库数量,退货时为负数")]
        public decimal Order_qty { get; set; }
        [SugarColumn(ColumnName = "Order_Inqty", IsNullable = true, ColumnDescription = "入库完成数量")]
        public decimal Order_Inqty { get; set; }
        [SugarColumn(ColumnName = "Batch_num", IsNullable = true, Length = 50, ColumnDescription = "批号")]
        public string Batch_num { get; set; }
        [SugarColumn(ColumnName = "Exp_date", IsNullable = true, Length = 50, ColumnDescription = "校期(yyyymmmdd)")]
        public string Exp_date { get; set; }
        //盘盈明细--》料箱号,数量
        //public List<> StocktakingDetails { get; set; }
        /// <summary>
        /// åŽŸè¡¨ä¸»é”®
        /// </summary>
        [ImporterHeader(Name = "原表主键")]
        [ExporterHeader(DisplayName = "原表主键")]
        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "原表主键")]
        public int SourceId { get; set; }
        /// <summary>
        /// è®¢å•详情状态 æ–°å»ºï¼Œå¼€å§‹ï¼Œå·²å®Œæˆ
        /// åº“房号+状态+(新建):判断是否下发给wcs
        /// è¯¦æƒ…开始(开始)
        /// è¯¦æƒ…完成(已完成,移入历史表删除信息)
        /// æ“ä½œç±»åž‹
        /// </summary>
        [SugarColumn(ColumnName = "OrderDetailStatus", IsNullable = true, Length = 50, ColumnDescription = "状态")]
        public string OrderDetailStatus { get; set; }
        [ImporterHeader(Name = "操作类型")]
        [ExporterHeader(DisplayName = "操作类型")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "操作类型")]
        public string OperateType { get; set; }
        //状态
        [SugarColumn(ColumnName = "Status", IsNullable = true, ColumnDescription = "状态 åŒæ­¥çŠ¶æ€ï¼š0未同步 1已同步 2无需同步(即同步下发给wcs)")]
        public int Status { get; set; }
        // ä¿®æ­£å¯¼èˆªå±žæ€§ï¼šä½¿ç”¨ Goods_no å…³è” MaterielCode
        [Navigate(NavigateType.OneToOne, nameof(Goods_no), nameof(Dt_MaterielInfo.MaterielCode))]
        public Dt_MaterielInfo MedicineGoods { get; set; }
        /// <summary>
        /// ç§»å…¥åŽ†å²æ—¶é—´
        /// </summary>
        [ImporterHeader(Name = "移入历史时间")]
        [ExporterHeader(DisplayName = "移入历史时间")]
        [SugarColumn(IsNullable = false, ColumnDescription = "移入历史时间")]
        public DateTime InsertTime { get; set; }
    }
}
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Model/Models/SquareCabin/Dt_CabinOrder_Hty.cs
@@ -1,4 +1,5 @@
using SqlSugar;
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -10,63 +11,32 @@
{
    [SugarTable("Dt_CabinOrder_Hty", "入库单表历史表")]
    public class Dt_CabinOrder_Hty : BaseEntity
    public class Dt_CabinOrder_Hty : Dt_CabinOrder,IBaseHistoryEntity
    {
        [SugarColumn(ColumnName = "HistoryId", IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "历史记录主键")]
        public int HistoryId { get; set; }
        [SugarColumn(ColumnName = "Id", ColumnDescription = "原主键")]
        public int Id { get; set; }
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "入库单号")]
        public string Order_no { get; set; }
        [SugarColumn(IsNullable = true, Length = 3, ColumnDescription = "入库类型:1正常/3退货")]
        public string Order_type { get; set; }
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "供应商代码")]
        public string Supplier_no { get; set; }
        [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "供应商名称")]
        public string Supplier_name { get; set; }
        //库房号
        [SugarColumn(ColumnName = "Warehouse_no", IsNullable = true, ColumnDescription = "库房号001")]
        public string Warehouse_no { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "入库记账时间")]
        public DateTime? Account_tiem { get; set; }
        [Navigate(NavigateType.OneToMany, nameof(Dt_CabinOrderDetail_Hty.OrderId))]
        public new List<Dt_CabinOrderDetail_Hty> Details { get; set; }
        /// <summary>
        /// åŽŸè¡¨ä¸»é”®
        /// </summary>
        [ImporterHeader(Name = "原表主键")]
        [ExporterHeader(DisplayName = "原表主键")]
        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "原表主键")]
        public int SourceId { get; set; }
        /// <summary>
        /// ä¸‹æ¸¸çŠ¶æ€ æ–°å»ºï¼Œå¼€å§‹ï¼Œå·²å®Œæˆ
        /// ä¸‹æ¸¸ä¸‹å‘(新建)
        /// è¯¦æƒ…开始(开始)
        /// è¯¦æƒ…全部完成(已完成,上传给上游系统,移入历史表删除信息)
        /// æ“ä½œç±»åž‹
        /// </summary>
        [SugarColumn(ColumnName = "OdrderStatus", IsNullable = true, Length = 50, ColumnDescription = "表头状态")]
        public string OdrderStatus { get; set; }
        [ImporterHeader(Name = "操作类型")]
        [ExporterHeader(DisplayName = "操作类型")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "操作类型")]
        public string OperateType { get; set; }
        //下面是否需要这些字段?
        //优先级 priority
        //[SugarColumn(ColumnName ="Priority",IsNullable =true,ColumnDescription ="优先级")]
        //public int Priority { get; set; }
        //是否取消 Iscancel
        //[SugarColumn(ColumnName = "Iscancel", IsNullable = true, ColumnDescription = "是否取消(1是0否)")]
        //public int Iscancel { get; set; }
        [Navigate(NavigateType.OneToMany, nameof(Dt_CabinOrderDetail.OrderId))]
        public List<Dt_CabinOrderDetail> Details { get; set; }
        /// <summary>
        /// ç§»å…¥åŽ†å²æ—¶é—´
        /// </summary>
        [ImporterHeader(Name = "移入历史时间")]
        [ExporterHeader(DisplayName = "移入历史时间")]
        [SugarColumn(IsNullable = false, ColumnDescription = "移入历史时间")]
        public DateTime InsertTime { get; set; }
    }
}
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs
@@ -13,11 +13,13 @@
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.SquareCabin;
using WIDESEA_IBasicService;
using WIDESEA_ISquareCabinServices;
using WIDESEA_IWMsInfoServices;
@@ -32,7 +34,6 @@
{
    public class CabinOrderServices : ServiceBase<Dt_CabinOrder, IRepository<Dt_CabinOrder>>, ICabinOrderServices
    {
        static string SearchDate = "";
        private readonly IBasicService _basicService;
        private readonly IMedicineGoodsServices _medicineGoodsServices;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
@@ -40,9 +41,10 @@
        private readonly IInventoryInfoService _inventoryInfoService;
        private readonly ICabinOrderDetailServices _cabinOrderDetailServices;
        private readonly ISupplyTaskService _supplyTaskService;
        private readonly ISupplyTaskHtyService _supplyTaskHtyService;
        public IRepository<Dt_CabinOrder> Repository => BaseDal;
        public CabinOrderServices(IRepository<Dt_CabinOrder> BaseDal, IBasicService basicService, IMedicineGoodsServices medicineGoodsServices, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, ICabinOrderDetailServices cabinOrderDetailServices, ICabinOrderHtyServices cabinOrderHtyServices, ICabinOrderDetailHtyServices cabinOrderDetailHtyServices, ISupplyTaskService supplyTaskService) : base(BaseDal)
        public CabinOrderServices(IRepository<Dt_CabinOrder> BaseDal, IBasicService basicService, IMedicineGoodsServices medicineGoodsServices, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, ICabinOrderDetailServices cabinOrderDetailServices, ICabinOrderHtyServices cabinOrderHtyServices, ICabinOrderDetailHtyServices cabinOrderDetailHtyServices, ISupplyTaskService supplyTaskService, ISupplyTaskHtyService supplyTaskHtyService) : base(BaseDal)
        {
            _basicService = basicService;
            _medicineGoodsServices = medicineGoodsServices;
@@ -51,6 +53,7 @@
            _inventoryInfoService = inventoryInfoService;
            _cabinOrderDetailServices = cabinOrderDetailServices;
            _supplyTaskService = supplyTaskService;
            _supplyTaskHtyService = supplyTaskHtyService;
        }
@@ -98,7 +101,7 @@
        {
            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.Status == 2).ToList();
            List<Dt_CabinOrderDetail> cabinOrderDetails = cabinOrder.Details.Where(x => x.Status == 2 && x.OrderDetailStatus != "已完成").ToList();
            content.OK(data: cabinOrderDetails);
            return content;
        }
@@ -120,10 +123,11 @@
                var Inqty = saveModel.MainData["Inqty"].ObjToInt();
                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();
                if (cabinOrder == null || cabinOrder.OdrderStatus == "已完成")
                    return WebResponseContent.Instance.Error($"入库单已完成");
                Dt_CabinOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == batchNo && x.Status == 2).First();
                if (cabinOrderDetail == null) return WebResponseContent.Instance.Error($"入库单明细已完成");
                if (cabinOrderDetail == null || cabinOrderDetail.OrderDetailStatus == "已完成")
                    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}】的物料信息");
                cabinOrderDetail.Order_Inqty += Inqty;
@@ -141,39 +145,27 @@
                    cabinOrderDetail.OrderDetailStatus = "已完成";
                    //_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();
                    //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();
                    }
                    var v = BaseDal.Db.Deleteable<Dt_CabinOrderDetail>(cabinOrderDetail).ExecuteCommand();
                    if (v < 0)
                    {
                        _unitOfWorkManage.RollbackTran();
                    }
                }
                else
                {
                    _cabinOrderDetailServices.Repository.UpdateData(cabinOrderDetail);
                }
                var cabinOrder1 = BaseDal.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == cabinOrder.Order_no).Includes(x => x.Details).First();
                if (cabinOrder1.Details == null || cabinOrder1.Details.Count < 1) cabinOrder.OdrderStatus = "已完成";
                if (!cabinOrder1.Details.Where(x => x.OrderDetailStatus != "已完成").Any()) cabinOrder.OdrderStatus = "已完成";
                Repository.UpdateData(cabinOrder);
                #endregion
@@ -182,7 +174,7 @@
                if (location == null) return WebResponseContent.Instance.Error($"请维护货位编号【{LocationCode}】的货位信息");
                if (location.EnableStatus == EnableStatusEnum.Disable.ObjToInt())
                    return WebResponseContent.Instance.Error($"货位编号【{LocationCode}】已禁用,请恢复正常再使用");
                if (location.LocationStatus != LocationStatusEnum.InStock.ObjToInt())
                if (location.LocationStatus == LocationStatusEnum.Free.ObjToInt())
                {
                    location.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                    _basicService.LocationInfoService.UpdateData(location);
@@ -194,6 +186,7 @@
                if (inventoryInfo != null)
                {
                    inventoryInfo.StockQuantity += Inqty;
                    inventoryInfo.AvailableQuantity += Inqty;
                    _inventoryInfoService.UpdateData(inventoryInfo);
                }
                else
@@ -206,6 +199,7 @@
                        MaterielSpec = materielInfo.MaterielSpec,
                        OutboundQuantity = 0,
                        StockQuantity = Inqty,
                        AvailableQuantity = Inqty,
                        StockStatus = StockStatusEmun.入库完成.ObjToInt(),
                        ValidityPeriod = cabinOrderDetail.Exp_date,
                        WarehouseCode = cabinOrderDetail.Reservoirarea,
@@ -220,10 +214,33 @@
                #endregion
                #region ä»»åŠ¡è®°å½•
                Dt_SupplyTask supplyTask = new Dt_SupplyTask()
                #region MyRegion
                //Dt_SupplyTask supplyTask = new Dt_SupplyTask()
                //{
                //    WarehouseCode = cabinOrderDetail.Reservoirarea,
                //    TaskNum = cabinOrderDetail.Id,
                //    TaskStatus = SupplyStatusEnum.InFinish.ObjToInt(),
                //    BatchNo = inventoryInfo.BatchNo,
                //    MaterielName = inventoryInfo.MaterielName,
                //    MaterielCode = inventoryInfo.MaterielCode,
                //    MaterielSpec = inventoryInfo.MaterielSpec,
                //    TaskType = TaskTypeEnum.InPick.ObjToInt(),
                //    CreateDate = DateTime.Now,
                //    Creater = App.User.UserName,
                //    LocationCode = location.LocationCode,
                //    OrderNo = cabinOrder.Order_no,
                //    StockQuantity = Inqty,
                //    SupplyQuantity = 0,
                //    Remark = "入库"
                //};
                //_supplyTaskService.AddData(supplyTask);
                #endregion
                Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty()
                {
                    WarehouseCode = cabinOrderDetail.Reservoirarea,
                    TaskNum = cabinOrderDetail.Id,
                    OperateType = OperateTypeEnum.人工完成.ToString(),
                    InsertTime = DateTime.Now,
                    TaskStatus = SupplyStatusEnum.InFinish.ObjToInt(),
                    BatchNo = inventoryInfo.BatchNo,
                    MaterielName = inventoryInfo.MaterielName,
@@ -238,7 +255,7 @@
                    SupplyQuantity = 0,
                    Remark = "入库"
                };
                _supplyTaskService.AddData(supplyTask);
                _supplyTaskHtyService.AddData(supplyTask_Hty);
                #endregion
                #region åº“存批次
@@ -246,6 +263,7 @@
                if (inventory_Batch != null)
                {
                    inventory_Batch.StockQuantity += Inqty;
                    inventory_Batch.AvailableQuantity += Inqty;
                    _inventory_BatchServices.UpdateData(inventory_Batch);
                }
                else
@@ -263,6 +281,7 @@
                        ProductionDate = inventoryInfo.ProductionDate,
                        Status = false,
                        StockQuantity = inventoryInfo.StockQuantity,
                        AvailableQuantity = inventoryInfo.StockQuantity,
                        ValidityPeriod = inventoryInfo.ValidityPeriod,
                        SupplyQuantity = inventoryInfo.SupplyQuantity,
                    };
@@ -282,10 +301,7 @@
            }
            return content;
        }
        static string SearchDate = "2025-10-10 00:00:00";
        /// <summary>
        /// èŽ·å–ä¸Šæ¸¸ç³»ç»Ÿçš„å…¥åº“å•
        /// </summary>
@@ -351,179 +367,14 @@
                    {
                        if (order.order_type == "1") //正常入库
                        {
                            responseContent = CreateInboundOrder(order);
                            List<Dt_CabinOrder>? dt_CabinOrders = responseContent.Data as List<Dt_CabinOrder>;
                            if (dt_CabinOrders != null) _CabinOrders.AddRange(dt_CabinOrders);
                        }
                        else
                        {
                            //创建出库单
                        }
                        #region åˆ›å»ºä¸€ä¸ªå…¥åº“单方法
                        //排除特殊药品
                        bool skipOrder = false;//标记是否跳过该入库单
                        if (order.warehouse_no != "001" && (order.warehouse_no == "010" || order.warehouse_no == "003" || order.warehouse_no == "017"))//特殊药品库房号进行下面操作
                        {
                            //创建入库单主表从表
                            var entityOrder = new Dt_CabinOrder
                            {
                                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
                                {
                                    //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, //如果是001房那么就是未同步状态,如果不是001房那么就是无需同步状态
                                }).ToList()
                            };
                            _CabinOrders.Add(entityOrder);
                        }
                        else
                        {
                            //区分平库立库
                            var entityOrder = new Dt_CabinOrder
                            {
                                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)
                                {
                                    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 = item.order_qty,
                                        Batch_num = item.batch_num,
                                        Exp_date = item.exp_date,
                                        OrderDetailStatus = "新建",
                                        Status = 2
                                    };
                                    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
                            }
                            #endregion
                            // â—如果跳过该单,则直接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();
@@ -549,58 +400,20 @@
            }
        }
        #region åˆ›å»ºå…¥åº“单
        /// <summary>
        /// å¯¹æ²¡æœ‰è¿›è¡Œç»´æŠ¤å•†å“ä¿¡æ¯è¡¨çš„入库单进行过滤处理
        /// åˆ›å»ºå…¥åº“单,返回一个入库单集合到data
        /// </summary>
        /// <returns></returns>
        public WebResponseContent GetUpstreamOrder2()
        public WebResponseContent CreateInboundOrder(UpstreamOrderInfo order)
        {
            var responseContent = new WebResponseContent();
            WebResponseContent webResponseContent = new WebResponseContent();
            try
            {
                // è¯·æ±‚地址
                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 requestData = new
                List<Dt_CabinOrder> dt_CabinOrders = new List<Dt_CabinOrder>();
                #region ç‰¹æ®Šè¯å“å…¥ç‰¹æ®Šåº“房
                if (order.warehouse_no == WarehouseEnum.麻精库.ObjToInt().ToString("000") || order.warehouse_no == WarehouseEnum.冷冻库.ObjToInt().ToString("000"))
                {
                    //searchDate = SearchDate
                    searchDate = "2020-10-10 20:45:16"  // æ­£ç¡®çš„æ ¼å¼
                };
                //SearchDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
                var result = HttpHelper.Post(url, requestData.ToJsonString());
                var response = JsonConvert.DeserializeObject<UpstreamResponse<UpstreamOrderInfo>>(result);
                if (response.resultCode != "0")
                {
                    SendErrorToUpstream(1, "", response.resultMsg ?? "上游接口返回失败", "");
                    return responseContent.Error(response.resultMsg ?? "上游接口返回失败");
                }
                if (response.data == null || !response.data.Any())
                    return responseContent.OK("无新入库单数据");
                var existingOrderNos = BaseDal.Db.Queryable<Dt_CabinOrder>()
                    .Select(x => x.Order_no)
                    .ToList();
                var newOrders = response.data
                    .Where(order => !existingOrderNos.Contains(order.order_no))
                    .ToList();
                if (!newOrders.Any())
                    return responseContent.OK("所有入库单已存在,无需新增");
                Db.Ado.BeginTran();
                try
                {
                    List<Dt_CabinOrder> _CabinOrders = new();
                    List<string> orderNos = new();
                    foreach (var order in newOrders)
                    {
                        bool skipOrder = false; // æ ‡è®°æ˜¯å¦è·³è¿‡è¯¥å…¥åº“单
                        var entityOrder = new Dt_CabinOrder
                        {
                            Order_no = order.order_no,
@@ -610,40 +423,62 @@
                            OdrderStatus = "新建",
                            Supplier_name = order.supplier_name,
                            Warehouse_no = order.warehouse_no,
                        Details = order.details.Select(d => new Dt_CabinOrderDetail
                        {
                            Goods_no = d.goods_no,
                            Order_qty = Math.Abs(d.order_qty),
                            Batch_num = d.batch_num,
                            Exp_date = d.exp_date,
                            OrderDetailStatus = "新建",
                            Status = 2, //如果是001房那么就是未同步状态,如果不是001房那么就是无需同步状态
                        }).ToList()
                    };
                    dt_CabinOrders.Add(entityOrder);
                    webResponseContent.OK(data: dt_CabinOrders);
                }
                #endregion
                else
                {
                    var entityOrder = new Dt_CabinOrder//大件库订单
                    {
                        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 = WarehouseEnum.大件库.ObjToInt().ToString("000"),
                            Details = new List<Dt_CabinOrderDetail>()
                        };
                    var entityOrderLK = new Dt_CabinOrder//立库订单
                    {
                        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 = WarehouseEnum.立库.ObjToInt().ToString("000"),
                        Details = new List<Dt_CabinOrderDetail>()
                    };
                        foreach (var item in order.details)
                        {
                        // å°†ä¸Šæ¸¸å…¥åº“数量转为正数
                            item.order_qty = Math.Abs(item.order_qty);
                            // æŸ¥è¯¢ç‰©æ–™ä¿¡æ¯
                            var materielInfo = BaseDal.Db.Queryable<Dt_MedicineGoods>()
                                .Where(x => x.Goods_no == item.goods_no)
                                .First();
                            //如果物料信息不存在,跳过整个入库单
                            if (materielInfo == null)
                        #region æ ¹æ®ç‰©æ–™ç¼–码查询物料信息
                        Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == item.goods_no);
                        if (materielInfo == null) throw new Exception($"未找到药品编码【{item.goods_no}】的信息");
                        if (!Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType))
                            throw new Exception($"请设置药品编号【{item.goods_no}】的属性分类");
                        if (materielInfo.BoxQty < 1) throw new Exception($"请设置药品编号【{item.goods_no}】的箱规数量");
                        if (materielInfo.MinQty < 1) throw new Exception($"请设置药品编号【{item.goods_no}】的立库最低库存数");
                        #endregion
                        #region å¤§ä»¶
                        if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)//如果物料是大件
                            {
                                skipOrder = true;
                                Console.WriteLine($"跳过入库单 {order.order_no},原因:未找到商品 [{item.goods_no}] çš„物料信息。");
                                break;
                            }
                            //  è‹¥ç‰©æ–™ä¸å­˜åœ¨æˆ– MaterielSourceType ä¸ºç©ºï¼Œåˆ™è·³è¿‡æ•´ä¸ªå…¥åº“单
                            if (materielInfo == null || !Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType))
                            Dt_CabinOrderDetail orderDetail = new Dt_CabinOrderDetail()
                            {
                                skipOrder = true;
                                break;
                            }
                            // åŒºåˆ†å¤§ä»¶/小件
                            if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)
                            {
                                var detail = new Dt_CabinOrderDetail
                                {
                                    Reservoirarea = order.warehouse_no,
                                Reservoirarea = entityOrder.Warehouse_no,
                                    Goods_no = item.goods_no,
                                    Order_qty = item.order_qty,
                                    Batch_num = item.batch_num,
@@ -651,20 +486,20 @@
                                    OrderDetailStatus = "新建",
                                    Status = 2
                                };
                                entityOrder.Details.Add(detail);
                            entityOrder.Details.Add(orderDetail);
                            }
                        #endregion
                            else
                            {
                                Dt_CabinOrderDetail orderDetail = null;
                                var ys = item.order_qty % materielInfo.BoxQty; // ä¸èƒ½æ•´é™¤çš„æ•£ä»¶
                                var xs = item.order_qty / materielInfo.BoxQty; // æ•´ç®±æ•°é‡
                                // æœ‰æ•£ä»¶
                            var ys = item.order_qty % materielInfo.BoxQty; //不能整除箱规的散件数
                            var xs = (int)(item.order_qty / materielInfo.BoxQty);//保留整数
                            #region åˆ¤æ–­æ˜¯å¦æœ‰æ•£ä»¶
                                if (ys > 0)
                                {
                                    orderDetail = new Dt_CabinOrderDetail
                                orderDetail = new Dt_CabinOrderDetail()
                                    {
                                        Reservoirarea = order.warehouse_no,
                                    Reservoirarea = entityOrderLK.Warehouse_no,
                                        Goods_no = item.goods_no,
                                        Order_qty = ys,
                                        Batch_num = item.batch_num,
@@ -674,16 +509,17 @@
                                    };
                                    materielInfo.Business_qty += ys;
                                }
                            #endregion
                                // ä¸è¶³æœ€ä½Žåº“存时补入立库
                                while (materielInfo.Business_qty < materielInfo.MinQty && xs > 0)
                            #region åˆ¤æ–­ç«‹åº“库存是否大于立库最低库存数
                            while (materielInfo.Business_qty < materielInfo.MinQty && xs > 0) //当业务数量和整箱数都大于0的时候才会停止循环
                                {
                                    xs--;
                                    if (orderDetail == null)
                                    {
                                        orderDetail = new Dt_CabinOrderDetail
                                    orderDetail = new Dt_CabinOrderDetail()
                                        {
                                            Reservoirarea = order.warehouse_no,
                                        Reservoirarea = entityOrderLK.Warehouse_no,
                                            Goods_no = item.goods_no,
                                            Order_qty = materielInfo.BoxQty,
                                            Batch_num = item.batch_num,
@@ -691,71 +527,49 @@
                                            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);
                            if (orderDetail != null) entityOrderLK.Details.Add(orderDetail);
                            #endregion
                                // å‰©ä½™æ•´ç®±å…¥å¹³åº“
                            #region å‰©ä½™æ•´ä»¶å…¥å¹³åº“
                                if (xs > 0)
                                {
                                    entityOrder.Details.Add(new Dt_CabinOrderDetail
                                orderDetail = new Dt_CabinOrderDetail()
                                    {
                                        Reservoirarea = order.warehouse_no,
                                    Reservoirarea = entityOrder.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
                            }
                            _medicineGoodsServices.Db.Updateable(materielInfo).ExecuteCommand();
                        _basicService.MaterielInfoService.Repository.UpdateData(materielInfo);
                        }
                        // â—如果跳过该单,则直接continue,不保存
                        if (skipOrder)
                        {
                            Console.WriteLine($"跳过入库单 {order.order_no},因为存在未定义物料属性的商品。");
                            continue;
                        }
                        _CabinOrders.Add(entityOrder);
                        orderNos.Add(order.order_no);
                    }
                    if (_CabinOrders.Any())
                    {
                        BaseDal.Db.InsertNav(_CabinOrders).Include(x => x.Details).ExecuteCommand();
                        Db.Ado.CommitTran();
                        return responseContent.OK($"成功同步 {_CabinOrders.Count} æ¡å…¥åº“单");
                    }
                    else
                    {
                        Db.Ado.RollbackTran();
                        return responseContent.OK("无可处理的入库单(商品属性未定义或未找到)");
                    if (entityOrder.Details.Count > 0) dt_CabinOrders.Add(entityOrder);
                    if (entityOrderLK.Details.Count > 0) dt_CabinOrders.Add(entityOrderLK);
                    webResponseContent.OK(data: dt_CabinOrders);
                    }
                }
                catch (Exception ex)
                {
                    Db.Ado.RollbackTran();
                    SendErrorToUpstream(1, "", ex.Message, "");
                    return responseContent.Error("同步失败: " + ex.Message);
                webResponseContent.Error(ex.Message);
                }
            return webResponseContent;
            }
            catch (Exception ex)
            {
                SendErrorToUpstream(1, "", ex.Message, "");
                return responseContent.Error("同步失败: " + ex.Message);
            }
        }
        #endregion
        /// <summary>
        /// ä¼ ç»™wcs
@@ -883,113 +697,42 @@
            var responseContent = new WebResponseContent();
            try
            {
                // æŸ¥æ‰¾æ‰€æœ‰â€œå¼€å§‹â€çŠ¶æ€çš„å…¥åº“å•
                var orders = BaseDal.Db.Queryable<Dt_CabinOrder>()
                    .Where(o => o.OdrderStatus == "开始")
                    .ToList();
                if (orders == null || !orders.Any())
                #region æŸ¥æ‰¾æ‰€æœ‰å·²å®Œæˆå…¥åº“单
                var inorders = BaseDal.QueryData(x => x.OdrderStatus == "已完成").Select(x => x.Order_no).ToList();
                foreach (var inorder in inorders)
                {
                    return responseContent.OK("暂无需要处理的入库单");
                }
                int successCount = 0;
                int failCount = 0;
                foreach (var order in orders)
                {
                    try
                    //var Orders = BaseDal.QueryData(x => x.Order_no == inorder);
                    var Orders = BaseDal.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == inorder).Includes(x => x.Details).ToList();
                    if (!Orders.Where(x => x.OdrderStatus != "已完成").Any())
                    {
                        BaseDal.Db.Ado.BeginTran();
                        // æŸ¥è¯¢è¯¥å•的明细
                        var details = BaseDal.Db.Queryable<Dt_CabinOrderDetail>()
                            .Where(d => d.OrderId == order.Id)
                            .ToList();
                        // åˆ¤æ–­æ˜¯å¦å…¨éƒ¨å®Œæˆ
                        var totalCount = details.Count;
                        var completedCount = details.Count(d => d.OrderDetailStatus == "已完成");
                        if (totalCount > 0 && completedCount == totalCount)
                        BaseDal.DeleteAndMoveIntoHty(Orders, OperateTypeEnum.自动完成);
                        foreach (var item in Orders)
                        {
                            // æ›´æ–°è¡¨å¤´çŠ¶æ€
                            order.OdrderStatus = "已完成";
                            BaseDal.Db.Updateable(order).ExecuteCommand();
                            _cabinOrderDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.自动完成);
                        }
                            // è°ƒç”¨ä¸Šæ¸¸æŽ¥å£
                            var url = "http://121.37.118.63:80/GYZ2/95fck/inOrderOk";
                            var result = HttpHelper.Post(url, new { order_no = order.Order_no }.ToJsonString());
                        var result = HttpHelper.Post(url, new { order_no = inorder }.ToJsonString());
                            var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result);
                            if (response.resultCode == "0")
                            {
                                // === æ­¥éª¤ 1:插入历史表 ===
                                // 1.1 æ’入表头历史
                                var orderHistory = new Dt_CabinOrder_Hty
                                {
                                    Id = order.Id,
                                    Order_no = order.Order_no,
                                    Order_type = order.Order_type,
                                    Supplier_no = order.Supplier_no,
                                    Supplier_name = order.Supplier_name,
                                    Account_tiem = order.Account_tiem,
                                    Warehouse_no = order.Warehouse_no,
                                    OdrderStatus = order.OdrderStatus,
                                };
                                var historyId = BaseDal.Db.Insertable(orderHistory).ExecuteReturnIdentity();
                                // 1.2 æ’入明细历史
                                var detailsHistory = details.Select(d => new Dt_CabinOrderDetail_Hty
                                {
                                    Id = d.Id,
                                    Reservoirarea = d.Reservoirarea,
                                    Goods_no = d.Goods_no,
                                    Order_qty = d.Order_qty,
                                    Order_Inqty = d.Order_Inqty,
                                    Batch_num = d.Batch_num,
                                    Exp_date = d.Exp_date,
                                    OrderDetailStatus = d.OrderDetailStatus,
                                    Status = d.Status,
                                }).ToList();
                                BaseDal.Db.Insertable(detailsHistory).ExecuteCommand();
                                // === æ­¥éª¤ 2:删除原始表 ===
                                BaseDal.Db.Deleteable<Dt_CabinOrderDetail>().Where(d => d.OrderId == order.Id).ExecuteCommand();
                                BaseDal.Db.Deleteable<Dt_CabinOrder>().Where(o => o.Id == order.Id).ExecuteCommand();
                                // æäº¤äº‹åŠ¡
                                BaseDal.Db.Ado.CommitTran();
                                successCount++;
                            }
                            else
                            {
                                BaseDal.Db.Ado.RollbackTran();
                                failCount++;
                                SendErrorToUpstream(2, "", $"上游接口返回失败: {response.resultMsg}", order.Order_no);
                            SendErrorToUpstream(2, "", $"上游接口返回失败: {response.resultMsg}", inorder);
                            }
                        }
                        else
                        {
                            BaseDal.Db.Ado.RollbackTran();
                        }
                #endregion
                return responseContent.OK();
                    }
                    catch (Exception ex)
                    {
                        BaseDal.Db.Ado.RollbackTran();
                        failCount++;
                        SendErrorToUpstream(1, "", ex.Message, order.Order_no);
                    }
                }
                return responseContent.OK($"批量处理完成:成功 {successCount} å•,失败 {failCount} å•。");
            }
            catch (Exception ex)
            {
                return responseContent.Error("批量处理失败:" + ex.Message);
            }
        }
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs
@@ -662,8 +662,8 @@
                    if (mainOrder == null) continue;
                    var location = Db.Queryable<Dt_InventoryInfo>()
                    .Where(x => x.MaterielCode == materielCode
                             && x.BatchNo == batchNo
                    .Where(x => x.MaterielCode == ""//materielCode
                             && x.BatchNo == ""//batchNo
                             && x.StockQuantity > 0)
                    .OrderBy(x => x.InDate) // æŒ‰å…¥åº“时间排序
                    .First();
н¨Îļþ¼Ð/WMS/src/views/inbound/inboundOrder.vue
@@ -199,7 +199,7 @@
        type: "string",
        width: 100,
        align: "left",
        bind: { key: "warehouse", data: [] },
        bind: { key: "warehouseNuber", data: [] },
      },
      {
        field: "account_tiem",
н¨Îļþ¼Ð/WMS/src/views/inbound/inboundOrderDetail_Hty.vue
@@ -181,7 +181,7 @@
    table: "DtCabinOrderDetailHtyDetail",
    columns: [
        {
            field: 'historyId',
            field: 'id',
            title: '历史记录主键',
            type: 'int',
            width: 120,
@@ -191,7 +191,7 @@
            align: 'left'
        },
        {
            field: 'id',
            field: 'sourceId',
            title: '原主键',
            type: 'int',
            width: 100,
@@ -288,8 +288,8 @@
            sort: true
        }
    ],
    sortName: "historyId",
    key: "historyId"
    sortName: "orderId",
    key: "orderId"
});
            return {
                table,
ÏîÄ¿×ÊÁÏ/Ò½Ò©ÏîĿϵͳWMS £¨ÉÏÓÎ).xlsx
Binary files differ