Exemple #1
0
        private void btnload_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.OpenFileDialog openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
            openFileDialog1.InitialDirectory = System.Windows.Forms.Application.StartupPath; //初始目录,不赋值也可以
            openFileDialog1.Filter           = "xml文件(*.xml) | *.xml";                       //文件类型

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.textBlock2.Text = "你选择的文件为:" + openFileDialog1.FileName;

                XmlSerializer xs            = new XmlSerializer(typeof(TableSettings));
                StreamReader  sr            = new StreamReader(openFileDialog1.FileName);
                var           tableSettings = xs.Deserialize(sr) as TableSettings;
                sr.Close();
                if (tableSettings == null)
                {
                    MessageBox.Show("加载失败");
                }
                tableSettings.FieldSettingsList.ForEach(f => f.Status = "未处理");
                this.tableSettings = tableSettings;
                refreshBind();
            }
        }
Exemple #2
0
        public static bool merge(TableSettings tableSettings, System.ComponentModel.BackgroundWorker backgroundWorker)
        {
            // Start the search for primes and wait.
            UTF8Encoding utf8 = new UTF8Encoding(false);

            //App\Common\Models\XXX
            if (!Directory.Exists(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", "Common", "Models", tableSettings.FolderName)))
            {
                //\Mysql
                Directory.CreateDirectory(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", "Common", "Models", tableSettings.FolderName, "Mysql"));
                //\Mongodb
                Directory.CreateDirectory(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", "Common", "Models", tableSettings.FolderName, "Mongodb"));
            }
            //App\XXX
            if (!Directory.Exists(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", tableSettings.FolderName)))
            {
                //\Models
                Directory.CreateDirectory(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", tableSettings.FolderName, "Models"));
                //\Services
                Directory.CreateDirectory(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", tableSettings.FolderName, "Services"));
                //\Views\Helpers
                Directory.CreateDirectory(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", tableSettings.FolderName, "Views", "Helpers"));
            }
            //App\Backend\Submodules\XXX
            if (!Directory.Exists(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", "Backend", "Submodules", tableSettings.FolderName)))
            {
                //\Models
                Directory.CreateDirectory(Path.Combine(Application.StartupPath, tableSettings.TableName, "App", "Backend", "Submodules", tableSettings.FolderName, "Models"));
            }

            var targetPath1 = Path.Combine(Application.StartupPath, tableSettings.TableName, "schema.php");
            var targetPath2 = Path.Combine(Application.StartupPath, tableSettings.TableName, "mysql.sql");
            var targetPath3 = Path.Combine(Application.StartupPath, tableSettings.TableName + "_settings.xml");
            //App\Common\Models\XXX\Mysql\XXX2.php
            var targetPath4 = Path.Combine(Application.StartupPath, tableSettings.TableName, "App", "Common", "Models", tableSettings.FolderName, "Mysql", tableSettings.ClassName + ".php");
            //App\Common\Models\XXX\XXX2.php
            var targetPath5 = Path.Combine(Application.StartupPath, tableSettings.TableName, "App", "Common", "Models", tableSettings.FolderName, tableSettings.ClassName + ".php");

            //App\XXX\Models\XXX2.php
            var targetPath6 = Path.Combine(Application.StartupPath, tableSettings.TableName, "App", tableSettings.FolderName, "Models", tableSettings.ClassName + ".php");

            //App\Backend\Submodules\XXX\Models\XXX2.php
            var targetPath7 = Path.Combine(Application.StartupPath, tableSettings.TableName, "App", "Backend", "Submodules", tableSettings.FolderName, "Models", tableSettings.ClassName + ".php");

            var writer1 = new StreamWriter(targetPath1, false, utf8);
            var writer2 = new StreamWriter(targetPath2, false, utf8);
            var writer3 = new StreamWriter(targetPath4, false, utf8);
            var writer4 = new StreamWriter(targetPath5, false, utf8);
            var writer5 = new StreamWriter(targetPath6, false, utf8);
            var writer6 = new StreamWriter(targetPath7, false, utf8);

            try
            {
                // 写配置
                XmlSerializer xs = new XmlSerializer(typeof(TableSettings));
                StreamWriter  sw = new StreamWriter(targetPath3);
                xs.Serialize(sw, tableSettings);
                sw.Close();

                int           i            = 0;
                StringBuilder sbSchema     = new StringBuilder("");
                StringBuilder sbMysql      = new StringBuilder("");
                StringBuilder sbReorganize = new StringBuilder("");
                foreach (var f in tableSettings.FieldSettingsList)
                {
                    i++;
                    if (backgroundWorker.CancellationPending)
                    {
                        // Return without doing any more work.
                        throw new Exception("用户取消了操作");
                    }

                    if (backgroundWorker.WorkerReportsProgress)
                    {
                        backgroundWorker.ReportProgress(i);
                    }

                    if (!f.IsSelected)
                    {
                        continue;
                    }
                    f.Status = "处理中";

                    try
                    {
                        var schema = getSchema(f);
                        sbSchema.AppendLine(schema);

                        var mysql = getMysql(f);
                        sbMysql.Append(mysql);

                        var reorganize = getReorganize(f);
                        sbReorganize.Append(reorganize);


                        f.Status = "处理完成";
                    }
                    catch (Exception e1)
                    {
                        f.Status = "处理失败";
                        throw e1;
                    }
                    finally
                    {
                    }
                }

                writer1.Write(sbSchema.ToString());

                // 写mysql
                StringBuilder sb = new StringBuilder("");
                sb.AppendLine(@"DROP TABLE IF EXISTS `" + tableSettings.TableName + "`;");
                sb.AppendLine(@"CREATE TABLE `" + tableSettings.TableName + "` (");
                sb.AppendLine(@"  `_id` char(24) NOT NULL DEFAULT '' COMMENT 'ID',");
                sb.Append(sbMysql.ToString());
                sb.AppendLine(@"  `__CREATE_TIME__` datetime NOT NULL COMMENT '创建时间',");
                sb.AppendLine(@"  `__MODIFY_TIME__` datetime NOT NULL COMMENT '修改时间',");
                sb.AppendLine(@"  `__REMOVED__` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否删除',");
                sb.AppendLine(@"  PRIMARY KEY(`_id`)");
                sb.AppendLine(@") ENGINE = InnoDB DEFAULT CHARSET = utf8 CHECKSUM = 1 DELAY_KEY_WRITE = 1 ROW_FORMAT = DYNAMIC COMMENT = '" + tableSettings.TableComment + "';");
                writer2.Write(sb.ToString());

                // 写class1
                StringBuilder sbClass1 = new StringBuilder("");
                sbClass1.AppendLine(@"<?php");
                sbClass1.AppendLine(string.Format(@"namespace App\Common\Models\{0}\Mysql;", (tableSettings.FolderName)));
                sbClass1.AppendLine(@"use App\Common\Models\Base\Mysql\Base;");
                sbClass1.AppendLine(@"class " + (tableSettings.ClassName) + " extends Base");
                sbClass1.AppendLine(@"{");
                sbClass1.AppendLine(@"    /**");
                sbClass1.AppendLine(@"     * " + tableSettings.TableComment + "管理");
                sbClass1.AppendLine(@"     * This model is mapped to the table " + tableSettings.TableName + "");
                sbClass1.AppendLine(@"     */");
                sbClass1.AppendLine(@"    public function getSource()");
                sbClass1.AppendLine(@"    {");
                sbClass1.AppendLine(@"        return '" + tableSettings.TableName + "';");
                sbClass1.AppendLine(@"    }");
                sbClass1.AppendLine(@"    public function reorganize(array $data)");
                sbClass1.AppendLine(@"    {");
                sbClass1.AppendLine(@"        $data = parent::reorganize($data);");
                sbClass1.Append(sbReorganize.ToString());
                sbClass1.AppendLine(@"        return $data;");
                sbClass1.AppendLine(@"    }");
                sbClass1.Append(@"}");
                writer3.Write(sbClass1.ToString());

                StringBuilder sbClass2 = new StringBuilder("");
                sbClass2.AppendLine(@"<?php");
                sbClass2.AppendLine(string.Format(@"namespace App\Common\Models\{0};", (tableSettings.FolderName)));
                sbClass2.AppendLine(@"use App\Common\Models\Base\Base; ");
                sbClass2.AppendLine(@"class " + (tableSettings.ClassName) + " extends Base");
                sbClass2.AppendLine(@"{");
                sbClass2.AppendLine(@"    function __construct()");
                sbClass2.AppendLine(@"    {");
                sbClass2.AppendLine(string.Format(@"        $this->setModel(new \App\Common\Models\{0}\Mysql\{1}());", (tableSettings.FolderName), (tableSettings.ClassName)));
                sbClass2.AppendLine(@"    }");
                sbClass2.Append(@"}");
                writer4.Write(sbClass2.ToString());


                StringBuilder sbClass3 = new StringBuilder("");
                sbClass3.AppendLine(@"<?php");
                sbClass3.AppendLine(string.Format(@"namespace App\{0}\Models;", (tableSettings.FolderName)));
                sbClass3.AppendLine(string.Format(@"class {0} extends \App\Common\Models\{1}\{2}", (tableSettings.ClassName), (tableSettings.FolderName), (tableSettings.ClassName)));
                sbClass3.AppendLine(@"{");
                sbClass3.AppendLine(@"    /**");
                sbClass3.AppendLine(@"     * 默认排序");
                sbClass3.AppendLine(@"     */");
                sbClass3.AppendLine(@"    public function getDefaultSort()");
                sbClass3.AppendLine(@"    {");
                sbClass3.AppendLine(@"        $sort = array(");
                sbClass3.AppendLine(@"            '_id' => -1");
                sbClass3.AppendLine(@"        );");
                sbClass3.AppendLine(@"        return $sort;");
                sbClass3.AppendLine(@"    }");
                sbClass3.AppendLine(@"    /**");
                sbClass3.AppendLine(@"     * 默认查询条件");
                sbClass3.AppendLine(@"     */");
                sbClass3.AppendLine(@"    public function getQuery()");
                sbClass3.AppendLine(@"    {");
                sbClass3.AppendLine(@"        $query = array();");
                sbClass3.AppendLine(@"        return $query;");
                sbClass3.AppendLine(@"    }");
                sbClass3.Append(@"}");
                writer5.Write(sbClass3.ToString());

                StringBuilder sbClass4 = new StringBuilder("");
                sbClass4.AppendLine(@"<?php");
                sbClass4.AppendLine(string.Format(@"namespace App\Backend\Submodules\{0}\Models;", (tableSettings.FolderName)));
                sbClass4.AppendLine(string.Format(@"class {0} extends \App\Common\Models\{1}\{2}", (tableSettings.ClassName), (tableSettings.FolderName), (tableSettings.ClassName)));
                sbClass4.AppendLine(@"{");
                sbClass4.AppendLine(@"    use\App\Backend\Models\Base;");
                sbClass4.Append(@"}");
                writer6.Write(sbClass4.ToString());

                return(true);
            }
            catch (Exception e)
            {
                //MessageBox.Show(e.Message);
                throw e;
                //return false;
            }
            finally
            {
                writer1.Flush();
                writer1.Close();

                writer2.Flush();
                writer2.Close();

                writer3.Flush();
                writer3.Close();

                writer4.Flush();
                writer4.Close();

                writer5.Flush();
                writer5.Close();

                writer6.Flush();
                writer6.Close();
            }
        }