kazelee
4 天以前 1b6bf29ff7daa1987de65940af52f452cabd6881
api/ApiHelper.cs
@@ -2,13 +2,15 @@
using System.Collections.Generic;
using System.Linq;
using HH.WCS.Mobox3.DSZSH.core;
using HH.WCS.Mobox3.DSZSH.models;
using HH.WCS.Mobox3.DSZSH.util;
using HH.WCS.Mobox3.DSZSH.wms;
using Newtonsoft.Json;
using SqlSugar;
using Swashbuckle.Swagger;
using static HH.WCS.Mobox3.DSZSH.api.ApiModel;
using static HH.WCS.Mobox3.DSZSH.api.OtherModel;
@@ -41,8 +43,12 @@
                // 查询起点货位:数量=0
                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                if (startLoc == null) {
                    return NewSimpleResult(2, preLog + $"没有找到起点货位'{model.StartLoc}'!要求:锁状态='无',当前容器数量=0,所在库区={JsonConvert.SerializeObject(taskInfo.StartAreas)}");
                    return NewSimpleResult(2, preLog + $"没有找到起点货位'{model.StartLoc}'!要求:锁状态='无',当前容器数量=0,所在库区={LogObject(taskInfo.StartAreas)}");
                }
                // 和满托下线入库的逻辑一致,由于容器移动不会更改绑定信息,所以必须删除旧数据
                var locCntrRelOld = db.Queryable<TN_Loc_Container>()
                    .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
                // 绑定货位容器,起点货位当前数量=1
                var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLoc.S_CODE, S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_CNTR_TYPE = cntrType,};
@@ -53,7 +59,7 @@
                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y")
                    .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER }).First();
                if (endLoc == null) {
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无',当前容器数量=0,所在库区={JsonConvert.SerializeObject(taskInfo.EndAreas)}");
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无',当前容器数量=0,所在库区={LogObject(taskInfo.EndAreas)}");
                }
                // 起点终点上锁,创建任务
@@ -62,9 +68,17 @@
                var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
                using (var tran = db.Ado.UseTran()) {
                    if (locCntrRelOld != null) {
                        if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0 &&
                            db.Updateable<TN_Location>().SetColumns(l => l.N_CURRENT_NUM == 0).Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            return NewSimpleResult(500, preLog + $"删除旧货位容器关系表失败!货位编码={locCntrRelOld.S_LOC_CODE},容器编码={locCntrRelOld.S_CNTR_CODE}");
                        }
                    }
                    if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"插入[容器货位绑定表]失败!数据:{JsonConvert.SerializeObject(locCntrRel)}");
                        return NewSimpleResult(500, preLog + $"插入[容器货位绑定表]失败!数据:{LogObject(locCntrRel)}");
                    }
                    if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
@@ -106,7 +120,7 @@
                // 查询起点货位:数量=0
                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                if (startLoc == null) {
                    return NewSimpleResult(1, preLog + $"没有找到起点货位'{model.StartLoc}'!要求:锁状态='无';当前容器数量=0;所在库区={JsonConvert.SerializeObject(taskInfo.StartAreas)}");
                    return NewSimpleResult(1, preLog + $"没有找到起点货位'{model.StartLoc}'!要求:锁状态='无';当前容器数量=0;所在库区={LogObject(taskInfo.StartAreas)}");
                }
                // 查询容器表:容器类型字段
@@ -138,7 +152,7 @@
                // Order:层数从低到高、行、列
                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
                if (endLoc == null) {
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无';当前容器数量=0;所在库区={JsonConvert.SerializeObject(taskInfo.EndAreas)}");
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无';当前容器数量=0;所在库区={LogObject(taskInfo.EndAreas)}");
                }
                // 起点终点上锁,创建任务
@@ -149,12 +163,12 @@
                using (var tran = db.Ado.UseTran()) {
                    if (cgDetailOld != null && db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"删除[旧物料信息]失败!数据:{JsonConvert.SerializeObject(cgDetailOld)}");
                        return NewSimpleResult(500, preLog + $"删除[旧物料信息]失败!数据:{LogObject(cgDetailOld)}");
                    }
                    if (locCntrRelOld != null && db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"删除[旧货位容器关系]失败!数据:{JsonConvert.SerializeObject(locCntrRelOld)}");
                        return NewSimpleResult(500, preLog + $"删除[旧货位容器关系]失败!数据:{LogObject(locCntrRelOld)}");
                    }
                    if (locOld != null && db.Updateable<TN_Location>(locOld).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) {
@@ -164,7 +178,7 @@
                    if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"插入[货位容器绑定表]失败!数据:{JsonConvert.SerializeObject(locCntrRel)}");
                        return NewSimpleResult(500, preLog + $"插入[货位容器绑定表]失败!数据:{LogObject(locCntrRel)}");
                    }
                    if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
@@ -205,7 +219,7 @@
                // 查询起点货位:数量=0
                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                if (startLoc == null) {
                    return NewSimpleResult(1, preLog + $"没有找到起点货位'{model.StartLoc}'!要求:锁状态='无';当前容器数量=0;所在库区={JsonConvert.SerializeObject(taskInfo.StartAreas)}");
                    return NewSimpleResult(1, preLog + $"没有找到起点货位'{model.StartLoc}'!要求:锁状态='无';当前容器数量=0;所在库区={LogObject(taskInfo.StartAreas)}");
                }
                // 查询容器表:容器类型字段
@@ -237,7 +251,7 @@
                // Order:层数从低到高、行、列
                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
                if (endLoc == null) {
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无';当前容器数量=0;所在库区={JsonConvert.SerializeObject(taskInfo.EndAreas)}");
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无';当前容器数量=0;所在库区={LogObject(taskInfo.EndAreas)}");
                }
                WCSHelper.LockStartLoc(ref startLoc);
@@ -247,22 +261,22 @@
                using (var tran = db.Ado.UseTran()) {
                    if (cgDetailOld != null && db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"删除[旧物料信息]失败!数据:{JsonConvert.SerializeObject(cgDetailOld)}");
                        return NewSimpleResult(500, preLog + $"删除[旧物料信息]失败!数据:{LogObject(cgDetailOld)}");
                    }
                    if (locCntrRelOld != null && db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"删除[旧货位容器关系]失败!" + JsonConvert.SerializeObject(locCntrRelOld));
                        return NewSimpleResult(500, preLog + $"删除[旧货位容器关系]失败!" + LogObject(locCntrRelOld));
                    }
                    if (locOld != null && db.Updateable<TN_Location>(locOld).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"更新[旧货位|容器数量]失败!" + JsonConvert.SerializeObject(locOld));
                        return NewSimpleResult(500, preLog + $"更新[旧货位|容器数量]失败!" + LogObject(locOld));
                    }
                    if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"插入[货位容器关系]失败:" + JsonConvert.SerializeObject(locCntrRel));
                        return NewSimpleResult(500, preLog + $"插入[货位容器关系]失败:" + LogObject(locCntrRel));
                    }
                    if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
@@ -325,13 +339,13 @@
                var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where((l, c) => taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First();
                if (startLoc == null) {
                    return NewSimpleResult(3, preLog + $"没有找到合适的起点货位!要求:锁状态='无';当前容器数量=1;所在库区={JsonConvert.SerializeObject(taskInfo.StartAreas)},绑定容器编码='{model.CntId}',绑定容器类型='{cntrType}'");
                    return NewSimpleResult(3, preLog + $"没有找到合适的起点货位!要求:锁状态='无';当前容器数量=1;所在库区={LogObject(taskInfo.StartAreas)},绑定容器编码='{model.CntId}',绑定容器类型='{cntrType}'");
                }
                // 查询终点货位
                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                if (endLoc == null) {
                    return NewSimpleResult(5, preLog + $"没有找到合适的终点货位!要求:锁状态='无';当前容器数量=0;所在库区={JsonConvert.SerializeObject(taskInfo.EndAreas)}");
                    return NewSimpleResult(5, preLog + $"没有找到合适的终点货位!要求:锁状态='无';当前容器数量=0;所在库区={LogObject(taskInfo.EndAreas)}");
                }
                WCSHelper.LockStartLoc(ref startLoc);
@@ -343,7 +357,7 @@
                using (var tran = db.Ado.UseTran()) {
                    if (needUpdateContainer && db.Updateable<TN_Container>(cntr).UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) {
                        return NewSimpleResult(500, preLog + $"更新[容器表]失败!数据:{JsonConvert.SerializeObject(cntr)}");
                        return NewSimpleResult(500, preLog + $"更新[容器表]失败!数据:{LogObject(cntr)}");
                    }
                    if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
@@ -395,13 +409,13 @@
                var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where((l, c) => taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First();
                if (startLoc == null) {
                    return NewSimpleResult(2, preLog + $"没有找到合适的起点货位!要求:锁状态='无',当前容器数量=1,所在库区={JsonConvert.SerializeObject(taskInfo.EndAreas)},绑定容器编码='{model.CntId}',绑定容器类型='{cntrType}'");
                    return NewSimpleResult(2, preLog + $"没有找到合适的起点货位!要求:锁状态='无',当前容器数量=1,所在库区={LogObject(taskInfo.StartAreas)},绑定容器编码='{model.CntId}',绑定容器类型='{cntrType}'");
                }
                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y")
                    .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                if (endLoc == null) {
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无',当前容器数量=0,所在库区={JsonConvert.SerializeObject(taskInfo.EndAreas)}");
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无',当前容器数量=0,所在库区={LogObject(taskInfo.EndAreas)}");
                }
                WCSHelper.LockStartLoc(ref startLoc);
@@ -440,50 +454,33 @@
        /// <returns></returns>
        public static SimpleResult QualifiedBack(QualifiedBackInfo model) {
            var db = new SqlHelper<object>().GetInstance();
            var preLog = "API:抽检合格回库";
            var taskInfo = Settings.GetTaskInfo(ETask.C抽检合格回库);
            var taskName = taskInfo.TaskName;
            var taskInfo = ETask.C抽检合格回库.Info();
            const string preLog = "API:抽检合格回库";
            try {
                var cgDetail = db.Queryable<TN_CG_Detail>()
                    .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode)
                    .First();
                    .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode).First();
                if (cgDetail == null) {
                    preLog = "没有找到待回库的抽检物料:" + JsonConvert.SerializeObject(model);
                    LogHelper.Info(preLog);
                    return NewSimpleResult(2, preLog);
                    return NewSimpleResult(2, preLog + "没有找到待回库的抽检物料:" + LogObject(model));
                }
                var locCntrRel = db.Queryable<TN_Loc_Container>()
                    .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE)
                    .First();
                    .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
                if (locCntrRel == null) {
                    preLog = $"容器{model.CntrCode}在货位容器关系表中不存在";
                    LogHelper.Info(preLog);
                    return NewSimpleResult(3, preLog);
                    return NewSimpleResult(3, preLog + $"容器{model.CntrCode}在货位容器关系表中不存在");
                }
                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y")
                    .Where(l => l.S_CODE == locCntrRel.S_LOC_CODE)
                    .Where(l => l.N_CURRENT_NUM == 1)
                    .Where(l => taskInfo.StartAreas.Contains(l.S_AREA_CODE)) // 起点货区符合任务要求
                    .First();
                var startLoc = db.Queryable<TN_Location>()
                    .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where(l => l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First();
                if (startLoc == null) {
                    preLog = $"没有找到容器{model.CntrCode}的起点货位,或不具备取货要求:未上锁、有货物";
                    LogHelper.Info(preLog);
                    return NewSimpleResult(4, preLog);
                    return NewSimpleResult(4, preLog + $"没有找到合适的起点货位!要求:锁状态='无',当前容器数量=1,所在库区={LogObject(taskInfo.StartAreas)}");
                }
                var endAreas = locCntrRel.S_CNTR_CODE == "托盘" ? taskInfo.EndAreas_Pallet : taskInfo.EndAreas_Goodpack;
                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y")
                    .Where(l => endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                if (endLoc == null) {
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无',当前容器数量=0,所在库区={JsonConvert.SerializeObject(endAreas)}");
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无',当前容器数量=0,所在库区={LogObject(endAreas)}");
                }
                cgDetail.N_ITEM_STATE = 0;
@@ -491,7 +488,7 @@
                cgDetail.T_MODIFY = DateTime.Now;
                var cntId = locCntrRel.S_CNTR_CODE;
                var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
                var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskInfo.TaskName);
                WCSHelper.LockStartLoc(ref startLoc);
                WCSHelper.LockEndLoc(ref endLoc);
@@ -499,9 +496,7 @@
                using (var tran = db.Ado.UseTran()) {
                    if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE, it.T_MODIFY }).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        preLog = $"生成'{taskInfo.TaskName}'失败:修改物料状态为'合格'失败";
                        LogHelper.Info(preLog);
                        return NewSimpleResult(500, preLog);
                        return NewSimpleResult(500, preLog + $"更新[物料明细表]失败!物料号='{cgDetail.S_ITEM_CODE}',物料状态=>'合格'");
                    }
                    if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
@@ -539,25 +534,25 @@
            const string preLog = "API:抽检不合格移库:";
            try {
                if (!taskInfo.StartAreas.Contains(model.EndArea)) {
                    return NewSimpleResult(1, $"终点库区'{model.EndArea}'不满足条件!需要:货区={JsonConvert.SerializeObject(model.EndArea)}");
                if (!taskInfo.EndAreas.Contains(model.EndArea)) {
                    return NewSimpleResult(1, preLog + $"终点库区'{model.EndArea}'不满足条件!需要:货区={LogObject(taskInfo.EndAreas)}");
                }
                var cgDetail = db.Queryable<TN_CG_Detail>()
                    .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode).First();
                if (cgDetail == null) {
                    return NewSimpleResult(2, $"没有在[物料明细表]中找到物料!要求:物料编码='{model.ItemCode}',容器编码='{model.CntrCode}'");
                    return NewSimpleResult(2, preLog + $"没有在[物料明细表]中找到物料!要求:物料编码='{model.ItemCode}',容器编码='{model.CntrCode}'");
                }
                var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
                if (locCntrRel == null) {
                    return NewSimpleResult(3, $"在[货位容器关系表]中没有找到容器'{model.CntrCode}'!");
                    return NewSimpleResult(3, preLog + $"在[货位容器关系表]中没有找到容器'{model.CntrCode}'!");
                }
                // 查询起点货位:数量=1
                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y").Where(l => l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First();
                if (startLoc == null) {
                    return NewSimpleResult(1, preLog + $"没有找到起点货位'{locCntrRel.S_LOC_CODE}'!要求:锁状态='无';当前容器数量=1;所在库区={JsonConvert.SerializeObject(taskInfo.StartAreas)}");
                    return NewSimpleResult(1, preLog + $"没有找到起点货位'{locCntrRel.S_LOC_CODE}'!要求:锁状态='无';当前容器数量=1;所在库区={LogObject(taskInfo.StartAreas)}");
                }
                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y")
@@ -610,10 +605,8 @@
        /// <returns></returns>
        public static SimpleResult RestBack(RestBackInfo model) {
            var db = new SqlHelper<object>().GetInstance();
            var info = "";
            var taskInfo = ETask.W尾料回库.Info();
            const string preLog = "API:尾料回库";
            const string preLog = "API:尾料回库:";
            
            try {
                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y")
@@ -624,16 +617,14 @@
                var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_LOC_CODE == model.StartLoc).First();
                if (locCntrRel == null) {
                    info = $"没有找到起点货位{model.StartLoc}所绑定的容器";
                    LogHelper.Info(info);
                    return NewSimpleResult(3, info);
                    return NewSimpleResult(3, preLog + $"没有找到起点货位{model.StartLoc}所绑定的容器");
                }
                var endAreas = locCntrRel.S_CNTR_CODE == "托盘" ? taskInfo.EndAreas_Pallet : taskInfo.EndAreas_Goodpack;
                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y")
                    .Where(l => endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                if (endLoc == null) {
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无',当前容器数量=0,所在库区={JsonConvert.SerializeObject(endAreas)}");
                    return NewSimpleResult(3, preLog + $"没有找到合适的终点货位!要求:锁状态='无',当前容器数量=0,所在库区={LogObject(endAreas)}");
                }
                var cntId = locCntrRel.S_CNTR_CODE;
@@ -643,10 +634,10 @@
                var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskInfo.TaskName);
                using (var tran = db.Ado.UseTran()) {
                    if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewSimpleResult(500, preLog + $"插入[容器货位绑定表]失败!数据:{JsonConvert.SerializeObject(locCntrRel)}");
                    }
                    //if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
                    //    tran.RollbackTran();
                    //    return NewSimpleResult(500, preLog + $"插入[容器货位绑定表]失败!数据:{LogObject(locCntrRel)}");
                    //}
                    if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
@@ -679,8 +670,6 @@
        /// <returns></returns>
        public static SimpleResult FinishedOutbound(FinishedOutboundInfo model) {
            var db = new SqlHelper<object>().GetInstance();
            var info = "";
            var taskInfo = ETask.C成品胶出库.Info();
            const string preLog = "API:成品胶出库:";
@@ -690,9 +679,7 @@
                var cgDetailList = SelectCgByTotalQty(model.Qty, model.ItemCode, model.BatchNo, model.CntrType, model.ForcedOut);
                if (cgDetailList.Count == 0) {
                    info = "没有合适的物料可以出库";
                    LogHelper.Info(info);
                    return NewSimpleResult(3, info);
                    return NewSimpleResult(3, preLog + $"没有合适的物料可以出库");
                }
                var order = new TN_Outbound_Order {
@@ -719,24 +706,18 @@
                using (var tran = db.Ado.UseTran()) {
                    if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        info = "生成出库单失败:" + JsonConvert.SerializeObject(order);
                        LogHelper.Info(info);
                        return NewSimpleResult(2, info);
                        return NewSimpleResult(2, preLog + "生成出库单失败:" + LogObject(order));
                    }
                    if (db.Insertable<TN_Outbound_Detail>(detailList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        info = "生成出库单明细失败";
                        LogHelper.Info(info);
                        return NewSimpleResult(4, info);
                        return NewSimpleResult(4, preLog + "生成出库单明细失败:" + LogObject(detailList));
                    }
                    tran.CommitTran();
                }
                info = "生成出库单成功";
                LogHelper.Info(info);
                return NewSimpleResult(0, info);
                return NewSimpleResult(0, preLog + "生成出库单成功");
            }
            catch (Exception ex) {
                return NewSimpleResult(-1, preLog + $"发生了异常:{ex.Message}\n{ex.StackTrace}");
@@ -749,10 +730,8 @@
        /// <returns></returns>
        public static SimpleResult FinishedOutboundForce(FinishedOutboundInfo model) {
            var db = new SqlHelper<object>().GetInstance();
            var info = "";
            var taskInfo = Settings.GetTaskInfo(ETask.C成品胶出库);
            var taskName = taskInfo.TaskName;
            var taskInfo = ETask.C成品胶出库.Info();
            const string preLog = "API:成品胶出库:";
            try {
                var orderNo = GenerateOrderNo("出库单号", "CKD");
@@ -760,9 +739,7 @@
                var cgDetailList = SelectCgByTotalQty(model.Qty, model.ItemCode, model.BatchNo, model.CntrType, model.ForcedOut);
                if (cgDetailList.Count == 0) {
                    info = "没有合适的物料可以出库";
                    LogHelper.Info(info);
                    return NewSimpleResult(3, info);
                    return NewSimpleResult(3, preLog + $"没有合适的物料可以出库");
                }
                var order = new TN_Outbound_Order {
@@ -789,29 +766,21 @@
                using (var tran = db.Ado.UseTran()) {
                    if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        info = "生成出库单失败:" + JsonConvert.SerializeObject(order);
                        LogHelper.Info(info);
                        return NewSimpleResult(2, info);
                        return NewSimpleResult(2, preLog + "生成出库单失败:" + LogObject(order));
                    }
                    if (db.Insertable<TN_Outbound_Detail>(detailList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        info = "生成出库单明细失败";
                        LogHelper.Info(info);
                        return NewSimpleResult(4, info);
                        return NewSimpleResult(4, preLog + "生成出库单明细失败:" + LogObject(detailList));
                    }
                    tran.CommitTran();
                }
                info = "生成出库单成功";
                LogHelper.Info(info);
                return NewSimpleResult(0, info);
                return NewSimpleResult(0, preLog + "生成出库单成功");
            }
            catch (Exception ex) {
                info = $"发生了异常:{ex.Message}";
                LogHelper.InfoEx(ex);
                return NewSimpleResult(1, info);
                return NewSimpleResult(-1, preLog + $"发生了异常:{ex.Message}\n{ex.StackTrace}");
            }
        }
@@ -819,7 +788,6 @@
            var db = new SqlHelper<object>().GetInstance();
            var result = new List<TN_CG_Detail>();
            var targetNum = qty;
            var info = "";
            try {
                var targetCg = db.Queryable<TN_CG_Detail>()
                    .Where(a => a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo)
@@ -883,7 +851,6 @@
                }
            }
            catch (Exception ex) {
                info = $"发生了异常:{ex.Message}";
                LogHelper.InfoEx(ex);
                return result;
            }
@@ -956,10 +923,10 @@
                //}
                if (db.Insertable<TN_CG_Detail>(detail).ExecuteCommand() <= 0) {
                    return NewMesResult(500, preLog + $"插入[物料明细表]失败!数据:{JsonConvert.SerializeObject(detail)}");
                    return NewMesResult(500, preLog + $"插入[物料明细表]失败!数据:{LogObject(detail)}");
                }
                return NewMesResult(500, preLog + $"插入[物料明细表]成功!数据:{JsonConvert.SerializeObject(detail)}");
                return NewMesResult(500, preLog + $"插入[物料明细表]成功!数据:{LogObject(detail)}");
            }
            catch (Exception ex) {
                return NewMesResult(-1, preLog + $"发生了异常:{ex.Message}\n{ex.StackTrace}");
@@ -1096,26 +1063,30 @@
                using (var tran = db.Ado.UseTran()) {
                    if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewErpResult(500, preLog + $"生成[出库单]失败!数据:{JsonConvert.SerializeObject(order)}");
                        return NewErpResult(500, preLog + $"生成[出库单]失败!数据:{LogObject(order)}");
                    }
                    if (db.Insertable<TN_Outbound_Detail>(detailList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewErpResult(500, preLog + $"生成[出库单明细]失败!数据:{JsonConvert.SerializeObject(detailList)}");
                        return NewErpResult(500, preLog + $"生成[出库单明细]失败!数据:{LogObject(detailList)}");
                    }
                    if (db.Insertable<TN_Outbound_Plan>(outboundPlan).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        return NewErpResult(500, preLog + $"生成[出库单计划记录表]失败!数据:{JsonConvert.SerializeObject(outboundPlan)}");
                        return NewErpResult(500, preLog + $"生成[出库单计划记录表]失败!数据:{LogObject(outboundPlan)}");
                    }
                    tran.CommitTran();
                    return NewErpResult(0, preLog + $"生成[出库单]成功!出库单:{JsonConvert.SerializeObject(order)}\n出库单明细:{JsonConvert.SerializeObject(detail)}");
                    return NewErpResult(0, preLog + $"生成[出库单]成功!出库单:{LogObject(order)}\n出库单明细:{LogObject(detail)}");
                }
            }
            catch (Exception ex) {
                return NewErpResult(1, preLog + $"发生了异常:{ex.Message}\n{ex.StackTrace}");
            }
        }
        private static string LogObject(object obj) {
            return JsonConvert.SerializeObject(obj).Replace("\"", "'");
        }
    }
}