/// <summary> /// 执行导入EXCEL数据 /// </summary> /// <param name="dataTable"></param> /// <param name="fieldNames"></param> /// <returns></returns> public bool ImportDataByExcel(DataTable dataTable, Dictionary <string, string> fieldNames, string loginUser) { List <SupplierInfo> supplierExcelInfos = CommonDAL.DatatableConvertToList <SupplierInfo>(dataTable).ToList(); if (supplierExcelInfos.Count == 0) { throw new Exception("MC:1x00000043");///数据格式不符合导入规范 } ///获取业务表中要变更的数据集合,准备对比 List <SupplierInfo> supplierInfos = new SupplierDAL().GetListForInterfaceDataSync(supplierExcelInfos.Select(d => d.SupplierNum).ToList()); ///执行的SQL语句 string sql = string.Empty; List <string> fields = new List <string>(fieldNames.Keys); ///逐条处理中间表数据 foreach (var supplierExcelInfo in supplierExcelInfos) { ///当前业务数据表中此工厂的该物流路线时需要新增 SupplierInfo supplierInfo = supplierInfos.FirstOrDefault(d => d.SupplierNum == supplierExcelInfo.SupplierNum); if (supplierInfo == null) { if (string.IsNullOrEmpty(supplierExcelInfo.SupplierNum) || string.IsNullOrEmpty(supplierExcelInfo.SupplierName) || supplierExcelInfo.SupplierType.GetValueOrDefault() == 0) { throw new Exception("MC:0x00000221");///供应商代码、名称、类型为必填项 } ///字段 string insertFieldString = string.Empty; ///值 string insertValueString = string.Empty; for (int i = 0; i < fields.Count; i++) { string valueStr = CommonDAL.GetFieldValueForSql <SupplierInfo>(supplierExcelInfo, fields[i]); if (string.IsNullOrEmpty(valueStr)) { throw new Exception("MC:1x00000043");///数据格式不符合导入规范 } insertFieldString += "[" + fieldNames[fields[i]] + "],"; insertValueString += valueStr + ","; } ///判断业务主键是否重复,以防止EXCEL中有重复数据,适用于基础数据导入 sql += "if not exists (select * from LES.TM_BAS_SUPPLIER with(nolock) where [SUPPLIER_NUM] = N'" + supplierExcelInfo.SupplierNum + "' and [VALID_FLAG] = 1)" + " insert into [LES].[TM_BAS_SUPPLIER] (" + "[FID]," + insertFieldString + "[CREATE_USER]," + "[CREATE_DATE]," + "[VALID_FLAG]" + ") values (" + "NEWID()," ///FID + insertValueString + "N'" + loginUser + "'," ///CREATE_USER + "GETDATE()," ///CREATE_DATE + "1" ///VALID_FLAG + ");"; continue; } if (string.IsNullOrEmpty(supplierExcelInfo.SupplierName) || supplierExcelInfo.SupplierType.GetValueOrDefault() == 0) { throw new Exception("MC:0x00000221");///供应商代码、名称、类型为必填项 } ///值 string valueString = string.Empty; for (int i = 0; i < fields.Count; i++) { string valueStr = CommonDAL.GetFieldValueForSql <SupplierInfo>(supplierExcelInfo, fields[i]); if (string.IsNullOrEmpty(valueStr)) { throw new Exception("MC:1x00000043");///数据格式不符合导入规范 } valueString += "[" + fieldNames[fields[i]] + "] = " + valueStr + ","; } sql += "update [LES].[TM_BAS_SUPPLIER] set " + valueString + "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [ID] = " + supplierInfo.Id + ";"; } /// if (string.IsNullOrEmpty(sql)) { return(false); } return(CommonDAL.ExecuteNonQueryBySql(sql)); }
/// <summary> /// 批量创建看板卡 /// </summary> /// <param name="loginUser"></param> /// <returns></returns> public bool SynchronizationKanBanCardInfos(string loginUser) { #region 准备数据源 StringBuilder sqlBuilder = new StringBuilder(); List <MaintainInhouseLogisticStandardInfo> maintainInhouseLogisticStandardInfos = new MaintainInhouseLogisticStandardDAL().GetList("[STATUS] = " + (int)BasicDataStatusConstants.Enable + "and [INHOUSE_SYSTEM_MODE] = N'" + (int)PullModeConstants.Kanban + "'", string.Empty); if (maintainInhouseLogisticStandardInfos.Count() == 0) { throw new Exception("MC:0x00000256");///不存在可同步的物料看板拉动信息 } ///已生成的看板卡,除了作废的卡片之外 List <KanbanCardInfo> kanbanCardInfos = dal.GetList("[STATUS] <> " + (int)BasicDataStatusConstants.Disabled, string.Empty); ///已生成的看板卡统计信息 var groupKanbanCardInfos = kanbanCardInfos.GroupBy(w => new { w.PartNo, w.PartBoxCode }).Select(w => new { w.Key.PartBoxCode, w.Key.PartNo, SumCount = w.Count() }).ToList(); ///看板零件类 List <KanbanPartBoxInfo> kanbanPartBoxInfos = new KanbanPartBoxDAL().GetList(string.Format("[PART_BOX_CODE] in ('{0}') and [STATUS] = " + (int)BasicDataStatusConstants.Enable + "", string.Join("','", maintainInhouseLogisticStandardInfos.GroupBy(w => new { w.InhousePartClass }).Select(w => w.Key.InhousePartClass).ToArray())), string.Empty); ///供应商信息 List <SupplierInfo> supplierinfos = new SupplierDAL().GetList(string.Format("[SUPPLIER_NUM] IN ('{0}')", maintainInhouseLogisticStandardInfos.GroupBy(w => new { w.SupplierNum }).Select(w => w.Key.SupplierNum).ToArray()), string.Empty); #endregion #region SQL脚本 string sqlstr = @"insert into [LES].[TM_MPM_KANBAN_CARD] ( FID, CARD_NO, PART_BOX_CODE, PART_BOX_NAME, PART_NO, PART_NAME, SUPPLIER_CODE, SUPPLIER_NAME, PART_QTY, PACKAGE_CODE, STATUS, PRINT_CNT, PRINT_TIME, PRINT_USER, USED_STATUS, SCANNED_USER, SCANNED_DATE, VALID_FLAG, CREATE_DATE, CREATE_USER, MODIFY_DATE, MODIFY_USER ) values ({0});" ; #endregion #region 编列数据源生成脚本 foreach (var maintainInhouseLogisticStandardInfo in maintainInhouseLogisticStandardInfos) { ///计算出还可创建多少张看板卡 int createCardCount = 0; var groupKanbanCardInfo = groupKanbanCardInfos.FirstOrDefault(w => w.PartNo == maintainInhouseLogisticStandardInfo.PartNo && w.PartBoxCode == maintainInhouseLogisticStandardInfo.InhousePartClass); if (groupKanbanCardInfo == null) { createCardCount = maintainInhouseLogisticStandardInfo.KanbanCircleCnt.GetValueOrDefault(); } else { createCardCount = maintainInhouseLogisticStandardInfo.KanbanCircleCnt.GetValueOrDefault() - groupKanbanCardInfo.SumCount; } ///如果没有可创建的卡片则继续下一个 if (createCardCount == 0) { continue; } ///获取看板零件类信息,且零件类必须处于已启用状态 KanbanPartBoxInfo kanbanPartBoxInfo = kanbanPartBoxInfos.FirstOrDefault(d => d.PartBoxCode == maintainInhouseLogisticStandardInfo.InhousePartClass); if (kanbanPartBoxInfo == null) { continue; } SupplierInfo supplierInfo = supplierinfos.FirstOrDefault(d => d.SupplierNum == maintainInhouseLogisticStandardInfo.SupplierNum); for (int i = 0; i < createCardCount; i++) { string sqlKanbanPullOrderDetailValue = "NEWID()"///FID + ",N'" + new SeqDefineDAL().GetCurrentCode("KANBAN_CARD_NO", null) + "'" + ",N'HOSPITAL'" //+ ",N'" + kanbanPartBoxInfo.PartBoxCode + "'" + ",N'" + kanbanPartBoxInfo.PartBoxName + "'" + ",N'" + maintainInhouseLogisticStandardInfo.PartNo + "'" + ",N'" + maintainInhouseLogisticStandardInfo.PartCname + "'" + ",N'" + maintainInhouseLogisticStandardInfo.SupplierNum + "'" + ",N'" + (supplierInfo == null ? string.Empty : supplierInfo.SupplierName) + "'"///供应商名称 + "," + maintainInhouseLogisticStandardInfo.InboundPackage.GetValueOrDefault() + ",N'" + maintainInhouseLogisticStandardInfo.InboundPackageModel + "'" + "," + (int)BasicDataStatusConstants.Created + ",NULL" + ",NULL" + ",NULL" + ",10" + ",NULL" + ",NULL" + ",1" ///VALID_FLAG + ",GETDATE()" ///CREATE_DATE + ",N'" + loginUser + "'" ///CREATE_USER + ",NULL" + ",NULL"; sqlBuilder.AppendLine(string.Format(sqlstr, sqlKanbanPullOrderDetailValue)); } } #endregion if (sqlBuilder.Length == 0) { throw new Exception("MC:0x00000249");///不存在需要生成的看板卡 } ///批量创建看板卡时是否同时启用 string batchCreateKanbanCardEnableAtSametime = new ConfigDAL().GetValueByCode("BATCH_CREATE_KANBAN_CARD_ENABLE_AT_SAMETIME"); if (batchCreateKanbanCardEnableAtSametime.ToLower() == "true") { sqlBuilder.AppendLine("update [LES].[TM_MPM_KANBAN_CARD] " + "set [STATUS] = " + (int)BasicDataStatusConstants.Enable + ",[MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "' " + "where [STATUS] = " + (int)BasicDataStatusConstants.Created + ";"); } using (TransactionScope trans = new TransactionScope()) { CommonDAL.ExecuteNonQueryBySql(sqlBuilder.ToString()); trans.Complete(); } return(true); }