using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
using HH.WCS.Mobox3.DSZSH.models;
|
using HH.WCS.Mobox3.DSZSH.util;
|
|
using Newtonsoft.Json;
|
|
using SqlSugar;
|
|
namespace HH.WCS.Mobox3.DSZSH.wms {
|
/// <summary>
|
/// [ 数据库事务处理 ] 帮助类
|
/// </summary>
|
public class DbTranHelper {
|
/// <summary>
|
/// 数据库事务处理 ( 创建任务 )
|
/// </summary>
|
/// <remarks>要求: obj != null</remarks>
|
/// <param name="obj"></param>
|
/// <returns></returns>
|
public static (bool Success, string Message) DoDbTranTask(DbTranTaskObj obj) {
|
var db = new SqlHelper<object>().GetInstance();
|
try {
|
using (var tran = db.Ado.UseTran()) {
|
// 存在[旧]容器关联信息:删除[旧][容器货品明细][货位容器关系],更新[货位][容器数量]
|
if (obj.Old != null) {
|
if (obj.Old.CgDetail != null && db.Deleteable(obj.Old.CgDetail).ExecuteCommand() <= 0) {
|
tran.RollbackTran();
|
return (false, $"删除[旧物料信息]失败!!数据:\n\n{JsonConvert.SerializeObject(obj.Old.CgDetail)}\n");
|
}
|
if (obj.Old.LocCntrRel != null && db.Deleteable(obj.Old.LocCntrRel).ExecuteCommand() <= 0) {
|
tran.RollbackTran();
|
return (false, $"删除[旧货位容器关系]失败!!数据:\n\n{JsonConvert.SerializeObject(obj.Old.LocCntrRel)}\n");
|
}
|
if (obj.Old.Location != null && db.Updateable(obj.Old.Location).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) {
|
tran.RollbackTran();
|
return (false, $"更新[旧货位][当前容器数量]失败!!货位='{obj.Old.Location.S_CODE}',数量=>{obj.Old.Location.N_CURRENT_NUM}");
|
}
|
}
|
|
// 更新[容器表](业务需要)
|
if (obj.ContainerToUpdate != null && db.Updateable(obj.ContainerToUpdate).UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) {
|
return (false, $"更新[容器表]失败!!数据:\n\n{JsonConvert.SerializeObject(obj.ContainerToUpdate)}\n");
|
}
|
|
// 更新[容器货品明细](业务需要)
|
if (obj.CgDetailToUpdate != null && db.Updateable(obj.CgDetailToUpdate).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE, it.T_MODIFY }).ExecuteCommand() <= 0) {
|
tran.RollbackTran();
|
return (false, $"更新[物料明细表]失败!!物料号='{obj.CgDetailToUpdate}',物料状态=>'{obj.CgDetailToUpdate.S_ITEM_STATE}'");
|
}
|
|
// 存在[新][货位容器绑定关系]:插入[货位容器关系表]
|
if (obj.LocCntrRelToInsert != null && db.Insertable(obj.LocCntrRelToInsert).ExecuteCommand() <= 0) {
|
tran.RollbackTran();
|
return (false, $"插入[容器货位绑定表]失败!!数据:\n\n{JsonConvert.SerializeObject(obj.LocCntrRelToInsert)}\n");
|
}
|
|
// 更新[起点][终点][锁状态],创建[任务]
|
if (obj.StartLocToUpdate != null && db.Updateable(obj.StartLocToUpdate).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 (false, $"更新[起点货位锁状态]失败!!起点='{obj.StartLocToUpdate.S_CODE}',锁状态=>'{obj.StartLocToUpdate.S_LOCK_STATE}'");
|
}
|
if (obj.EndLocToUpdate != null && db.Updateable(obj.EndLocToUpdate).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
|
tran.RollbackTran();
|
return (false, $"更新[终点货位锁状态]失败!!终点='{obj.EndLocToUpdate.S_CODE}',锁状态=>'{obj.EndLocToUpdate.S_LOCK_STATE}'");
|
}
|
if (obj.TaskToInsert != null && db.Insertable(obj.TaskToInsert).ExecuteCommand() <= 0) {
|
tran.RollbackTran();
|
return (false, $"生成任务'{obj.TaskToInsert.S_TYPE}'失败!!任务号='{obj.TaskToInsert.S_CODE}',容器号='{obj.TaskToInsert.S_CNTR_CODE}',起点='{obj.TaskToInsert.S_START_LOC}',终点='{obj.TaskToInsert.S_END_LOC}'");
|
}
|
|
// 提交数据库更改
|
tran.CommitTran();
|
return (true, $"生成任务'{obj.TaskToInsert.S_TYPE}'成功!!任务号='{obj.TaskToInsert.S_CODE}',容器号='{obj.TaskToInsert.S_CNTR_CODE}',起点='{obj.TaskToInsert.S_START_LOC}',终点='{obj.TaskToInsert.S_END_LOC}'");
|
}
|
}
|
catch (Exception) {
|
throw; // 由外部方法捕获处理
|
}
|
}
|
}
|
|
public class DbTranTaskObj {
|
public LocCntrCg Old { get; set; } = null;
|
public TN_Container ContainerToUpdate { get; set; } = null;
|
public TN_CG_Detail CgDetailToUpdate { get; set; } = null;
|
public TN_Loc_Container LocCntrRelToInsert { get; set; } = null;
|
public TN_Location StartLocToUpdate { get; set; } = null;
|
public TN_Location EndLocToUpdate { get; set; } = null;
|
public TN_Task TaskToInsert { get; set; } = null;
|
}
|
|
}
|