服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
5 天以前 beca28ecb3a730ffb33c21e0c55c729774725faf
Tiger.Business.WMS/Extensions/Yada/OutExtension.cs
@@ -1,4 +1,5 @@
using MailKit.Search;
using Microsoft.Scripting.Utils;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Org.BouncyCastle.Asn1.X509;
@@ -41,6 +42,48 @@
                default:
                    return "";
            }
        }
        /// <summary>
        /// 根据发料类型,获取发料单据的选择列表(带分页)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static PageAble<BIZ_WMS_PREP_SRC> GetPickList(this BIZ_WMS_PREP.BIZ_TYPEs type, BaseInputWithPage input)
        {
            // 查询单据明细
            var pickList = new PageAble<BIZ_WMS_PREP_SRC>();
            switch (type)
            {
                //case BIZ_WMS_PREP.BIZ_TYPEs.Others:
                //    {
                //        var dtls = Biz.Db.Queryable<BIZ_U9_MISC_OUT_DTL>().Where(q => q.ORDER_NO == orderNo).ToList();
                //        pickList = dtls.Select(q => q.GetPickItem()).ToList();
                //    }
                //    break;
                //case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder:
                //    {
                //        var dtls = Biz.DataSource["YadaU9C"].Client.Queryable<mes_MOPickList>().Where(q => q.MoDocNo == orderNo).ToList();
                //        pickList = dtls.Select(q => q.GetPickItem()).ToList();
                //    }
                //    break;
                //case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing:
                //    {
                //        var dtls = Biz.DataSource["YadaU9C"].Client.Queryable<mes_SCMPickList>().Where(q => q.PoDocNo == orderNo).ToList();
                //        pickList = dtls.Select(q => q.GetPickItem()).ToList();
                //    }
                //    break;
                //case BIZ_WMS_PREP.BIZ_TYPEs.Transfer:
                //    {
                //        var dtls = Biz.Db.Queryable<BIZ_WMS_TRANSFER_DTL>().Where(q => q.ORDER_NO == orderNo).ToList();
                //        pickList = dtls.Select(q => q.GetPickItem()).ToList();
                //    }
                //    break;
                case BIZ_WMS_PREP.BIZ_TYPEs.Requisition:
                default:
                    break;
            }
            return pickList;
        }
        /// <summary>
@@ -113,17 +156,18 @@
        /// <param name="trans"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        public static async Task<ApiAction> CommitToERP(this BIZ_WMS_PREP.BIZ_TYPEs type, Out_BIZ_WMS_PREP trans, BaseInput input)
        public static async Task<ApiAction> GenerateDlvyBatch(this BIZ_WMS_PREP.BIZ_TYPEs type, Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range)
        {
            switch (type)
            {
                case BIZ_WMS_PREP.BIZ_TYPEs.Others:
                    return await MiscShipApprove(trans, input);
                    return await MiscShipApprove(trans, range);
                case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder:
                    return await CreateIssueDoc(trans, input);
                    return await CreateIssueDoc(trans, range);
                case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing:
                    return await CreatePMIssueDoc(trans, input);
                    return await CreatePMIssueDoc(trans, range);
                case BIZ_WMS_PREP.BIZ_TYPEs.Transfer:
                    return await TransferComplete(trans, range);
                case BIZ_WMS_PREP.BIZ_TYPEs.Requisition:
                default:
                    throw new NotImplementedException($"发料单据类型[{type.GetDesc()}]未实现ERP接口调用");
@@ -134,9 +178,9 @@
        /// U9杂发单审核
        /// </summary>
        /// <param name="trans"></param>
        /// <param name="input"></param>
        /// <param name="range"></param>
        /// <returns></returns>
        private static async Task<ApiAction> MiscShipApprove(Out_BIZ_WMS_PREP trans, BaseInput input)
        private static async Task<ApiAction> MiscShipApprove(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range)
        {
            var action = new ApiAction();
@@ -159,12 +203,19 @@
                return action;
            }
            var curBatch = trans.CurPREP.Order.CurBatch;
            curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue();
            curBatch.PREP_PERSON = trans.UserCode;
            curBatch.FINISH_TIME = DateTime.Now;
            curBatch.REQ_PERSON = trans.UserCode;
            curBatch.DLVY_TIME = DateTime.Now;
            var batch = new BIZ_WMS_PREP_BTH()
            {
                AUTH_ORG = trans.CurPREP.Order.AUTH_ORG,
                ORDER_NO = trans.CurPREP.Order.ORDER_NO,
                DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}",
                STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(),
                PREP_PERSON = trans.UserCode,
                FINISH_TIME = DateTime.Now,
                REQ_PERSON = trans.UserCode,
                DLVY_TIME = DateTime.Now,
            };
            trans.CurPREP.Order.Batchs.Add(batch);
            foreach (var item in trans.CurPREP.Order.SourceDetails)
            {
                item.QTY_ACT_DLVY = item.QTY_ACT_REQ;
@@ -179,6 +230,13 @@
                item.REQ_PERSON = trans.UserCode;
                item.DLVY_TIME = DateTime.Now;
            }
            var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => q.TRANS_NO == trans.CurPREP.Order.ORDER_NO).ToList();
            var history = new List<WMS_ITEM_HIS>();
            foreach (var item in items)
            {
                item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue();
                history.Add(new WMS_ITEM_HIS(item, $"条码[{item.SN}]发料过账成功,操作单据[{item.TRANS_NO}]"));
            }
            //使用统一的事务DB对象
            var db = trans.GetCommitDB();
@@ -186,7 +244,11 @@
            {
                db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                db.Updateable(trans.CurPREP.Order.SourceDetails, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand();
                db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand();
                db.Insertable(batch, trans.UserCode).ExecuteCommand();
                db.Updateable<BIZ_WMS_PREP_SN>(trans.UserCode).Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO)
                    .SetColumns(q => q.DLVY_BATCH == batch.DLVY_BATCH).SetColumns(q => q.STATUS == WMS_ITEM.STATUSs.Sended.GetValue()).ExecuteCommand();
                db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                db.Insertable(history, trans.UserCode).ExecuteCommand();
                db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand();
            });
            if (dbTran.IsSuccess)
@@ -207,18 +269,21 @@
        /// U9创建生产领料单
        /// </summary>
        /// <param name="trans"></param>
        /// <param name="input"></param>
        /// <param name="range"></param>
        /// <returns></returns>
        private static async Task<ApiAction> CreateIssueDoc(Out_BIZ_WMS_PREP trans, BaseInput input)
        private static async Task<ApiAction> CreateIssueDoc(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range)
        {
            var action = new ApiAction();
            var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.ORDER_BATCH == trans.CurPREP.Order.CurBatch.BATCH.ToString()).ToList();
            var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.STATUS == WMS_ITEM.STATUSs.OffShelf.GetValue())
                                                .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurTrans, q => q.TRACE_ID == trans.TransID)
                                                .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurWH, q => q.WH_ID == trans.CurPREP.Option.WHID)
                                                .ToList();
            if (!sns.Any())
            {
                action.IsSuccessed = false;
                //action.LocaleMsg = Biz.L("创建生产领料单失败,备料任务[{0}]批次[{1}]未找到已下架的物料数据");
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, trans.CurPREP.Order.CurBatch.BATCH);
                //action.LocaleMsg = Biz.L("创建生产领料单失败,备料任务[{0}]未找到{1}已下架的物料数据");
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, range.GetDesc());
                return action;
            }
            var wos = Biz.DataSource["YadaU9C"].Client.Queryable<mes_Mo>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.DocNo)).ToList();
@@ -280,14 +345,34 @@
                return action;
            }
            var curBatch = trans.CurPREP.Order.CurBatch;
            curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue();
            curBatch.PREP_PERSON = trans.UserCode;
            curBatch.FINISH_TIME = DateTime.Now;
            curBatch.REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD));
            curBatch.REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code));
            curBatch.REQ_PERSON = trans.UserCode;
            curBatch.DLVY_TIME   = DateTime.Now;
            var batch = new BIZ_WMS_PREP_BTH()
            {
                AUTH_ORG = trans.CurPREP.Order.AUTH_ORG,
                ORDER_NO = trans.CurPREP.Order.ORDER_NO,
                DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}",
                STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(),
                PREP_PERSON = trans.UserCode,
                FINISH_TIME = DateTime.Now,
                REQ_PERSON = trans.UserCode,
                REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)),
                REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)),
                DLVY_TIME = DateTime.Now,
            };
            trans.CurPREP.Order.Batchs.Add(batch);
            foreach (var sn in sns)
            {
                sn.DLVY_BATCH = batch.DLVY_BATCH;
                sn.STATUS = WMS_ITEM.STATUSs.Sended.GetValue();
            }
            var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => sns.Select(s => s.SN).Contains(q.SN)).ToList();
            var history = new List<WMS_ITEM_HIS>();
            foreach (var item in items)
            {
                item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue();
                history.Add(new WMS_ITEM_HIS(item, $"条码[{item.SN}]发料过账成功,操作单据[{item.TRANS_NO}]"));
            }
            var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList();
            var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q));
@@ -302,12 +387,15 @@
            {
                db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                db.Updateable(prepSrcList, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand();
                db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_ID, q.REQ_ORDER, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand();
                db.Insertable(batch, trans.UserCode).ExecuteCommand();
                db.Updateable(sns, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.DLVY_BATCH }).ExecuteCommand();
                db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                db.Insertable(history, trans.UserCode).ExecuteCommand();
            });
            if (dbTran.IsSuccess)
            {
                //action.LocaleMsg = Biz.L($"创建生产领料单[{0}]成功,来源单号如下:{1}");
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.Success", curBatch.REQ_ORDER, string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER)));
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.Success", batch.REQ_ORDER, string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER)));
            }
            else
            {
@@ -322,18 +410,21 @@
        /// U9创建委外生产领料单
        /// </summary>
        /// <param name="trans"></param>
        /// <param name="input"></param>
        /// <param name="range"></param>
        /// <returns></returns>
        private static async Task<ApiAction> CreatePMIssueDoc(Out_BIZ_WMS_PREP trans, BaseInput input)
        private static async Task<ApiAction> CreatePMIssueDoc(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range)
        {
            var action = new ApiAction();
            var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.ORDER_BATCH == trans.CurPREP.Order.CurBatch.BATCH.ToString()).ToList();
            var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.STATUS == WMS_ITEM.STATUSs.OffShelf.GetValue())
                                    .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurTrans, q => q.TRACE_ID == trans.TransID)
                                    .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurWH, q => q.WH_ID == trans.CurPREP.Option.WHID)
                                    .ToList();
            if (!sns.Any())
            {
                action.IsSuccessed = false;
                //action.LocaleMsg = Biz.L("创建委外生产领料单失败,备料任务[{0}]批次[{1}]未找到已下架的物料数据");
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, trans.CurPREP.Order.CurBatch.BATCH);
                //action.LocaleMsg = Biz.L("创建委外生产领料单失败,备料任务[{0}]未找到{1}已下架的物料数据");
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, range.GetDesc());
                return action;
            }
            var temp = sns.GroupBy(q => new { q.ITEM_CODE, q.UNIT, q.WH_CODE, q.LOCATION_CODE })
@@ -395,14 +486,33 @@
                return action;
            }
            var curBatch = trans.CurPREP.Order.CurBatch;
            curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue();
            curBatch.PREP_PERSON = trans.UserCode;
            curBatch.FINISH_TIME = DateTime.Now;
            curBatch.REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD));
            curBatch.REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code));
            curBatch.REQ_PERSON = trans.UserCode;
            curBatch.DLVY_TIME = DateTime.Now;
            var batch = new BIZ_WMS_PREP_BTH()
            {
                AUTH_ORG = trans.CurPREP.Order.AUTH_ORG,
                ORDER_NO = trans.CurPREP.Order.ORDER_NO,
                DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}",
                STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(),
                PREP_PERSON = trans.UserCode,
                FINISH_TIME = DateTime.Now,
                REQ_PERSON = trans.UserCode,
                REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)),
                REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)),
                DLVY_TIME = DateTime.Now,
            };
            trans.CurPREP.Order.Batchs.Add(batch);
            foreach (var sn in sns)
            {
                sn.DLVY_BATCH = batch.DLVY_BATCH;
                sn.STATUS = WMS_ITEM.STATUSs.Sended.GetValue();
            }
            var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => sns.Select(s => s.SN).Contains(q.SN)).ToList();
            var history = new List<WMS_ITEM_HIS>();
            foreach (var item in items)
            {
                item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue();
                history.Add(new WMS_ITEM_HIS(item, $"条码[{item.SN}]发料过账成功,操作单据[{item.TRANS_NO}]"));
            }
            var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList();
            var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q));
@@ -427,7 +537,10 @@
            {
                db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                db.Updateable(prepSrcList, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand();
                db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_ID, q.REQ_ORDER, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand();
                db.Insertable(batch, trans.UserCode).ExecuteCommand();
                db.Updateable(sns, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.DLVY_BATCH }).ExecuteCommand();
                db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                db.Insertable(history, trans.UserCode).ExecuteCommand();
                if (orders.Any())
                {
                   db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand();
@@ -436,7 +549,7 @@
            if (dbTran.IsSuccess)
            {
                //action.LocaleMsg = Biz.L($"创建委外生产领料单[{0}]成功,来源单号如下:{1}");
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.Success", curBatch.REQ_ORDER, string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER)));
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.Success", batch.REQ_ORDER, string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER)));
            }
            else
            {
@@ -446,5 +559,88 @@
            }
            return action;
        }
        /// <summary>
        /// 调拨单完成发料
        /// </summary>
        /// <param name="trans"></param>
        /// <param name="range"></param>
        /// <returns></returns>
        private static async Task<ApiAction> TransferComplete(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range)
        {
            var action = new ApiAction();
            var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList();
            var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Transfer.GetActReqQty(q));
            if (noFinish.Any())
            {
                action.IsSuccessed = false;
                //action.LocaleMsg = Biz.L("备料任务[{0}]未能提交审核,未备料完成的行如下:{1}");
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.TransferComplete.NoFinish", trans.CurPREP.Order.ORDER_NO, string.Join(",", noFinish.Select(q => q.ORDER_LINE)));
                return action;
            }
            var batch = new BIZ_WMS_PREP_BTH()
            {
                AUTH_ORG = trans.CurPREP.Order.AUTH_ORG,
                ORDER_NO = trans.CurPREP.Order.ORDER_NO,
                DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}",
                STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(),
                PREP_PERSON = trans.UserCode,
                FINISH_TIME = DateTime.Now,
                REQ_PERSON = trans.UserCode,
                DLVY_TIME = DateTime.Now,
            };
            trans.CurPREP.Order.Batchs.Add(batch);
            foreach (var item in trans.CurPREP.Order.SourceDetails)
            {
                item.QTY_ACT_DLVY = item.QTY_ACT_REQ;
            }
            trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue();
            //var orders = trans.MainDB.Queryable<BIZ_WMS_TRANSFER>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).ToList();
            //foreach (var item in orders)
            //{
            //    item.STATUS = BIZ_WMS_TRANSFER.STATUSs.Sended.GetValue();
            //    item.PREP_PERSON = trans.UserCode;
            //    item.FINISH_TIME = DateTime.Now;
            //    item.REQ_PERSON = trans.UserCode;
            //    item.DLVY_TIME = DateTime.Now;
            //}
            var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => q.TRANS_NO == trans.CurPREP.Order.ORDER_NO).ToList();
            var history = new List<WMS_ITEM_HIS>();
            foreach(var item in items)
            {
                item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue();
                history.Add(new WMS_ITEM_HIS(item, $"条码[{item.SN}]发料成功,操作单据[{item.TRANS_NO}]"));
            }
            //使用统一的事务DB对象
            var db = trans.GetCommitDB();
            var dbTran = db.UseTran(() =>
            {
                db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                db.Updateable(trans.CurPREP.Order.SourceDetails, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand();
                db.Insertable(batch, trans.UserCode).ExecuteCommand();
                db.Updateable<BIZ_WMS_PREP_SN>(trans.UserCode).Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO)
                    .SetColumns(q => q.DLVY_BATCH == batch.DLVY_BATCH).SetColumns(q => q.STATUS == WMS_ITEM.STATUSs.Sended.GetValue()).ExecuteCommand();
                db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                db.Insertable(history, trans.UserCode).ExecuteCommand();
                //db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand();
            });
            if (dbTran.IsSuccess)
            {
                //action.LocaleMsg = Biz.L($"调拨单发料完成,单号如下:{0}");
                action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.MiscShipApprove.Success", string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER)));
            }
            else
            {
                Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
                //抛出异常
                throw dbTran.ErrorException;
            }
            return action;
        }
    }//endClass
}