| | |
| | | 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; |
| | |
| | | // 查询起点货位:数量=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,}; |
| | |
| | | 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)}"); |
| | | } |
| | | |
| | | // 起点终点上锁,创建任务 |
| | |
| | | var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, 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 (locCntrRelOld != null) { |
| | | if (db.Deleteable(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.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) { |
| | | if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"插入[容器货位绑定表]失败!数据:{LogObject(locCntrRel)}"); |
| | | } |
| | | |
| | | if (db.Updateable(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(); |
| | | return NewSimpleResult(500, preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'"); |
| | | } |
| | | |
| | | if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(task).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}"); |
| | | } |
| | |
| | | // 查询起点货位:数量=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)}"); |
| | | } |
| | | |
| | | // 查询容器表:容器类型字段 |
| | |
| | | // 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)}"); |
| | | } |
| | | |
| | | // 起点终点上锁,创建任务 |
| | |
| | | var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName); |
| | | |
| | | using (var tran = db.Ado.UseTran()) { |
| | | if (cgDetailOld != null && db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) { |
| | | if (cgDetailOld != null && db.Deleteable(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) { |
| | | if (locCntrRelOld != null && db.Deleteable(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) { |
| | | if (locOld != null && db.Updateable(locOld).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[旧货位|当前容器数量]失败!货位='{locOld.S_CODE}',数量=>{locOld.N_CURRENT_NUM}"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(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) { |
| | | if (db.Updateable(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(); |
| | | return NewSimpleResult(500, preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'"); |
| | | } |
| | | |
| | | if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(task).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}"); |
| | | } |
| | |
| | | // 查询起点货位:数量=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)}"); |
| | | } |
| | | |
| | | // 查询容器表:容器类型字段 |
| | |
| | | // 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); |
| | |
| | | var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName); |
| | | |
| | | using (var tran = db.Ado.UseTran()) { |
| | | if (cgDetailOld != null && db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) { |
| | | if (cgDetailOld != null && db.Deleteable(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) { |
| | | if (locCntrRelOld != null && db.Deleteable(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) { |
| | | if (locOld != null && db.Updateable(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) { |
| | | if (db.Insertable(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) { |
| | | if (db.Updateable(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(); |
| | | return NewSimpleResult(500, preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'"); |
| | | } |
| | | |
| | | if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(task).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}"); |
| | | } |
| | |
| | | |
| | | 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); |
| | |
| | | cntr.T_MODIFY = DateTime.Now; |
| | | |
| | | 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)}"); |
| | | if (needUpdateContainer && db.Updateable(cntr).UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) { |
| | | 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) { |
| | | if (db.Updateable(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(); |
| | | return NewSimpleResult(500, preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'"); |
| | | } |
| | | |
| | | if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(task).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}"); |
| | | } |
| | |
| | | |
| | | 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); |
| | | WCSHelper.LockEndLoc(ref endLoc); |
| | | var task = WCSHelper.BuildTask(startLoc, endLoc, model.CntId, taskInfo.TaskName); |
| | | |
| | | |
| | | using (var tran = db.Ado.UseTran()) { |
| | | 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) { |
| | | if (db.Updateable(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(); |
| | | return NewSimpleResult(500, preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'"); |
| | | } |
| | | |
| | | if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(task).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}"); |
| | | } |
| | |
| | | /// <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; |
| | |
| | | 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); |
| | | |
| | | 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) { |
| | | if (db.Updateable(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) { |
| | | if (db.Updateable(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(); |
| | | return NewSimpleResult(500, preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'"); |
| | | } |
| | | |
| | | if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(task).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}"); |
| | | } |
| | |
| | | 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") |
| | |
| | | var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName); |
| | | |
| | | using (var tran = db.Ado.UseTran()) { |
| | | if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[货品明细表]失败!物料号='{cgDetail}',物料状态=>'{cgDetail.S_ITEM_STATE}'"); |
| | | } |
| | | |
| | | 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) { |
| | | if (db.Updateable(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(); |
| | | return NewSimpleResult(500, preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'"); |
| | | } |
| | | |
| | | if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(task).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}"); |
| | | } |
| | |
| | | /// <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") |
| | |
| | | |
| | | 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; |
| | |
| | | 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(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) { |
| | | if (db.Updateable(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(); |
| | | return NewSimpleResult(500, preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'"); |
| | | } |
| | | |
| | | if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'"); |
| | | } |
| | | |
| | | if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(task).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | return NewSimpleResult(500, preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}"); |
| | | } |
| | |
| | | /// <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:成品胶出库:"; |
| | | |
| | |
| | | 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 { |
| | |
| | | } |
| | | |
| | | using (var tran = db.Ado.UseTran()) { |
| | | if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(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) { |
| | | if (db.Insertable(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}"); |
| | |
| | | /// <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"); |
| | |
| | | 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 { |
| | |
| | | } |
| | | |
| | | using (var tran = db.Ado.UseTran()) { |
| | | if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(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) { |
| | | if (db.Insertable(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}"); |
| | | } |
| | | } |
| | | |
| | |
| | | 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) |
| | |
| | | } |
| | | } |
| | | catch (Exception ex) { |
| | | info = $"发生了异常:{ex.Message}"; |
| | | LogHelper.InfoEx(ex); |
| | | return result; |
| | | } |
| | |
| | | // return NewMesResult(2, info); |
| | | //} |
| | | |
| | | if (db.Insertable<TN_CG_Detail>(detail).ExecuteCommand() <= 0) { |
| | | return NewMesResult(500, preLog + $"插入[物料明细表]失败!数据:{JsonConvert.SerializeObject(detail)}"); |
| | | if (db.Insertable(detail).ExecuteCommand() <= 0) { |
| | | 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}"); |
| | |
| | | detailList.Add(detail); |
| | | |
| | | using (var tran = db.Ado.UseTran()) { |
| | | if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { |
| | | if (db.Insertable(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) { |
| | | if (db.Insertable(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) { |
| | | if (db.Insertable(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("\"", "'"); |
| | | } |
| | | } |
| | | } |