kazelee
10 小时以前 2ca90a404fa1ab94eb6374f50c6ddd47a2b7f0e6
wms/DbTran.cs
@@ -94,6 +94,59 @@
                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}'");
            }
        }
        /// <summary>
        /// 数据库事务 : 涉及单据明细更新的任务创建
        /// </summary>
        /// <param name="obj"></param>
        /// <remarks><b>[ 要求 ]</b> obj ≠ null ; obj.TaskToInsert ≠ null</remarks>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public static (bool, string) CreateTaskOrderObj(CreateTaskOrderObj obj) {
            var db = new SqlHelper<object>().GetInstance();
            using (var tran = db.Ado.UseTran()) {
                if (obj.OutboundDetailToUpdate != null && db.Updateable(obj.OutboundDetailToUpdate).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY }).ExecuteCommand() <= 0) {
                    tran.RollbackTran();
                    return (false, $"更新[明细表][状态]为[完成]失败!!数据:\n\n{JsonConvert.SerializeObject(obj.OutboundDetailToUpdate)}\n");
                }
                if (obj.SpotCheckDetailToUpdate != null && db.Updateable(obj.SpotCheckDetailToUpdate).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY }).ExecuteCommand() <= 0) {
                    tran.RollbackTran();
                    return (false, $"更新[明细表][状态]为[完成]失败!!数据:\n\n{JsonConvert.SerializeObject(obj.SpotCheckDetailToUpdate)}\n");
                }
                if (obj.RelocationDetailToUpdate != null && db.Updateable(obj.RelocationDetailToUpdate).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY }).ExecuteCommand() <= 0) {
                    tran.RollbackTran();
                    return (false, $"更新[明细表][状态]为[完成]失败!!数据:\n\n{JsonConvert.SerializeObject(obj.RelocationDetailToUpdate)}\n");
                }
                #region 创建任务 + 货位锁
                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) {
                    tran.RollbackTran();
                    throw new ArgumentException("数据库事务处理:待插入的[任务]为空!!"); // 待插入的任务不存在,直接抛出异常
                }
                if (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}'");
                }
                #endregion
                // 提交数据库更改
                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}'");
            }
        }
    }
    public class CreateTaskObj {
@@ -119,8 +172,17 @@
        public TN_CG_Detail CgDetailToUpdate { get; set; } = null;
    }
    public class DbTranObj {
        public List<TN_Location> LocListToUpdate { get; set; }
    public class CreateTaskOrderObj {
        #region 起点货位 / 终点货位 / 任务
        public TN_Location StartLocToUpdate { get; set; } = null;
        public TN_Location EndLocToUpdate { get; set; } = null;
        public TN_Task TaskToInsert { get; set; } = null;
        #endregion
        public TN_Outbound_Detail OutboundDetailToUpdate { get; set; } = null;
        public TN_SpotCheck_Detail SpotCheckDetailToUpdate { get; set; } = null;
        public TN_RelocationList_Detail RelocationDetailToUpdate { get; set; } = null;
    }
}