CreateXmlJobService.cs 17.9 KB
using Hh.Mes.Common.Json;
using Hh.Mes.POJO.ApiEntity;
using Hh.Mes.POJO.Entity;
using Hh.Mes.Service.Repository;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace Hh.Mes.Service.QuartzJobService
{
    public class CreateXmlJobService : RepositorySqlSugar<bus_flameCut_job>
    {

        public void Execute()
        {
            List<bus_flameCut_job> cutList = Context.Queryable<bus_flameCut_job>().Where(x => x.state == "0").ToList();


            foreach (var cut in cutList)
            {
                try
                {
                    var response = CreateXmlByOrder(cut.workPieceNo);
                    if (response.Code.ToString() == "200")
                    { 
                        Context.Updateable<bus_flameCut_job>().SetColumns(x=>x.state =="1")
                            .SetColumns(x => x.updateTime == DateTime.Now) 
                            .SetColumns(x => x.updateby == "sys")
                            .SetColumns(x=> x.msg == "处理成功。")
                            .Where(t => t.id == cut.id)
                            .ExecuteCommand();
                    }
                    else
                    {
                        string msg = response.Message;
                        Context.Updateable<bus_flameCut_job>().SetColumns(x => x.state == "2")
                            .SetColumns(x => x.updateTime == DateTime.Now)
                            .SetColumns(x => x.updateby == "sys")
                            .SetColumns(x => x.msg == msg)
                            .Where(t => t.id == cut.id)
                            .ExecuteCommand();

                    }

                }
                catch (Exception ex)
                {
                    string msg = ex.Message.ToString();
                    Context.Updateable<bus_flameCut_job>().SetColumns(x => x.state == "2")
                           .SetColumns(x => x.updateTime == DateTime.Now)
                           .SetColumns(x => x.updateby == "sys")
                           .SetColumns(x => x.msg == msg)
                           .Where(t => t.id == cut.id)
                           .ExecuteCommand();
                }
            }
            

        }
        public string Serialize(object result)
        {
            return JsonHelper.Instance.Serialize(result);
        }
        public dynamic CreateXmlByOrder(string barCode)
        {
            var response = new POJO.Response.Response(); 
            base_work_order_head work_order = Context.Queryable<base_work_order_head>().First(x => x.workPieceNo == barCode);
            if (work_order == null)
            {
                return response.ResponseError("未获取到对应的工单数据");
            }
            base_work_order_flameCut cuts = Context.Queryable<base_work_order_flameCut>().First(x => x.headKeys.Equals(work_order.keys));
            if (cuts == null)
            {
                return response.ResponseError("未获取到对应的切割数据");
            }
            # region 管段信息
            List<Tube> tubes = new List<Tube>();
            Tube tube = new Tube();
            tube.diameter = work_order.diameter;
            tube.amount = "1";// 固定是1
            tube.material = work_order.materielCode;

            //判断 平口还是马鞍口
            List<Saddle> saddles = new List<Saddle>();
            List<POJO.ApiEntity.PlaneInfo> planes = new List<PlaneInfo>();
            if (cuts.end1_D == "0" || string.IsNullOrEmpty(cuts.end1_D))
            {
                tube.saddle1 = "2";
                PlaneInfo plane = new PlaneInfo();
                plane.angle = "90";
                plane.bevelAngle = "0.0";
                plane.bevelType = "0.0";
                plane.pos = "END1";
                plane.twist = "0.0";
                planes.Add(plane);

            }
            else
            {
                tube.saddle1 = "1";

                Saddle sa1 = new Saddle();
                sa1.angle = string.IsNullOrEmpty(cuts.end1_angle) ? "0" : cuts.end1_angle;
                sa1.bevelAngle = string.IsNullOrEmpty(cuts.end1_beveAngle) ? "0.0" : cuts.end1_beveAngle;
                sa1.bevelType = string.IsNullOrEmpty(cuts.end1_Type) ? "0.0" : cuts.end1_Type;
                sa1.centerOffest = string.IsNullOrEmpty(cuts.end1_centeroffest) ? "0.0" : cuts.end1_centeroffest;
                sa1.diameter = work_order.diameter;
                sa1.pos = "END1";
                sa1.twist = string.IsNullOrEmpty(cuts.end1_twist) ? "0" : cuts.end1_twist;
                saddles.Add(sa1);
            }
            if (cuts.end2_D == "0" || string.IsNullOrEmpty(cuts.end2_D))
            {
                tube.saddle2 = "2";
                PlaneInfo plane = new PlaneInfo();
                plane.angle = "90";
                plane.bevelAngle = "0.0";
                plane.bevelType = "0.0";
                plane.pos = "END2";
                plane.twist = "0.0";
                planes.Add(plane);
            }
            else
            {
                tube.saddle2 = "1";
                Saddle sa2 = new Saddle();
                sa2.angle = string.IsNullOrEmpty(cuts.end2_angle) ? "0" : cuts.end2_angle;
                sa2.bevelAngle = string.IsNullOrEmpty(cuts.end2_beveAngle) ? "0.0" : cuts.end2_beveAngle;
                sa2.bevelType = string.IsNullOrEmpty(cuts.end2_Type) ? "0.0" : cuts.end2_Type;
                sa2.centerOffest = string.IsNullOrEmpty(cuts.end2_centeroffest) ? "0.0" : cuts.end2_centeroffest;
                sa2.diameter = work_order.diameter;
                sa2.pos = "END2";
                sa2.twist = string.IsNullOrEmpty(cuts.end2_twist) ? "0" : cuts.end2_twist;
                saddles.Add(sa2);
            }
            string saddle1Test = tube.saddle1 == "1" || tube.saddle2 == "1" ? "saddle" : "plane";
            string saddle2Test = tube.saddle1 == "2" || tube.saddle2 == "2" ? "plane" : "saddle";
            tube.comment = $"Tube with END1({saddle1Test}) END2({saddle2Test})";
            tube.saddles = saddles;
            tube.planes = planes;
            tube.length = cuts.lenth;
            tube.id = work_order.iD.ToString();
            tube.name = $"{work_order.pipePartsNo}-{work_order.workPieceNo}";  // work_order.workPieceNo;
            tube.thickness = work_order.thickness;



            List<base_work_order_flameCut_d> cut_Ds = Context.Queryable<base_work_order_flameCut_d>().Where(x => x.headKeys == cuts.Keys).ToList();
            List<Hole> holes = new List<Hole>();
            foreach (var cut_d in cut_Ds)
            {
                //<hole angle="75.0" bevelAngle="0.0" bevelType="0.0" centerOffest="0.0" diameter="80.0" pos="hole" thickness="5.0" twist="0.0" xoffset="-200.0" />
                Hole hole = new Hole();
                hole.angle = cut_d.hole_angle;
                hole.bevelAngle = string.IsNullOrEmpty(cut_d.hole_bevelAngle) ? "0" : cut_d.hole_bevelAngle;
                hole.bevelType = string.IsNullOrEmpty(cut_d.hole_bevelType) ? "0" : cut_d.hole_bevelType;
                hole.centerOffest = string.IsNullOrEmpty(cut_d.hole_centerOffest) ? "0" : cut_d.hole_centerOffest;
                hole.diameter = work_order.diameter;
                hole.pos = "hole";
                hole.thickness = string.IsNullOrEmpty(cut_d.thickness) ? "0" : cut_d.thickness;
                hole.twist = string.IsNullOrEmpty(cut_d.hole_twist) ? "0" : cut_d.hole_twist;
                hole.xoffset = string.IsNullOrEmpty(cut_d.hole_offset) ? "0" : cut_d.hole_offset;
                holes.Add(hole);
            }
            tube.holes = holes;
            tubes.Add(tube);
            #endregion
            CutInfoXml xml1 = new CutInfoXml();
            xml1.assemblyID = "1";
            xml1.assemblyName = "aName";
            xml1.id = "1";
            xml1.name = $"{work_order.pipePartsNo}-{work_order.workPieceNo}";//  work_order.workPieceNo;
            xml1.tubes = tubes;
            CreateXmlByCut(xml1, work_order);
            return response;

        }

        public bool CreateXmlByCut(CutInfoXml xmlInfo, base_work_order_head work_order)
        {
            // 创建XmlDocument对象
            XmlDocument xmlDoc = new XmlDocument();

            // 创建XML声明节点
            XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
            xmlDoc.AppendChild(node);
            XmlElement projectNode = xmlDoc.CreateElement("project");
            projectNode.SetAttribute("id", xmlInfo.id);
            projectNode.SetAttribute("name", xmlInfo.name);


            XmlElement source = xmlDoc.CreateElement("source");
            source.SetAttribute("date", DateTime.Now.ToLocalTime().ToString());
            source.SetAttribute("name", "EXCEL");
            source.SetAttribute("version", "1.0");
            projectNode.AppendChild(source);


            XmlElement assembly = xmlDoc.CreateElement("assembly");
            assembly.SetAttribute("id", xmlInfo.assemblyID);
            assembly.SetAttribute("name", work_order.workPieceNo);

            List<Tube> tubeInfos = xmlInfo.tubes;
            if (tubeInfos != null && tubeInfos.Count > 0)
            {
                foreach (var tubeInfo in tubeInfos)
                {
                    XmlElement tube = xmlDoc.CreateElement("tube");
                    tube.SetAttribute("amount", tubeInfo.amount);
                    tube.SetAttribute("comment", tubeInfo.comment);
                    tube.SetAttribute("diameter", tubeInfo.diameter);
                    tube.SetAttribute("id", tubeInfo.id);
                    tube.SetAttribute("length", tubeInfo.length);
                    tube.SetAttribute("material", tubeInfo.material);
                    tube.SetAttribute("name", tubeInfo.name);
                    tube.SetAttribute("thickness", tubeInfo.thickness);

                    int endIndex = 1;
                    foreach (var saddleInfo in tubeInfo.saddles)
                    {
                        XmlElement saddle = xmlDoc.CreateElement("saddle");
                        saddle.SetAttribute("angle", saddleInfo.angle);
                        saddle.SetAttribute("bevelAngle", saddleInfo.bevelAngle);
                        saddle.SetAttribute("bevelType", saddleInfo.bevelType);
                        saddle.SetAttribute("centerOffest", saddleInfo.centerOffest);
                        saddle.SetAttribute("diameter", saddleInfo.diameter);
                        saddle.SetAttribute("pos", $"END{endIndex}");
                        saddle.SetAttribute("twist", saddleInfo.twist);
                        tube.AppendChild(saddle);
                        endIndex++;
                    }

                    foreach (var pl in tubeInfo.planes)
                    {
                        XmlElement plane = xmlDoc.CreateElement("plane");
                        // POJO.ApiEntity.PlaneInfo pl = tubeInfo.planes[1];
                        plane.SetAttribute("angle", pl.angle);
                        plane.SetAttribute("bevelAngle", pl.bevelAngle);
                        plane.SetAttribute("bevelType", pl.bevelType);
                        plane.SetAttribute("pos", $"END{endIndex}");
                        plane.SetAttribute("twist", pl.twist);
                        tube.AppendChild(plane);
                        endIndex++;
                    }
                    #region  要把saddle 放前面
                    /*
                    if (tubeInfo.saddle1 == "1" && tubeInfo.saddles.Count > 0)
                    {
                        XmlElement saddle = xmlDoc.CreateElement("saddle");
                        Saddle saddleInfo = tubeInfo.saddles[0];
                        saddle.SetAttribute("angle", saddleInfo.angle);
                        saddle.SetAttribute("bevelAngle", saddleInfo.bevelAngle);
                        saddle.SetAttribute("bevelType", saddleInfo.bevelType);
                        saddle.SetAttribute("centerOffest", saddleInfo.centerOffest);
                        saddle.SetAttribute("diameter", saddleInfo.diameter);
                        saddle.SetAttribute("pos", saddleInfo.pos);
                        saddle.SetAttribute("twist", saddleInfo.twist);
                        tube.AppendChild(saddle);
                    }
                    else
                    {
                        XmlElement saddle = xmlDoc.CreateElement("plane");
                        POJO.ApiEntity.PlaneInfo plane = tubeInfo.planes[0];
                        saddle.SetAttribute("angle", plane.angle);
                        saddle.SetAttribute("bevelAngle", plane.bevelAngle);
                        saddle.SetAttribute("bevelType", plane.bevelType);
                        saddle.SetAttribute("pos", plane.pos);
                        saddle.SetAttribute("twist", plane.twist);
                        tube.AppendChild(saddle);
                    }

                    if (tubeInfo.saddle2 == "1" && tubeInfo.saddles.Count > 0)
                    {
                        XmlElement saddle = xmlDoc.CreateElement("saddle");
                        if (tubeInfo.saddle1 =="1")
                        {
                            Saddle saddleInfo = tubeInfo.saddles[1];
                            saddle.SetAttribute("angle", saddleInfo.angle);
                            saddle.SetAttribute("bevelAngle", saddleInfo.bevelAngle);
                            saddle.SetAttribute("bevelType", saddleInfo.bevelType);
                            saddle.SetAttribute("centerOffest", saddleInfo.centerOffest);
                            saddle.SetAttribute("diameter", saddleInfo.diameter);
                            saddle.SetAttribute("pos", saddleInfo.pos);
                            saddle.SetAttribute("twist", saddleInfo.twist);
                            tube.AppendChild(saddle);
                        }
                        else
                        {
                            
                                Saddle saddleInfo = tubeInfo.saddles[0];
                                saddle.SetAttribute("angle", saddleInfo.angle);
                                saddle.SetAttribute("bevelAngle", saddleInfo.bevelAngle);
                                saddle.SetAttribute("bevelType", saddleInfo.bevelType);
                                saddle.SetAttribute("centerOffest", saddleInfo.centerOffest);
                                saddle.SetAttribute("diameter", saddleInfo.diameter);
                                saddle.SetAttribute("pos", saddleInfo.pos);
                                saddle.SetAttribute("twist", saddleInfo.twist);
                                tube.AppendChild(saddle); 
                        }
                    }
                    else
                    {
                        if (tubeInfo.saddle1 != "2")
                        {
                            XmlElement plane = xmlDoc.CreateElement("plane");
                            POJO.ApiEntity.PlaneInfo pl = tubeInfo.planes[0];
                            plane.SetAttribute("angle", pl.angle);
                            plane.SetAttribute("bevelAngle", pl.bevelAngle);
                            plane.SetAttribute("bevelType", pl.bevelType);
                            plane.SetAttribute("pos", pl.pos);
                            plane.SetAttribute("twist", pl.twist);
                            tube.AppendChild(plane);
                        }
                        else
                        {
                            XmlElement plane = xmlDoc.CreateElement("plane");
                            POJO.ApiEntity.PlaneInfo pl = tubeInfo.planes[1];
                            plane.SetAttribute("angle", pl.angle);
                            plane.SetAttribute("bevelAngle", pl.bevelAngle);
                            plane.SetAttribute("bevelType", pl.bevelType);
                            plane.SetAttribute("pos", pl.pos);
                            plane.SetAttribute("twist", pl.twist);
                            tube.AppendChild(plane);
                        }
                    }
                    */
                    #endregion
                    if (tubeInfo.holes != null && tubeInfo.holes.Count > 0)
                    {
                        foreach (var item in tubeInfo.holes)
                        {
                            XmlElement hole = xmlDoc.CreateElement("hole");
                            hole.SetAttribute("angle", item.angle);
                            hole.SetAttribute("bevelAngle", item.bevelAngle);
                            hole.SetAttribute("bevelType", item.bevelType);
                            hole.SetAttribute("centerOffest", item.centerOffest);
                            hole.SetAttribute("diameter", item.diameter);
                            hole.SetAttribute("pos", item.pos);
                            hole.SetAttribute("thickness", item.thickness);
                            hole.SetAttribute("twist", item.twist);
                            hole.SetAttribute("xoffset", $"-{item.xoffset}");//要求转为负数

                            tube.AppendChild(hole);
                        }
                    }
                    assembly.AppendChild(tube);
                }

            }
            projectNode.AppendChild(assembly);
            xmlDoc.AppendChild(projectNode);

            // string currentDirectory = AppDomain.CurrentDomain.BaseDirectory;

            string filePathDic = GetDictionaryDictValue("CutXmlUrl", "CutConfig");
            // 定义文件路径
            // string filePath = Path.Combine(currentDirectory,$"xmlDoc//{DateTime.Now.ToString("yyyyMMdd")}" );

            // 检查文件是否已存在,如果不存在则创建
            if (!File.Exists(filePathDic))
            {
                try
                {
                    Directory.CreateDirectory(filePathDic);
                }
                catch (Exception)
                {
                }
            }
            xmlDoc.Save($"{filePathDic}//{xmlInfo.name}.xml");
            return true;
        }

      
    }
}