1.河南平高变更单需求修改 审核自动触发出库任务2.增加优先级字段3.分拣接口提出来单独使用4.增加入库单明细临时表 5增加过账日期表和审核回调逻辑
2个文件已添加
8个文件已修改
556 ■■■■ 已修改文件
HH.WCS.Mobox3.pinggao.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Program.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ApiModel.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSapController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSpaHelper.cs 303 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WMSCore.cs 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_Center_Inbound_Detail.cs 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_GZ_SZ.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_Outbound_Order.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/WCSHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.pinggao.csproj
@@ -112,6 +112,7 @@
    <Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
    </Reference>
    <Reference Include="System.Runtime.Caching" />
    <Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>bin\Debug\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
@@ -197,9 +198,11 @@
    <Compile Include="models\SapReturn.cs" />
    <Compile Include="models\SapRoot.cs" />
    <Compile Include="models\TN_CD.cs" />
    <Compile Include="models\TN_Center_Inbound_Detail.cs" />
    <Compile Include="models\TN_Container_Code.cs" />
    <Compile Include="models\TN_DPRECORD.cs" />
    <Compile Include="models\TN_GENERATE_ORDER.cs" />
    <Compile Include="models\TN_GZ_SZ.cs" />
    <Compile Include="models\TN_InBounder_Sh.cs" />
    <Compile Include="models\TN_Location_Ext.cs" />
    <Compile Include="models\TN_Ll_detail.cs" />
Program.cs
@@ -114,6 +114,7 @@
                //tasks.Add(GetTask(() => RunAtSpecificTime(WMSCore.Start, "14:00")));
                tasks.Add(GetTask(WMSCore.Start));
                tasks.Add(GetTask(WMSCore.CheckDistributionCNTROrder));
                tasks.Add(GetTask(WMSCore.podetailSend));
                //tasks.Add(GetTask(WMSCore.TransportTask));
                tasks.Add(GetTask(WCSCore.Dispatch));
                //定时重置
api/ApiModel.cs
@@ -382,7 +382,7 @@
        public class HuiK
        {
            public string cntr_code { get; set; }//容器
            public string start { get; set; }//容器
        }
@@ -406,6 +406,7 @@
        public class LLDDto
        {
            public string S_NO { get; set; }
            public int N_PRIORITY { get; set; }
        }
        /// <summary>
        /// lua调用接口,码盘信息
api/WmsSapController.cs
@@ -601,7 +601,7 @@
        {
            var json = WmsSpaHelper.Out_Order_Inss(dto.S_NO);
            var json = WmsSpaHelper.Out_Order_Inss(dto.S_NO,dto.N_PRIORITY);
            return json;
api/WmsSpaHelper.cs
@@ -43,6 +43,7 @@
using HH.WCS.Mobox3.pinggao.core;
using static HH.WCS.Mobox3.pinggao.api.OtherModel.Putaway_Order_In;
using System.Web.Http.Results;
using System.Runtime.Caching;
namespace HH.WCS.Mobox3.pinggao.api
{
@@ -2004,7 +2005,7 @@
                            S_END_LOC = endinfo.S_CODE,
                            S_END_AREA = endinfo.S_AREA_CODE,
                            S_END_WH = endinfo.S_WH_CODE,
                            N_PRIORITY=1,
                            N_TYPE = 2,
                            // S_TYPE = WMSTask.GetTypeStr(1),
                            S_TYPE = "出库空托盘",
@@ -2118,6 +2119,28 @@
            }
        }
        private static readonly ObjectCache Cache = MemoryCache.Default;
        private const string CachePrefix = "ClickProtection_";
        private const int CacheDurationInSeconds = 2;
        public static bool IsClickAllowed(string parameter)
        {
            string cacheKey = CachePrefix + parameter;
            // 检查缓存中是否已存在该参数
            if (Cache.Contains(cacheKey))
            {
                // 缓存中存在,说明5秒内已点击过
                return false;
            }
            else
            {
                // 缓存中不存在,添加到缓存并设置5秒后过期
                CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(CacheDurationInSeconds) };
                Cache.Set(cacheKey, parameter, policy);
                return true;
            }
        }
        /// <summary>
        /// 分拣
        /// </summary>
@@ -2127,6 +2150,17 @@
        {
            var result = new SimpleResult();
            if (!IsClickAllowed(model.cntr_code))
            {
                // 提示用户5秒内已点击过
                result.resultMsg = "您已点击过,请2秒后再试。";
                result.resultCode = 1;
                return result;
            }
            else
            {
            }
            // var db = new SqlHelper<object>().GetInstance();
            using (var db = new SqlHelper<object>().GetInstance())
@@ -2165,26 +2199,35 @@
                    }
                    LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}");
                    var gzra = db.Queryable<TN_GZ_SZ>().Where(a => a.N_ENABLE == 1).First();
                    var GZRQ = DateTime.Now.ToString("yyyyMMdd");
                    if (gzra != null)
                    {
                        GZRQ = gzra.S_GZRQ.ToString("yyyyMMdd");
                    }
                    //根据不同出库类型 回调sap
                    if (po.S_OUT_TYPE == "冲销出库")
                    {
                        result = await CXAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
                        result = await CXAddOutboundOrder(GZRQ,db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else
                    if (po.S_OUT_TYPE == "出库")//普通出库
                    {
                        LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}");
                        result = await AddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
                        result = await AddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else if (po.S_OUT_TYPE == "计划外发料出库")
                    {
                        result = await jhwtlAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
                        result = await jhwtlAddOutboundOrder(GZRQ,db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else if (po.S_OUT_TYPE == "成本中心出库")
                    {
                        result = await CBAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
                        result = await CBAddOutboundOrder(GZRQ,db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    if (result.resultCode == 1)
                    {
                        return result;
                    }
                    //通用接口 对容器货品的删减 和生成回库单 都要用的接口
                    result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, start, po.S_OUT_TYPE, model.cntr_type);
                    if (result.resultCode == 1)
@@ -2443,7 +2486,7 @@
                        };
                        if (WMSHelper.CreateWmsTask(wmsTask))
                        {
                            LocationHelper.LockLoc(start, 1);
                            LocationHelper.LockLoc(start, 2);
                            result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
                        }
                    }
@@ -2514,13 +2557,25 @@
                        result.resultMsg = $"{model.cntr_code}托盘找不到货位";
                        return result;
                    }
                var startloc = db.Queryable<Location>().Where(a => a.S_CODE == model.start).First();
                var start = "";
                var startloc1 = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).First();
                if (startloc1 != null)
                {
                    start = startloc1.S_LOC_CODE;
                }
                else
                {
                    result.resultMsg = $"{model.cntr_code}容器未找到货位信息";
                    result.resultCode = 1;
                    return result;
                }
                var startloc = db.Queryable<Location>().Where(a => a.S_CODE ==start).First();
                //var location = db.Queryable<Location>().Where(a => a.S_CODE == locs.S_LOC_CODE).First();
                var wmsTask = new WMSTask
                    {
                        S_CNTR_CODE = model.cntr_code,
                        S_CODE = WMSHelper.GenerateTaskNo(),
                        S_START_LOC = model.start,
                        S_START_LOC = startloc.S_CODE,
                        S_START_AREA = startloc.S_AREA_CODE,
                        S_START_WH = startloc.S_WH_CODE,
@@ -2539,7 +2594,7 @@
                    };
                    if (WMSHelper.CreateWmsTask(wmsTask))
                    {
                        LocationHelper.LockLoc(model.start, 1);
                        LocationHelper.LockLoc(startloc.S_CODE, 1);
                        result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
                    }
                }
@@ -2562,7 +2617,7 @@
        /// <param name="cntr_code"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static async Task<SimpleResult> CBAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        public static async Task<SimpleResult> CBAddOutboundOrder(string GZRQ,SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        {
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
@@ -2590,12 +2645,12 @@
                //回参物料信息
                List<CBcenterBackDto.HEADItem> iTEMs = new List<CBcenterBackDto.HEADItem>();
                List<OutboundRecord> records = new List<OutboundRecord>();
                string GZRQ = "";
                //string GZRQ = "";
                string PZZDRQ = "";
                if (po.BUDAT != null)
                {
                    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                }
                //if (po.BUDAT != null)
                //{
                //    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                //}
                if (po.BLDAT != null)
                {
                    PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd");
@@ -2725,7 +2780,7 @@
        /// <param name="cntr_code"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static async Task<SimpleResult> jhwtlAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        public static async Task<SimpleResult> jhwtlAddOutboundOrder(string GZRQ,SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        {
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
@@ -2743,12 +2798,12 @@
                DateTime dateTime;
                DateTime dateTime1;
                string GZRQ = "";
                //string GZRQ = "";
                string PZZDRQ = "";
                if (po.BUDAT != null)
                {
                    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                }
                //if (po.BUDAT != null)
                //{
                //    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                //}
                if (po.BLDAT != null)
                {
                    PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd");
@@ -2917,7 +2972,7 @@
        /// <param name="cntr_code"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static async Task<SimpleResult> CXAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        public static async Task<SimpleResult> CXAddOutboundOrder(string GZRQ,SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        {
            // var db = new SqlHelper<object>().GetInstance();
@@ -2927,15 +2982,15 @@
            try
            {
                //库位信息
                var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First();
                //var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First();
                //出库单详情
                var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First();
                string GZRQ = "";
                if (po.BUDAT != null)
                {
                    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                }
                //string GZRQ = "";
                //if (po.BUDAT != null)
                //{
                //    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                //}
                //来源冲销凭证对应的物料凭证信息
                //var poIn = db.Queryable<TN_Inbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == po.S_BS_NO).First();
@@ -2968,11 +3023,6 @@
                    hEAD.GZRQ = GZRQ;
                    hEAD.SRSJ = DateTime.Now.ToString("yyyyMMdd");
                    //hEAD.WLPZ = porecord.Where(s => s.S_WLBM == item.item_code && s.S_WLH == item.N_ROW_NO).First()?.S_WLPZBH;
                    //hEAD.WLPZNF = porecord.Where(s=>s.S_WLBM==item.item_code&&s.S_WLH==item.N_ROW_NO).First()?.S_WLPZND;
                    //hEAD.WLPZ = porecord.First()?.S_WLPZBH;
                    //hEAD.WLPZNF = porecord.First()?.S_WLPZND;
                    hEAD.WLPZ = porecord.FirstOrDefault()?.S_WLPZBH;
                    hEAD.WLPZNF = porecord.FirstOrDefault()?.S_WLPZND;
@@ -3093,7 +3143,7 @@
        /// <param name="cntr_code"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static async Task<SimpleResult> AddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        public static async Task<SimpleResult> AddOutboundOrder(string GZRQ,SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        {
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
@@ -3106,7 +3156,7 @@
                var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First();
                //出库单详情
                var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First();
                string GZRQ = "";
                //string GZRQ = "";
                string PZZDRQ = "";
                //if (po.Details[0].S_CJRQ != null)
                //{
@@ -3126,7 +3176,7 @@
                            KEY = po.S_NO,
                            ZYWLX = "2",
                            PZRQ = DateTime.Now.ToString("yyyyMMdd"),
                            GZRQ = DateTime.Now.ToString("yyyyMMdd"), // 假设日期格式为"年-月-日"
                            GZRQ = GZRQ, // 假设日期格式为"年-月-日"
                            GZRY = po.S_CREATOR_NAME,
                            ITEM = new List<CkBcakDto.ITEM>
                            {
@@ -3871,7 +3921,7 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        internal static WeiLiResult Out_Order_Inss(string S_NO)
        internal static WeiLiResult Out_Order_Inss(string S_NO,int N_PRIORITY)
        {
            var result = new WeiLiResult();
            //  var db = new SqlHelper<object>().GetInstance();
@@ -3897,7 +3947,7 @@
                    else
                    {
                        //var az = db.Queryable<AZInventory>().ToList();
                        var po1 = new TN_Outbound_Order { S_NO = WMSHelper.GenerateShippNo(), UNAME = po.UNAME, S_FACTORY = po.S_FACTORY, S_CBZX = po.S_CBZX, S_ZZKM = po.S_ZZKM, S_LRZX = po.S_LRZX, BLDAT = po.BLDAT, BUDAT = po.BUDAT, S_OUT_TYPE = po.S_OUT_TYPE, S_BS_TYPE = po.S_BS_TYPE, S_AREA_CODE = po.S_AREA_CODE, S_BS_NO = po.S_NO };
                        var po1 = new TN_Outbound_Order { S_NO = WMSHelper.GenerateShippNo(), N_PRIORITY=N_PRIORITY, UNAME = po.UNAME, S_FACTORY = po.S_FACTORY, S_CBZX = po.S_CBZX, S_ZZKM = po.S_ZZKM, S_LRZX = po.S_LRZX, BLDAT = po.BLDAT, BUDAT = po.BUDAT, S_OUT_TYPE = po.S_OUT_TYPE, S_BS_TYPE = po.S_BS_TYPE, S_AREA_CODE = po.S_AREA_CODE, S_BS_NO = po.S_NO };
                        List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>();
                        po1.Details = new List<TN_Outbound_Detail>();
                        var list = po.Details.Where(s => s.F_QTY > s.F_ACC_D_QTY&&s.S_ERP_WH_CODE=="4004").Select(s => s.S_ITEM_CODE).Distinct().ToArray();
@@ -4373,6 +4423,11 @@
                    db.BeginTran();
                    var po = db.Queryable<TN_Inbound_Order>().Includes(p => p.Details).Where(a => a.S_NO == model.S_NO).First();
                    LogHelper.Info($"进来了2");
                    #region MyRegion
                    if (po.Details.Count > 0)
@@ -4462,6 +4517,152 @@
                                w.S_ITEM_CODE == d.S_ITEM_CODE &&
                                w.N_ROW_NO == d.N_ROW_NO)).OrderBy(s => s.N_ROW_NO)
                            .ToList();
                    #region MyRegion
                    List<TN_Center_Inbound_Detail> tN_Center_Inbound_Details=new List<TN_Center_Inbound_Detail>();
                    foreach (var item in po.Details)
                    {
                        bool idadd = true;
                       // var cir2 = db.Queryable<CGRels>().Where(a => a.S_ITEM_CODE == item.S_ITEM_CODE && a.S_CNTR_TYPE == "半托").Select(s => s.S_CNTR_CODE).Distinct().ToArray();
                        var S_CNTR_CODE = "";
                        var lcr = db.Queryable<LocCntrRel>()
                            .InnerJoin<CGRels>((l, c) => l.S_CNTR_CODE == c.S_CNTR_CODE)
                            .Where((l, c) => c.S_ITEM_CODE == item.S_ITEM_CODE && c.S_CNTR_TYPE == "半托")
                            .OrderByDescending((l, c) => l.T_CREATE)
                            .Select((l, c) => l).ToList()
                            .FirstOrDefault();
                        //if (cir2.Count()>0)
                        //{
                           // var lcr = db.Queryable<LocCntrRel>().Where(c => cir2.Contains(c.S_CNTR_CODE)).OrderByDescending(s=>s.T_CREATE).First();
                            S_CNTR_CODE = lcr.S_CNTR_CODE;
                            if (lcr != null)
                            {
                                //起始库位
                                var startloc = db.Queryable<Location>().Where(it => it.S_CODE == lcr.S_LOC_CODE).First();
                                var wsc = db.Queryable<WCSTask>().Where(it => it.S_CNTR_CODE == S_CNTR_CODE&&it.S_TYPE.Contains("出库") && it.N_B_STATE < 3).First();
                                if (wsc != null)
                                {
                                    item.N_B_STATE = 2;
                                    db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                                }
                                else
                                {
                                    if (startloc != null)//&&
                                    {
                                        //终点货位
                                        var endloc = db.Queryable<Location>().Where(it => it.S_AREA_CODE == "QYQXHQ" && it.N_LOCK_STATE == 0 && it.N_CURRENT_NUM == 0).First();
                                        // var endloc = db.Queryable<Location>().Where(it => it.S_CODE == item.S_END_LOC).First();
                                        if (endloc != null)
                                        {
                                            var optask = new WMSTask
                                            {
                                                S_CODE = WMSHelper.GenerateTaskNo(),
                                                S_START_LOC = startloc.S_CODE,
                                                S_START_AREA = startloc.S_AREA_CODE,
                                                S_START_WH = startloc.S_WH_CODE,
                                                S_END_LOC = endloc.S_CODE,
                                                S_END_AREA = endloc.S_AREA_CODE,
                                                S_END_WH = endloc.S_WH_CODE,
                                                N_PRIORITY = 1,
                                                S_TYPE = "半托出库",
                                                N_TYPE = 2,
                                                N_B_STATE = 0,
                                                S_BS_NO = "",
                                                S_CNTR_CODE = S_CNTR_CODE,
                                                S_OP_DEF_NAME = item.S_BS_TYPE
                                            };
                                            var res = db.Insertable(optask).ExecuteCommand() > 0;
                                            if (res)
                                            {
                                                startloc.N_LOCK_STATE = 2;
                                                startloc.S_LOCK_STATE = "出库锁";
                                                db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                                            var models = db.Queryable<Location>().Where(a => a.S_CODE == endloc.S_CODE).First();
                                            // if (model != null && model.S_LOCK_STATE.Trim() == "无")
                                            if (models != null && models.N_LOCK_STATE == 0)
                                            {
                                                models.N_LOCK_STATE = 1;
                                                models.S_LOCK_STATE = Location.GetLockStateStr(1);
                                                res = db.Updateable(models).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0;
                                            }
                                            //LocationHelper.LockLoc(endloc.S_CODE, 1);
                                                item.N_B_STATE = 2;
                                                db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                                        }
                                        }
                                        else
                                        {
                                        idadd = false;
                                            LogHelper.Info($" 库区AGVXHQ无空货位");
                                        }
                                    }
                                    else
                                    {
                                       idadd = false;
                                        LogHelper.Info($" 库区无货位");
                                    }
                                }
                            }
                            else
                            {
                            idadd = false;
                            LogHelper.Info($"物料{item.S_ITEM_CODE}未找到容器对应的货位信息,请联系人工绑定关系");
                            }
                        if (!idadd)
                        {
                            TN_Center_Inbound_Detail tN_Center_Inbound_Detail = new TN_Center_Inbound_Detail();
                            tN_Center_Inbound_Detail.S_IO_NO = item.S_IO_NO;
                            tN_Center_Inbound_Detail.N_ROW_NO = item.N_ROW_NO;
                            tN_Center_Inbound_Detail.S_ITEM_CODE = item.S_ITEM_CODE;
                            tN_Center_Inbound_Detail.F_QTY = item.F_QTY;
                            tN_Center_Inbound_Detail.S_ITEM_STATE = item.S_ITEM_STATE;
                            tN_Center_Inbound_Detail.S_ITEM_NAME = item.S_ITEM_NAME;
                            tN_Center_Inbound_Detail.F_ACC_B_QTY = item.F_ACC_B_QTY;
                            tN_Center_Inbound_Detail.S_KCDD = item.S_KCDD;
                            tN_Center_Inbound_Detail.S_UOM = item.S_UOM;//计量单位
                            tN_Center_Inbound_Detail.S_BATCH_NO = item.S_BATCH_NO;
                            tN_Center_Inbound_Detail.S_CGPZH = item.S_CGPZH;
                            tN_Center_Inbound_Detail.S_CGPZXMBH = item.S_CGPZXMBH;
                            tN_Center_Inbound_Detail.S_CKPZKJND = item.S_CKPZKJND;
                            tN_Center_Inbound_Detail.S_CKPZXM = item.S_CKPZXM;
                            tN_Center_Inbound_Detail.S_CXWLPZBH = item.S_CXWLPZBH;
                            tN_Center_Inbound_Detail.S_HWSJJYZT = item.S_HWSJJYZT;
                            tN_Center_Inbound_Detail.S_JYPBH = item.S_JYPBH;
                            tN_Center_Inbound_Detail.S_KJPZSSRQ = item.S_KJPZSSRQ;
                            tN_Center_Inbound_Detail.S_KJPZSRSJ = item.S_KJPZSRSJ;
                            tN_Center_Inbound_Details.Add(tN_Center_Inbound_Detail);
                        }
                        //}
                        //else
                        //{
                        //    LogHelper.Info($"未找到物料{item.S_ITEM_CODE}对应的容器");
                        //}
                    }
                    db.Insertable(tN_Center_Inbound_Details).ExecuteCommand();
                    #endregion
                    var gzra = db.Queryable<TN_GZ_SZ>().Where(a => a.N_ENABLE == 1).First();
                    var GZRQ = DateTime.Now.ToString("yyyyMMdd");
                    if (gzra!=null)
                    {
                        GZRQ= gzra.S_GZRQ.ToString("yyyyMMdd");
                    }
                    if (po.S_IN_TYPE == "内采入库")
                    {
                        List<NcRkDto.ITEM> listitem = new List<NcRkDto.ITEM>();
@@ -4517,7 +4718,7 @@
                                    {
                                        KEY = KEY,
                                        GZRQ = DateTime.Now.ToString("yyyyMMdd"),
                                        GZRQ = GZRQ,
                                        GZRY = model.GZRY,//GenerateTaskNo
                                        WLPZBH = po.S_NO,
                                        WLPZND = po.S_WLPZND
@@ -4631,12 +4832,12 @@
                    {
                        DateTime dateTime;
                        DateTime dateTime1;
                        string GZRQ = "";
                        //string GZRQ = "";
                        string PZZDRQ = "";
                        if (po.BUDAT != null)
                        {
                            GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                        }
                        //if (po.BUDAT != null)
                        //{
                        //    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                        //}
                        if (po.BLDAT != null)
                        {
                            PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd");
@@ -4849,7 +5050,7 @@
                                    HEAD = new WcRkBc.HEAD
                                    {
                                        KEY = KEY,
                                        GZRQ = DateTime.Now.ToString("yyyyMMdd"),
                                        GZRQ = GZRQ,
                                        GZRY = model.GZRY,
                                        GC = po.S_FACTORY
                                    },
@@ -4962,12 +5163,12 @@
                    {
                        var materpz = db.Queryable<TN_Inbound_Order>().Where(s => s.S_NO == po.S_NO).First();
                        string GZRQ = "";
                        //string GZRQ = "";
                        LogHelper.Info($"冲销入库入库{po.BUDAT}");
                        if (po.BUDAT != null)
                        {
                            GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                        }
                        //if (po.BUDAT != null)
                        //{
                        //    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                        //}
                        //出库回调入参
                        CXCkBackDto.Root roots = new CXCkBackDto.Root
core/WMSCore.cs
@@ -1,4 +1,5 @@
using HH.WCS.Mobox3.pinggao.models;
using HH.WCS.Mobox3.pinggao.api;
using HH.WCS.Mobox3.pinggao.models;
using HH.WCS.Mobox3.pinggao.util;
using HH.WCS.Mobox3.pinggao.wms;
using System;
@@ -7,6 +8,7 @@
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using static HH.WCS.Mobox3.pinggao.api.ApiModel;
namespace HH.WCS.Mobox3.pinggao.core
{
@@ -34,6 +36,50 @@
            //WMSHelper.GetWaitingSortingOrderList();
        }
        //internal static async Task<SimpleResult> SendSap()
        //{
        //    var result = new SimpleResult();
        //    LogHelper.Info($"下发sap ");
        //    var db = new SqlHelper<object>().GetInstance();
        //    //获取配盘单
        //    var list = db.Queryable<TN_Outbound_Order>().Where(a => a.S_CNTR_CODE == model.cntr_code).First(); ;
        //    try
        //    {
        //        foreach (var po in list) {
        //            if (po.S_OUT_TYPE == "冲销出库")
        //            {
        //                result = await WmsSpaHelper.CXAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
        //            }
        //            else
        //             if (po.S_OUT_TYPE == "出库")//普通出库
        //            {
        //                LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}");
        //                result = await AddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
        //            }
        //            else if (po.S_OUT_TYPE == "计划外发料出库")
        //            {
        //                result = await jhwtlAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
        //            }
        //            else if (po.S_OUT_TYPE == "成本中心出库")
        //            {
        //                result = await CBAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start);
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        LogHelper.Info($"配盘生成作业错误 {ex.Message}");
        //        throw;
        //    }
        //    LogHelper.Info($"获取配盘数量 {list.Count}");
        //}
        internal static void CheckDistributionCNTROrder()
        {
            LogHelper.Info($"配盘生成作业 ");
@@ -47,6 +93,8 @@
                    var lcr = db.Queryable<LocCntrRel>().Where(c => c.S_CNTR_CODE == item.S_CNTR_CODE).First();
                    if (lcr != null)
                    {
                        var yxj = db.Queryable<TN_Outbound_Order>().Where(it => it.S_NO == item.S_BS_NO).First();
                        //起始库位
                        var startloc = db.Queryable<Location>().Where(it => it.S_CODE == lcr.S_LOC_CODE).First();
                        if (startloc != null)//&&  
@@ -62,6 +110,7 @@
                                    S_CODE = WMSHelper.GenerateTaskNo(),
                                    S_START_LOC = item.S_LOC_CODE,
                                    S_START_AREA = startloc.S_AREA_CODE,
                                    N_PRIORITY = yxj.N_PRIORITY,
                                    S_START_WH = startloc.S_WH_CODE,
                                    S_END_LOC = endloc.S_CODE,
                                    S_END_AREA = endloc.S_AREA_CODE,
@@ -127,26 +176,25 @@
            var db = new SqlHelper<object>().GetInstance();
            //获取入库明细单
            var list = db.Queryable<TN_Inbound_Detail>().Where(a => a.N_B_STATE == 1).ToList();
            var list = db.Queryable<TN_Center_Inbound_Detail>().ToList();
            try
            {
                foreach (var item in list)
                {
                    var cir2 = db.Queryable<CGRels>().Where(a => a.S_ITEM_CODE == item.S_ITEM_CODE&&a.S_CNTR_TYPE=="半托").First();
                    bool idadd = true;
                    var S_CNTR_CODE = "";
                    if (cir2 != null)
                    {
                        S_CNTR_CODE=cir2.S_CNTR_CODE;
                        var lcr = db.Queryable<LocCntrRel>().Where(c => c.S_CNTR_CODE == S_CNTR_CODE).First();
                    var lcr = db.Queryable<LocCntrRel>()
                        .InnerJoin<CGRels>((l, c) => l.S_CNTR_CODE == c.S_CNTR_CODE)
                        .Where((l, c) => c.S_ITEM_CODE == item.S_ITEM_CODE && c.S_CNTR_TYPE == "半托")
                        .OrderByDescending((l, c) => l.T_CREATE)
                        .Select((l, c) => l).ToList()
                        .FirstOrDefault();
                    S_CNTR_CODE = lcr.S_CNTR_CODE;
                        if (lcr != null)
                        {
                            //起始库位
                            var startloc = db.Queryable<Location>().Where(it => it.S_CODE == lcr.S_LOC_CODE).First();
                            var wsc = db.Queryable<WCSTask>().Where(it => it.S_CNTR_CODE == S_CNTR_CODE && it.N_B_STATE < 3).First();
                        var wsc = db.Queryable<WCSTask>().Where(it => it.S_CNTR_CODE == S_CNTR_CODE && it.S_TYPE.Contains("出库") && it.N_B_STATE < 3).First();
                            if (wsc != null)
                            {
                                item.N_B_STATE = 2;
@@ -158,8 +206,6 @@
                                {
                                    //终点货位
                                    var endloc = db.Queryable<Location>().Where(it => it.S_AREA_CODE == "QYQXHQ" && it.N_LOCK_STATE == 0 && it.N_CURRENT_NUM == 0).First();
                                    // var endloc = db.Queryable<Location>().Where(it => it.S_CODE == item.S_END_LOC).First();
                                    if (endloc != null)
                                    {
                                        var optask = new WMSTask
@@ -171,7 +217,8 @@
                                            S_END_LOC = endloc.S_CODE,
                                            S_END_AREA = endloc.S_AREA_CODE,
                                            S_END_WH = endloc.S_WH_CODE,
                                            S_TYPE = "出库区",
                                        N_PRIORITY = 1,
                                        S_TYPE = "半托出库",
                                            N_TYPE = 2,
                                            N_B_STATE = 0,
                                            S_BS_NO = "",
@@ -184,7 +231,13 @@
                                            startloc.N_LOCK_STATE = 2;
                                            startloc.S_LOCK_STATE = "出库锁";
                                            db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                                            LocationHelper.LockLoc(endloc.S_CODE, 1);
                                        var models = db.Queryable<Location>().Where(a => a.S_CODE == endloc.S_CODE).First();
                                        if (models != null && models.N_LOCK_STATE == 0)
                                        {
                                            models.N_LOCK_STATE = 1;
                                            models.S_LOCK_STATE = Location.GetLockStateStr(1);
                                            res = db.Updateable(models).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0;
                                        }
                                            item.N_B_STATE = 2;
                                            db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
@@ -193,37 +246,36 @@
                                    }
                                    else
                                    {
                                        LogHelper.Info($"{item.S_BS_NO}配盘 库区AGVXHQ无空货位");
                                    idadd = false;
                                    LogHelper.Info($" 库区AGVXHQ无空货位");
                                    }
                                }
                                else
                                {
                                    LogHelper.Info($"{item.S_BS_NO}配盘 库区无货位");
                                idadd = false;
                                LogHelper.Info($" 库区无货位");
                                }
                            }
                        }
                        else
                        {
                            LogHelper.Info($"配盘生成作业容器未绑定货位");
                        idadd = false;
                        LogHelper.Info($"物料{item.S_ITEM_CODE}未找到容器对应的货位信息,请联系人工绑定关系");
                        }
                    }
                    else
                    if (idadd)
                    {
                        LogHelper.Info($"未找到物料{item.S_ITEM_CODE}对应的容器");
                    }
                        db.Deleteable(item).ExecuteCommand();
                }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info($"配盘生成作业错误 {ex.Message}");
                LogHelper.Info($"自动生成出库任务 {ex.Message}");
                throw;
            }
            LogHelper.Info($"获取配盘数量 {list.Count}");
            LogHelper.Info($"自动生成人物 {list.Count}");
        }
        /// <summary>
        /// 遍历分拣单明细创建出库作业
@@ -560,6 +612,7 @@
                                    S_END_AREA = endinfo.S_AREA_CODE,
                                    S_END_WH = endinfo.S_WH_CODE,
                                    S_SCHEDULE_TYPE = "NDC",
                                    N_PRIORITY = a.N_PRIORITY,
                                    //N_CNTR_COUNT = 1,
                                    S_CNTR_CODE = a.S_CNTR_CODE,
                                };
models/TN_Center_Inbound_Detail.cs
New file
@@ -0,0 +1,111 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WCS.Mobox3.pinggao.models
{
    [SugarTable("TN_Inbound_Details")]
    public class TN_Center_Inbound_Detail : BaseModel
    {
        public string S_IO_NO { get; set; }
        public string N_ROW_NO { get; set; }
        public string S_ITEM_CODE { get; set; }
        public int N_ITEM_STATE { get; set; }
        public string S_ITEM_NAME { get; set; }
        public string S_ITEM_STATE { get; set; }
        public string S_BATCH_NO { get; set; } = "";
        public string S_ITEM_SPEC { get; set; }
        public string S_SERIAL_NO { get; set; } = "";
        public string D_PRD_DATE { get; set; }
        public string D_EXP_DATE { get; set; }
        public string S_NOTE { get; set; }
        public double F_QTY { get; set; }
        public string S_UOM { get; set; } = "kg";
        public double F_ACC_C_QTY { get; set; }
        public double F_ACC_B_QTY { get; set; }
        public int N_B_STATE { get; set; }
        public string S_BS_NO { get; set; }
        public string S_BS_TYPE { get; set; }
        //public double F_NET_WEIGHT { get; set; }
        //public double F_GROSS_WEIGHT { get; set; }
        public string S_SUPPLIER_NO { get; set; }
        //public string S_WU { get; set; }
        ///// <summary>
        ///// 来源单行号
        ///// </summary>
        //public string N_BS_ROW_NO { get; set; }
        /// <summary>
        /// 货主
        /// </summary>
        public string S_OWNER { get; set; }
        /// <summary>
        /// ERP仓库
        /// </summary>
        public string S_ERP_WH_CODE { get; set; }
        // 库存地点
        public string S_KCDD { get; set; }
        // 检验批编号
        public string S_JYPBH { get; set; }
        public string S_KJPZSSRQ { get; set; }
        // 输入时间
        public DateTime T_SRSJ { get; set; }
        // 会计凭证日期
        public string S_KJPZSRRQ { get; set; }
        // 采购凭证号
        public string S_CGPZH { get; set; }
        // 采购凭证的项目编号
        public string S_CGPZXMBH { get; set; }
        // 借方/贷方标识
        public string S_JDBS { get; set; }
        // 参考凭证的凭证号
        public string S_CKPZH { get; set; }
        // 参考凭证会计年度
        public string S_CKPZKJND { get; set; }
        public string S_KJPZSRSJ { get; set; }
        // 参考凭证项目
        public string S_CKPZXM { get; set; }
        // 冲销物料凭证编号
        public string S_CXWLPZBH { get; set; }
        public string S_CXPZNF { get; set; }
        public string S_CXWLPZHXM { get; set; }
        public string S_HWSJJYZT { get; set; }
        public string S_GYSZHH { get; set; }
        public string S_PH { get; set; }
        public string S_TSKCBS { get; set; }
        public string S_XSDDXMBH { get; set; }
        public string S_DDH { get; set; }
        public string S_WBS { get; set; }
        public string S_XSDD { get; set; }
    }
}
models/TN_GZ_SZ.cs
New file
@@ -0,0 +1,21 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WCS.Mobox3.pinggao.models
{
     [SugarTable("TN_GZ_SZ")]
    public class TN_GZ_SZ : BaseModel
    {
        //public string S_CG_ID { get; set; }
        /// <summary>
        /// 产品序列号
        /// </summary>
        public int N_ENABLE { get; set; } = 0;
        public DateTime S_GZRQ { get; set; }
    }
}
models/TN_Outbound_Order.cs
@@ -12,6 +12,7 @@
        /// 出库单号
        /// </summary>
        public string S_NO { get; set; }
        public int N_PRIORITY { get; set; }=0;
        public string BUDAT { get; set; }
        public string BLDAT { get; set; }
        public string UNAME { get; set; }
wms/WCSHelper.cs
@@ -207,7 +207,7 @@
        }
        internal static List<WCSTask> GetWaitingTaskList() {
            var db = new SqlHelper<object>().GetInstance();
            return db.Queryable<WCSTask>().Where(a => a.N_B_STATE == 0).ToList();
            return db.Queryable<WCSTask>().Where(a => a.N_B_STATE == 0).OrderByDescending(s=>s.N_PRIORITY).ToList();
        }
        //前移车执行中任务 
        internal static List<WCSTask> GetWaitingTaskGoList()