/// <summary>
        /// InsertInfo
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public bool InsertInfo(InboundTypeInfo info)
        {
            int cnt = dal.GetCounts("[ITEM_NAME] = N'" + info.ItemName + "' and [CODE_FID] = N'" + codeFid + "'");

            if (cnt > 0)
            {
                throw new Exception("MC:0x00000119");///进仓类型不能重复
            }
            string itemValue = new SeqDefineDAL().GetCurrentCode("INBOUND_TYPE_VALUE");

            cnt = dal.GetCounts("[ITEM_VALUE] = " + itemValue + " and [CODE_FID] = N'" + codeFid + "'");
            if (cnt > 0 || string.IsNullOrEmpty(itemValue))
            {
                throw new Exception("MC:0x00000119");///进仓类型不能重复
            }
            CodeItemInfo codeItemInfo = new CodeItemInfo();

            codeItemInfo.Fid        = Guid.NewGuid();
            codeItemInfo.ItemValue  = int.Parse(itemValue);
            codeItemInfo.ItemName   = info.ItemName;
            codeItemInfo.Comments   = info.Comments;
            codeItemInfo.CodeFid    = Guid.Parse(codeFid);
            codeItemInfo.ValidFlag  = true;
            codeItemInfo.CreateUser = info.CreateUser;
            codeItemInfo.CreateDate = info.CreateDate;
            return(dal.Add(codeItemInfo) > 0 ? true : false);
        }
        /// <summary>
        /// IFM-004系统接口-接收
        /// </summary>
        /// <param name="sourceSystem"></param>
        /// <param name="logFid"></param>
        /// <param name="methodCode"></param>
        /// <param name="keyValue"></param>
        /// <param name="msgContent"></param>
        /// <param name="errorCode"></param>
        /// <param name="errorMsg"></param>
        /// <param name="loginUser"></param>
        /// <param name="executeStartTime"></param>
        /// <returns></returns>
        public static string GetCreateInboundLogSql(string sourceSystem, Guid logFid, string methodCode, string keyValue, string msgContent, string errorCode, string errorMsg, string loginUser, DateTime executeStartTime, int executeResult = (int)ExecuteResultConstants.Success)
        {
            ///交易编号
            string transNo = new SeqDefineDAL().GetCurrentCode("INTERFACE_TRANS_NO", sourceSystem.ToUpper(), ownerSystem);

            return("insert into [LES].[TI_IFM_" + sourceSystem.ToUpper() + "_INBOUND_LOG] "
                   + "(FID, TRANS_NO, SOURCE_SYSTEM, TARGET_SYSTEM, METHOD_CODE, EXECUTE_START_TIME, EXECUTE_END_TIME, EXECUTE_RESULT, EXECUTE_TIMES, KEY_VALUE, MSG_CONTENT, ERROR_CODE, ERROR_MSG, VALID_FLAG, CREATE_USER, CREATE_DATE) "
                   + "values (N'" + logFid + "', N'" + transNo + "', N'" + sourceSystem + "', N'" + ownerSystem + "', N'" + methodCode + "', N'" + executeStartTime + "', GETDATE(), " + executeResult + ", 1, N'" + keyValue + "', N'" + msgContent.Replace("'", "''") + "', N'" + errorCode + "', N'" + errorMsg + "', 1, N'" + loginUser + "', GETDATE());");
        }
Example #3
0
        /// <summary>
        /// 完成
        /// </summary>
        /// <param name="rowsKeyValues"></param>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public bool CompleteInfos(List <string> rowsKeyValues, string loginUser)
        {
            if (dal.GetList("[ID] in (" + string.Join(",", rowsKeyValues.ToArray()) + ") and [STATUS] = " + (int)PackageBarcodeStatusConstants.GroupSupport, "[ID]").Count != rowsKeyValues.Count)
            {
                throw new Exception("MC:0x00000462");///状态为已组托才能进行完成操作
            }
            List <PackageBarcodeInfo> packageBarcodes = dal.GetList("[ID] in (" + string.Join(",", rowsKeyValues.ToArray()) + ")", "[ID]");

            if (packageBarcodes == null || packageBarcodes.Count() == 0)
            {
                throw new Exception("MC:0x00000084");///数据错误
            }
            DataTable dt = CommonDAL.ExecuteDataTableBySql("select [SUPPLIER_NUM],[DOCK],[WM_NO],[ZONE_NO] from [LES].[TT_PCM_PACKAGE_BARCODE] where [ID] in (" + string.Join(",", rowsKeyValues.ToArray()) + ")  group by [SUPPLIER_NUM],[DOCK],[WM_NO],[ZONE_NO]");



            List <PackageBarcodeDetailInfo> packageBarcodeDetails = new PackageBarcodeDetailDAL().GetList("[PACKAGE_BARCODE_FID] in ('" + string.Join("','", packageBarcodes.Select(d => d.Fid.GetValueOrDefault()).ToArray()) + "')", string.Empty);
            StringBuilder stringBuilder = new StringBuilder();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                List <PackageBarcodeInfo> barcodeInfos = packageBarcodes.Where(d => d.Dock == dt.Rows[i]["DOCK"].ToString() && d.SupplierNum == dt.Rows[i]["SUPPLIER_NUM"].ToString() && d.WmNo == dt.Rows[i]["WM_NO"].ToString() && d.ZoneNo == dt.Rows[i]["ZONE_NO"].ToString()).ToList();
                if (barcodeInfos == null)
                {
                    throw new Exception("MC:0x00000084");///数据错误
                }
                Guid   guid    = Guid.NewGuid();
                string OrderNo = new SeqDefineDAL().GetCurrentCode("POUT_ORDER_NO");
                stringBuilder.Append("insert into [LES].[TT_PCM_PACKAGE_OUTBOUND]([FID],[ORDER_NO],[S_WM_NO],[S_ZONE_NO],[SUPPLIER_NUM],[T_DOCK],[STATUS],[VALID_FLAG],[CREATE_DATE],[CREATE_USER])values(N'" + guid + "',N'" + OrderNo + "',N'" + barcodeInfos.FirstOrDefault().WmNo + "',N'" + barcodeInfos.FirstOrDefault().ZoneNo + "',N'" + barcodeInfos.FirstOrDefault().SupplierNum + "',N'" + barcodeInfos.FirstOrDefault().Dock + "'," + (int)WmmOrderStatusConstants.Published + ",1,GETDATE(),N'" + loginUser + "')\n");

                stringBuilder.Append("update [LES].[TT_PCM_PACKAGE_BARCODE] set [PACKAGE_ORDER_NO] = N'" + OrderNo + "',[PACKAGE_ORDER_TYPE] = 001,[PACKAGE_ORDER_FID] = N'" + guid + "',[MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "'  where [ID] in ('" + string.Join("','", barcodeInfos.Select(d => d.Id).ToArray()) + "')\n");
                foreach (var items in barcodeInfos)
                {
                    List <PackageBarcodeDetailInfo> infos = packageBarcodeDetails.Where(d => d.PackageBarcodeFid == items.Fid).ToList();
                    foreach (var info in infos)
                    {
                        Guid fid = new Guid();
                        stringBuilder.Append("insert into [LES].[TT_PCM_PACKAGE_OUTBOUND_DETAIL] ([FID],[ORDER_FID],[ORDER_NO],[S_WM_NO],[S_ZONE_NO],[S_DLOC],[SUPPLIER_NUM],[PACKAGE_MODEL],[PACKAGE_CNAME],[PACKAGE_TYPE],[PACKAGE_QTY],[PACKAGE_BARCODE],[PACKAGE_BARCODE_FID],[VALID_FLAG],[CREATE_DATE],[CREATE_USER])values(");
                        stringBuilder.Append("N'" + fid + "',N'" + guid + "',N'" + OrderNo + "',N'" + items.WmNo + "',N'" + items.ZoneNo + "',N'" + items.Dloc + "',N'" + items.SupplierNum + "',N'" + info.PackageModel + "',N'" + info.PackageCname + "',N'" + info.PackageType + "',N'" + info.PackageQty + "',N'" + items.BarcodeNo + "',N'" + items.Fid + "',1,GETDATE(),N'" + loginUser + "'");
                        stringBuilder.Append(")\n");
                    }
                }
            }
            stringBuilder.Append("update [LES].[TT_PCM_PACKAGE_BARCODE] set [STATUS] = N'" + (int)PackageBarcodeStatusConstants.GroupSingle + "', [MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "'  where [ID] in (" + string.Join(",", rowsKeyValues.ToArray()) + ")\n");
            using (TransactionScope trans = new TransactionScope())
            {
                if (!string.IsNullOrEmpty(stringBuilder.ToString()))
                {
                    CommonDAL.ExecuteNonQueryBySql(stringBuilder.ToString());
                }
                trans.Complete();
            }
            return(true);
        }
        /// <summary>
        /// IFM-005系统接口-发送
        /// </summary>
        /// <param name="targetSystem"></param>
        /// <param name="logFid"></param>
        /// <param name="methodCode"></param>
        /// <param name="keyValue"></param>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public static string GetCreateOutboundLogSql(string targetSystem, Guid logFid, string methodCode, string keyValue, string loginUser)
        {
            ///交易编号
            string transNo = new SeqDefineDAL().GetCurrentCode("INTERFACE_TRANS_NO", ownerSystem, targetSystem.ToUpper());

            return("insert into [LES].[TI_IFM_" + targetSystem.ToUpper() + "_OUTBOUND_LOG] "
                   + "(FID, TRANS_NO, SOURCE_SYSTEM, TARGET_SYSTEM, METHOD_CODE, KEY_VALUE, EXECUTE_RESULT, VALID_FLAG, CREATE_USER, CREATE_DATE) "
                   + "values (N'" + logFid + "', N'" + transNo + "', N'" + ownerSystem + "', N'" + targetSystem.ToUpper() + "', N'" + methodCode + "', N'" + keyValue + "', " + (int)ExecuteResultConstants.Submit + ", 1, N'" + loginUser + "', GETDATE());"
                   + "insert into [LES].[TI_IFM_" + targetSystem.ToUpper() + "_OUTBOUND_DETAIL_LOG] "
                   + "(FID, LOG_FID, TRANS_NO, METHOD_CODE, EXECUTE_RESULT, VALID_FLAG, CREATE_USER, CREATE_DATE,EXECUTE_START_TIME) "
                   + "values (NEWID(), N'" + logFid + "', N'" + transNo + "', N'" + methodCode + "', " + (int)ExecuteResultConstants.Submit + ", 1, N'" + loginUser + "', GETDATE(),GETDATE());");
        }
Example #5
0
        /// <summary>
        /// InsertInfo
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public long InsertInfo(MessageInfo info)
        {
            int cnt = dal.GetCounts("[MESSAGE_CN] = N'" + info.MessageCn + "' and [MESSAGE_TYPE] = " + info.MessageType.GetValueOrDefault() + "");

            if (cnt > 0)
            {
                throw new Exception("MC:1x00000019");///同一类型下提示消息不能重复
            }
            if (!string.IsNullOrEmpty(info.MessageEn))
            {
                cnt = dal.GetCounts("[MESSAGE_EN] = N'" + info.MessageEn + "' and [MESSAGE_TYPE] = " + info.MessageType.GetValueOrDefault() + "");
                if (cnt > 0)
                {
                    throw new Exception("MC:1x00000019");///同一类型下提示消息不能重复
                }
            }
            ///消息代码
            string messageType = "0";

            switch (info.MessageType.GetValueOrDefault())
            {
            case (int)MessageTypeConstants.SysMsg: messageType = "1"; break;

            case (int)MessageTypeConstants.ProgramMsg: messageType = "7"; break;

            case (int)MessageTypeConstants.ClientMsg: messageType = "3"; break;

            default: messageType = "0"; break;
            }
            ///
            string messageCode = new SeqDefineDAL().GetCurrentCode("MESSAGE_CODE", messageType);

            cnt = dal.GetCounts("[MESSAGE_CODE] = N'" + messageCode + "'");
            if (cnt > 0)
            {
                throw new Exception("MC:1x00000000");///消息代码重复,请确认后重新保存
            }
            info.MessageCode = messageCode;
            return(dal.Add(info));
        }
        /// <summary>
        /// 看板生成拉动单
        /// </summary>
        /// <param name="cardNos"></param>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public bool CreateKanbanPullOrder(List <String> cardNos, string loginUser, bool isFilterLoginUser = false)
        {
            if (cardNos.Count == 0)
            {
                throw new Exception("MC:3x00000011");///看板卡数据不能为空
            }
            #region 初始化SQL脚本
            ///主表字符串
            string sqlKanbanPullOrder = @"insert into [LES].[TT_MPM_KANBAN_PULL_ORDER] (
                FID,
                ORDER_CODE,
				PART_BOX_CODE,
				PART_BOX_NAME,
				ROUTE_CODE,
				ROUTE_NAME,
				SOURCE_ZONE_NO,
				SOURCE_WM_NO,
				TARGET_ZONE_NO,
				TARGET_WM_NO,
				PICK_UP_FINISH_TIME,
				PICK_UP_USER,
				DELIVERY_FINISH_TIME,
				DELIVERY_USER,
				PRINT_CNT,
				PRINT_TIME,
				PRINT_USER,
				STATUS,
				VALID_FLAG,
				CREATE_DATE,
				CREATE_USER) VALUES ({0});"                ;
            ///明细表字符串
            string sqlKanbanPullOrderDetail = @"insert into [LES].[TT_MPM_KANBAN_PULL_ORDER_DETAIL] (
                FID,
				ORDER_FID,
				ORDER_CODE,
                ORDER_STATUS,
				CARD_NO,
				PART_NO,
				PART_NAME,
				SUPPLIER_CODE,
				SUPPLIER_NAME,
				PART_QTY,
				PACKAGE_CODE,
				PACKAGE_QTY,
				VALID_FLAG,
				CREATE_DATE,
				CREATE_USER) VALUES ({0});"                ;
            #endregion

            ///获取所有看板卡信息

            List <KanbanCardInfo> kanbanCardInfos = GetKanBanCardsListIsByLoginUser(cardNos, loginUser, isFilterLoginUser);
            if (kanbanCardInfos.Count == 0)
            {
                throw new Exception("MC:3x00000011");///看板卡数据不能为空
            }
            if (cardNos.Count != kanbanCardInfos.Count)
            {
                throw new Exception("MC:0x00000257");///所提交的看板卡状态必须为已启用且不能为已扫描
            }
            ///根据看板卡信息中的零件类代码②对物料需求进行分组
            var groupbyPartboxcode = kanbanCardInfos.GroupBy(ml => new { ml.PartBoxCode }).Select(w => w.Key).ToList();

            #region 根据零件类获取看板拉动物料拉动对应拉动零件
            List <MaintainInhouseLogisticStandardInfo> maintainInhouseLogisticStandardInfos
                = new MaintainInhouseLogisticStandardBLL().GetList(
                      "[INHOUSE_PART_CLASS] in ('"
                      + string.Join("','", groupbyPartboxcode.Select(w => w.PartBoxCode))
                      + "') and [STATUS] = " + (int)BasicDataStatusConstants.Enable
                      + " AND [INHOUSE_SYSTEM_MODE]=N'"
                      + (int)PullModeConstants.Kanban
                      + "'", string.Empty);
            if (maintainInhouseLogisticStandardInfos.Count == 0)
            {
                throw new Exception("0x00000233");///没有已启用的物料拉动信息
            }
            #endregion

            #region 获取所有看板零件类以分组方式去重
            List <KanbanPartBoxInfo> kanbanPartBoxInfos = new KanbanPartBoxDAL().GetList(
                string.Format("[STATUS] = "
                              + (int)BasicDataStatusConstants.Enable
                              + " and [PART_BOX_CODE] in ('{0}') ", string.Join("','", groupbyPartboxcode.Select(w => w.PartBoxCode))), string.Empty);
            if (kanbanPartBoxInfos.Count == 0)
            {
                throw new Exception("MC:3x00000014");///看板零件类数据错误
            }
            #endregion

            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("update [LES].[TM_MPM_KANBAN_CARD] " +
                                     "set [USED_STATUS] = " + (int)KanbanCardUseStatusConstants.Scaned + "," +
                                     "[MODIFY_USER] = N'" + loginUser + "'," +
                                     "[MODIFY_DATE] = GETDATE() " +
                                     "where [ID] in (" + string.Join(",", kanbanCardInfos.Select(d => d.Id).ToArray()) + ");");

            #region 遍历看板卡信息
            foreach (var partboxcode in groupbyPartboxcode)
            {
                ///获取看板零件类信息
                KanbanPartBoxInfo kanbanPartBoxInfo = kanbanPartBoxInfos.FirstOrDefault(d => d.PartBoxCode == partboxcode.PartBoxCode);
                ///TT_MPM_KANBAN_PULL_ORDER.FID
                Guid pullOrderFid = Guid.NewGuid();
                ///看板拉动单号②依据序列号规则中的KANBAN_PULL_ORDER_CODE进行生成,明细中拉动单号③相同于主表
                string orderCode = new SeqDefineDAL().GetCurrentCode("KANBAN_PULL_ORDER_CODE", "KB");///TODO:看板拉动单号生成

                ///看板拉动单外键①为NEW.GUID,同时作为看板拉动单明细的主表外键②,明细中外键①为NEW.GUID
                ///物流路线代码⑤名称⑥、来源仓库⑧存储区⑦、目标仓库⑩存储区⑨从零件类代码③对应的看板零件类TM_MPM_KANBAN_PART_BOX信息中获取
                ///创建时间获取数据库服务器时间,创建人取自于参数操作用户
                ///创建后看板拉动单状态⑱为20.已发布,数据有效标记⑲为true,看板拉动单其它字段在生成时留空
                #region TT_MPM_KANBAN_PULL_ORDER
                string sqlKanbanPullOrderValue = "N'" + pullOrderFid.ToString() + "'"           ///FID
                                                 + ",N'" + orderCode + "'"                      ///ORDER_CODE
                                                 + ",N'" + kanbanPartBoxInfo.PartBoxCode + "'"  ///PART_BOX_CODE
                                                 + ",N'" + kanbanPartBoxInfo.PartBoxName + "'"  ///PART_BOX_NAME
                                                 + ",N'" + kanbanPartBoxInfo.RouteCode + "'"    ///ROUTE_CODE
                                                 + ",N'" + kanbanPartBoxInfo.RouteName + "'"    ///ROUTE_NAME
                                                 + ",N'" + kanbanPartBoxInfo.SourceZoneNo + "'" ///SOURCE_ZONE_NO
                                                 + ",N'" + kanbanPartBoxInfo.SourceWmNo + "'"   ///SOURCE_WM_NO
                                                 + ",N'" + kanbanPartBoxInfo.TargetZoneNo + "'" ///TARGET_ZONE_NO
                                                 + ",N'" + kanbanPartBoxInfo.TargetWmNo + "'"   ///TARGET_WM_NO
                                                 + ",NULL"                                      ///PICK_UP_FINISH_TIME
                                                 + ",NULL"                                      ///PICK_UP_USER
                                                 + ",NULL"                                      ///DELIVERY_FINISH_TIME
                                                 + ",NULL"                                      ///DELIVERY_USER
                                                 + ",NULL"                                      ///PRINT_CNT
                                                 + ",NULL"                                      ///PRINT_TIME
                                                 + ",NULL"                                      ///PRINT_USER
                                                 + "," + (int)PullOrderStatusConstants.Released ///STATUS
                                                 + ",1"                                         ///VALID_FLAG
                                                 + ",GETDATE()"                                 ///CREATE_DATE
                                                 + ",N'" + loginUser + "'";                     ///CREATE_USER
                #endregion

                stringBuilder.AppendLine(string.Format(sqlKanbanPullOrder, sqlKanbanPullOrderValue));

                List <KanbanCardInfo> kanbanCards = kanbanCardInfos.Where(d => d.PartBoxCode == partboxcode.PartBoxCode).ToList();

                #region 根据看板卡信息获取所有零件物料拉动信息
                var maintainInhouseLogisticStandardInfosparts = from a in maintainInhouseLogisticStandardInfos
                                                                join b in kanbanCards.Where(w => w.PartBoxCode == partboxcode.PartBoxCode).GroupBy(w => new { w.PartBoxCode, w.PartNo }).Select(w => new { w.Key.PartBoxCode, w.Key.PartNo })
                                                                on new { a.InhousePartClass, a.PartNo } equals new { InhousePartClass = b.PartBoxCode, b.PartNo }
                select a;
                #endregion


                foreach (var kanbanCard in kanbanCards)
                {
                    ///看板卡号①=④、物料号④=⑤、物料名称⑤=⑥、物料数量⑧=⑨、包装型号⑨=⑩
                    ///包装数量⑪默认为1,数据有效标记⑫为true
                    ///若看板卡信息中指定了供应商代码⑥名称⑦,则看板拉动单明细中供应商代码⑦名称⑧从看板卡信息中获取
                    #region TT_MPM_KANBAN_PULL_ORDER_DETAIL
                    string sqlKanbanPullOrderDetailValue = "NEWID()"                                      ///FID
                                                           + ",N'" + pullOrderFid.ToString() + "'"        ///ORDER_FID
                                                           + ",N'" + orderCode + "'"                      ///ORDER_CODE
                                                           + "," + (int)PullOrderStatusConstants.Released ///ORDER_STATUS
                                                           + ",N'" + kanbanCard.CardNo + "'"              ///CARD_NO
                                                           + ",N'" + kanbanCard.PartNo + "'"              ///PART_NO
                                                           + ",N'" + kanbanCard.PartName + "'"            ///PART_NAME
                                                           + ",N'" + kanbanCard.SupplierCode + "'"        ///SUPPLIER_CODE
                                                           + ",N'" + kanbanCard.SupplierName + "'"        ///SUPPLIER_NAME
                                                           + "," + kanbanCard.PartQty.GetValueOrDefault() ///PART_QTY
                                                           + ",N'" + kanbanCard.PackageCode + "'"         ///PACKAGE_CODE
                                                           + ",1"                                         ///PACKAGE_QTY
                                                           + ",1"                                         ///VALID_FLAG
                                                           + ",GETDATE()"                                 ///CREATE_DATE
                                                           + ",N'" + loginUser + "'";                     ///CREATE_USER
                    #endregion

                    stringBuilder.AppendLine(string.Format(sqlKanbanPullOrderDetail, sqlKanbanPullOrderDetailValue));
                }
                #region 单据衔接
                MaterialPullingOrderInfo mpOrder = new MaterialPullingOrderInfo();
                mpOrder.OrderNo          = orderCode;
                mpOrder.PartBoxCode      = kanbanPartBoxInfo.PartBoxCode;                                                                               ///零件类2
                mpOrder.PartBoxName      = kanbanPartBoxInfo.PartBoxName;                                                                               ///零件类名称3
                mpOrder.Plant            = string.Empty;                                                                                                ///工厂4
                mpOrder.Workshop         = string.Empty;                                                                                                ///车间5
                mpOrder.AssemblyLine     = string.Empty;                                                                                                ///流水线6
                mpOrder.SupplierNum      = string.Empty;                                                                                                ///供应商代码7
                mpOrder.SupplierName     = string.Empty;                                                                                                ///供应商名称
                mpOrder.SourceZoneNo     = kanbanPartBoxInfo.SourceZoneNo;                                                                              ///来源存储区8
                mpOrder.SourceWmNo       = kanbanPartBoxInfo.SourceWmNo;                                                                                ///来源仓库9
                mpOrder.TargetZoneNo     = kanbanPartBoxInfo.TargetZoneNo;                                                                              ///目标存储区10
                mpOrder.TargetWmNo       = kanbanPartBoxInfo.TargetWmNo;                                                                                ///目标仓库11
                mpOrder.TargetDock       = string.Empty;                                                                                                ///道口12
                mpOrder.PlanShippingTime = DateTime.Now.AddMinutes(kanbanPartBoxInfo.PickUpTime.GetValueOrDefault());                                   ///建议交货时间
                mpOrder.PlanDeliveryTime = mpOrder.PlanShippingTime.GetValueOrDefault().AddMinutes(kanbanPartBoxInfo.DeliveryTime.GetValueOrDefault()); ///预计到厂时间14 = 建议交货时间 – 送货时间
                mpOrder.PublishTime      = DateTime.Now;
                mpOrder.AsnFlag          = false;
                mpOrder.OrderType        = 0;///TODO:对于看板拉动单应该的值,如果后续用到则需要定义枚举
                mpOrder.MaterialPullingOrderDetailInfos = (from m in maintainInhouseLogisticStandardInfosparts
                                                           select new MaterialPullingOrderDetailInfo
                {
                    OrderNo = orderCode,                                                                      ///拉动单号1
                    SupplierNum = m.SupplierNum,                                                              ///供应商2
                    PartNo = m.PartNo,                                                                        ///物料号3
                    PartCname = m.PartCname,                                                                  ///物料号中文名称4
                    PartEname = m.PartEname,                                                                  ///物料号英文名称5
                    //Uom = m.PartUnits,///计量单位6
                    PackageQty = m.InboundPackage.GetValueOrDefault(),                                        ///入库单包装数量7
                    PackageModel = m.InboundPackageModel,                                                     ///入库包装编号8
                    RequirePackageQty = kanbanCards.Where(w => w.PartNo == m.PartNo).Count(),                 ///需求包装数量9
                    RequirePartQty = (kanbanCards.Where(w => w.PartNo == m.PartNo).Sum(w => w.PartQty) ?? 0), ///需求物料数量10
                    TargetZoneNo = kanbanPartBoxInfo.TargetZoneNo,
                    TargetWmNo = kanbanPartBoxInfo.TargetWmNo
                }).ToList();
                ///执行单据衔接
                stringBuilder.AppendLine(MaterialPullingCommonBLL.Handler(mpOrder, loginUser));
                #endregion
            }
            #endregion

            ///数据保存时使用SQL拼接多条insert语句方式一次提交执行,执行失败需要同步返回至客户端
            using (TransactionScope trans = new TransactionScope())
            {
                CommonDAL.ExecuteNonQueryBySql(stringBuilder.ToString());
                trans.Complete();
            }
            return(true);
        }
        /// <summary>
        /// 入库数据导入
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="fieldNames"></param>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public bool ImportDataByExcel(DataTable dataTable, Dictionary <string, string> fieldNames, string loginUser)
        {
            List <ReceiveDetailInfo> receiveDetailInfos = CommonDAL.DatatableConvertToList <ReceiveDetailInfo>(dataTable).ToList();

            if (receiveDetailInfos.Count == 0)
            {
                throw new Exception("MC:1x00000043");///数据格式不符合导入规范
            }
            List <MaintainPartsInfo> maintainPartsInfos = new MaintainPartsDAL().GetListForInterfaceDataSync(receiveDetailInfos.Select(d => d.PartNo).ToList());
            ///SUPPLIER_NUM.60、BOOK_KEEPER、RECEIVE_TYPE.70、TRAN_TIME.80、ORGANIZATION_FID.90、WM_NO.30、COST_CENTER.100、CONTRACT_NO.110合并
            var groupReceives = receiveDetailInfos
                                .GroupBy(b => new { b.SupplierNum, b.BookKeeper, b.ReceiveType, b.TranTime, b.OrganizationFid, b.WmNo, b.CostCenter, b.ContractNo })
                                .Select(p => new { p.Key }).ToList();
            string sql = string.Empty;

            foreach (var groupReceive in groupReceives)
            {
                string receiveNo  = new SeqDefineDAL().GetCurrentCode("RECEIVE_NO");
                Guid   receiveFid = Guid.NewGuid();
                List <ReceiveDetailInfo> receiveDetailList = receiveDetailInfos.Where(d =>
                                                                                      d.SupplierNum == groupReceive.Key.SupplierNum &&
                                                                                      d.BookKeeper == groupReceive.Key.BookKeeper &&
                                                                                      d.ReceiveType == groupReceive.Key.ReceiveType &&
                                                                                      d.TranTime == groupReceive.Key.TranTime &&
                                                                                      d.OrganizationFid == groupReceive.Key.OrganizationFid &&
                                                                                      d.WmNo == groupReceive.Key.WmNo &&
                                                                                      d.CostCenter == groupReceive.Key.CostCenter &&
                                                                                      d.ContractNo == groupReceive.Key.ContractNo).ToList();
                int rowNo = 1;
                foreach (var receiveDetail in receiveDetailList)
                {
                    ///PART_NO.10、PART_ENAME.60、ZONE_NO.40、DLOC.50、ACTUAL_QTY.20
                    MaintainPartsInfo maintainPartsInfo = maintainPartsInfos.FirstOrDefault(d => d.PartNo == receiveDetail.PartNo);
                    if (maintainPartsInfo == null)
                    {
                        if (string.IsNullOrEmpty(receiveDetail.PartNo))
                        {
                            throw new Exception("MC:0x00000227");///器材编号不能为空
                        }
                        sql += "insert into [LES].[TM_BAS_MAINTAIN_PARTS] "
                               + "(FID, PART_NO, PART_CNAME, PART_ENAME, PART_UNITS, PART_CLS, PART_GROUP, PURCHASE_UNIT_PRICE, VALID_FLAG, CREATE_USER, CREATE_DATE) values "
                               + "(NEWID(), "
                               + "N'" + receiveDetail.PartNo + "', "
                               + "N'" + receiveDetail.PartCname + "', "
                               + "N'" + receiveDetail.PartEname + "', "
                               + "N'" + receiveDetail.PartUnits + "', "
                               + "N'" + receiveDetail.PartCls + "', "
                               + "N'" + receiveDetail.PartGroup + "', "
                               + "" + receiveDetail.PurchaseUnitPrice.GetValueOrDefault() + ", "
                               + "1, N'" + loginUser + "', GETDATE());";
                    }
                    else
                    {
                        ///物料描述
                        receiveDetail.PartCname = maintainPartsInfo.PartCname;
                        ///规格型号
                        receiveDetail.PartCls = maintainPartsInfo.PartCls;
                        ///产地
                        // receiveDetail.OriginPlace = maintainPartsInfo.OriginPlace;
                        ///计量单位
                        receiveDetail.MeasuringUnitNo = maintainPartsInfo.PartUnits;
                        ///物料采购单价
                        //receiveDetail.PurchaseUnitPrice = maintainPartsInfo.PurchaseUnitPrice;
                    }

                    receiveDetail.PartPrice = receiveDetail.PurchaseUnitPrice.GetValueOrDefault() * receiveDetail.ActualQty.GetValueOrDefault();
                    sql += "insert into [LES].[TT_WMM_RECEIVE_DETAIL] "
                           + "(FID, RECEIVE_FID, SUPPLIER_NUM, TARGET_WM, TARGET_ZONE, TARGET_DLOC, PART_NO, PART_CNAME, PART_ENAME, MEASURING_UNIT_NO, ACTUAL_QTY, TRAN_NO, RUNSHEET_NO, ROW_NO, ORIGIN_PLACE, PURCHASE_UNIT_PRICE, PART_PRICE, PART_CLS, VALID_FLAG, CREATE_USER, CREATE_DATE) values "
                           + "(NEWID(), "
                           + "N'" + receiveFid + "', "
                           + "N'" + groupReceive.Key.SupplierNum + "', "
                           + "N'" + receiveDetail.WmNo + "', "
                           + "N'" + receiveDetail.ZoneNo + "', "
                           + "N'" + receiveDetail.Dloc + "', "
                           + "N'" + receiveDetail.PartNo + "', "
                           + "N'" + receiveDetail.PartCname + "', "
                           + "N'" + receiveDetail.PartEname + "', "
                           + "N'" + receiveDetail.PartUnits + "', "
                           + "" + receiveDetail.ActualQty.GetValueOrDefault() + ", "
                           + "N'" + receiveNo + "', "
                           + "N'" + groupReceive.Key.ContractNo + "', "
                           + "" + rowNo++ + ", "
                           + "N'" + receiveDetail.OriginPlace + "', "
                           + "" + receiveDetail.PurchaseUnitPrice.GetValueOrDefault() + ", "
                           + "" + receiveDetail.PartPrice.GetValueOrDefault() + ", "
                           + "N'" + receiveDetail.PartCls + "', "
                           + "1, N'" + loginUser + "', GETDATE());";
                }
                ///物料价格合计
                decimal sumOfPrice = receiveDetailList.Sum(d => d.PartPrice.GetValueOrDefault());
                ///物料合计数量
                decimal sumPartQty = receiveDetailList.Sum(d => d.ActualQty.GetValueOrDefault());

                if (!DateTime.TryParse(groupReceive.Key.TranTime.ToString("yyyy-MM-dd HH:mm:ss"), out DateTime tranTime))
                {
                    throw new Exception("MC:0x00000328");///入库时间不能为空
                }
                sql += "insert into [LES].[TT_WMM_RECEIVE] "
                       + "(FID, RECEIVE_NO, SUPPLIER_NUM, WM_NO, RECEIVE_TYPE, TRAN_TIME, BOOK_KEEPER, STATUS, RUNSHEET_NO, ORGANIZATION_FID, COST_CENTER, SUM_PART_QTY, SUM_OF_PRICE, VALID_FLAG, CREATE_USER, CREATE_DATE) values "
                       + "(N'" + receiveFid + "', "
                       + "N'" + receiveNo + "', "
                       + "N'" + groupReceive.Key.SupplierNum + "', "
                       + "N'" + groupReceive.Key.WmNo + "', "
                       + "" + groupReceive.Key.ReceiveType + ", "
                       + "N'" + tranTime.ToString("yyyy-MM-dd HH:mm:ss") + "', "
                       + "N'" + groupReceive.Key.BookKeeper + "', "
                       + "" + (int)WmmOrderStatusConstants.Created + ", "
                       + "N'" + groupReceive.Key.ContractNo + "', "
                       + "N'" + groupReceive.Key.OrganizationFid + "', "
                       + "N'" + groupReceive.Key.CostCenter + "', "
                       + "" + sumPartQty + ", "
                       + "" + sumOfPrice + ", "
                       + "1, N'" + loginUser + "', GETDATE());";
            }
            if (string.IsNullOrEmpty(sql))
            {
                return(false);
            }
            return(CommonDAL.ExecuteNonQueryBySql(sql));
        }