LaserCutService.cs 8.79 KB
using ApkInfo;
using Enyim.Caching.Configuration;
using Hh.Mes.Common;
using Hh.Mes.Common.config;
using Hh.Mes.Common.Json;
using Hh.Mes.Common.log;
using Hh.Mes.Common.Redis;
using Hh.Mes.Pojo.System;
using Hh.Mes.POJO.ApiEntity;
using Hh.Mes.POJO.Entity;
using Hh.Mes.POJO.EnumEntitys;
using Hh.Mes.POJO.Request;
using Hh.Mes.POJO.Response;
using Hh.Mes.POJO.ViewModel;
using Hh.Mes.POJO.WebEntity;
using Hh.Mes.Service.Repository;
using Hh.Mes.Service.SystemAuth;
using Org.BouncyCastle.Asn1.X509;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Text.Json.Nodes;
using System.Xml;
using static Google.Protobuf.WellKnownTypes.Field;
using static Microsoft.AspNetCore.Hosting.Internal.HostingApplication;

namespace Hh.Mes.Service
{
    public class LaserCutService : RepositorySqlSugar<dynamic>
    {

        /// <summary>
        /// 激光切割零件推送
        /// </summary>
        /// <param name="workOrderCode">工单code 生产订单号</param>
        /// <returns></returns>
        public void pushLoft(string workOrderCode)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(workOrderCode)) { return; }

                //查询接口工单列表
                var workOrderList = base.Context.Queryable<base_work_order_head>().Where(x => x.workOrderCode == workOrderCode).ToList();
                if (workOrderList.Count == 0) { return; }

                var orderkeys = workOrderList.Select(x => x.keys).ToList();
                //查询激光切割end列表
                var workOrderendinfoList = base.Context.Queryable<base_work_order_endinfo>().Where(x => orderkeys.Contains(x.headKeys)).ToList();

                //查询激光切割holes列表
                var workOrderholesList = base.Context.Queryable<base_work_order_holes>().Where(x => orderkeys.Contains(x.headKeys)).ToList();

                //推送数据组合
                pushLoftModel pmode = new pushLoftModel();
                List<Part> partList = new List<Part>();

                base_material material = null;

                foreach (var order in workOrderList)
                {
                    material = base.Context.Queryable<base_material>().Where(x => x.materialCode == order.materielCode).First();
                    if (material != null) { continue; }

                    Part part = new Part();
                    part.PartID = order.workPieceNo;
                    part.MaterialID = order.materielCode;
                    part.Texture = material.types;
                    part.Norm = material.specifications;
                    part.Remarks = order.lineCode;

                    NestingJsonModel jsonModel = new NestingJsonModel();
                    jsonModel.bar_code = order.barCode;
                    jsonModel.part_name = order.workPieceNo;
                    jsonModel.material = material.types;
                    jsonModel.diameter = material.diameter;
                    jsonModel.thickness = material.thickness;
                    jsonModel.length = order.cutLength.ToString();
                    jsonModel.quantity = 1;

                    //激光切割end数据
                    var endinfo1 = workOrderendinfoList.Where(x => x.end_type.Contains("1") && x.headKeys == order.keys).ToList();
                    var endinfo2 = workOrderendinfoList.Where(x => x.end_type.Contains("2") && x.headKeys == order.keys).ToList();

                    if (endinfo1.Count > 0)
                    {
                        var end1list = new List<End1Item>();

                        foreach (var end in endinfo1)
                        {
                            End1Item end1Item = new End1Item();
                            end1Item.bevelString = end.bevelString;

                            Point point = new Point();
                            point.x = end.point_x;
                            point.y = end.point_y;
                            point.z = end.point_z;

                            end1Item.point = point;

                            Normal normal = new Normal();
                            normal.x = end.normal_x;
                            normal.y = end.normal_y;
                            normal.z = end.normal_z;

                            end1Item.normal = normal;

                            end1list.Add(end1Item);
                        }
                        jsonModel.end1 = end1list;
                    }

                    if (endinfo2.Count > 0)
                    {
                        var end12ist = new List<End2Item>();

                        foreach (var end in endinfo2)
                        {
                            End2Item end2Item = new End2Item();
                            end2Item.bevelString = end.bevelString;

                            Point point = new Point();
                            point.x = end.point_x;
                            point.y = end.point_y;
                            point.z = end.point_z;

                            end2Item.point = point;

                            Normal normal = new Normal();
                            normal.x = end.normal_x;
                            normal.y = end.normal_y;
                            normal.z = end.normal_z;

                            end2Item.normal = normal;

                            end12ist.Add(end2Item);
                        }
                        jsonModel.end2 = end12ist;
                    }

                    //激光切割holes数据
                    var holesList = workOrderholesList.Where(x => x.headKeys == order.keys).ToList();

                    if (holesList.Count > 0)
                    {
                        var holess = new List<HolesItem>();

                        foreach (var holes in holesList)
                        {
                            HolesItem holesItem = new HolesItem();
                            holesItem.bevelString = holes.bevelString;

                            StartPoint startPoint = new StartPoint();
                            startPoint.x = holes.startPoint_x;
                            startPoint.y = holes.startPoint_y;
                            startPoint.z = holes.startPoint_z;

                            holesItem.startPoint = startPoint;

                            EndPoint endPoint = new EndPoint();
                            endPoint.x = holes.endPoint_x;
                            endPoint.y = holes.endPoint_y;
                            endPoint.z = holes.endPoint_z;

                            holesItem.endPoint = endPoint;

                            holess.Add(holesItem);
                        }
                        jsonModel.holes = holess;
                    }
               
                    part.FileJson= JsonHelper.Instance.Serialize(jsonModel);
                }
                pmode.PartList= partList;

                //调用激光切割零件推送
                //var url = "/3d/nest/pushLoft";
                var url = GetDictionaryDictValue("LaserCutPushLoft", "GetUrl");
                if (string.IsNullOrEmpty(url)) 
                {
                    Log4NetHelper.Instance.Error($"激光切割零件推送接口调用地址未配置!LaserCutPushLoft-GetUrl");
                    return;
                }

                HttpManVoid(url, pmode, EnumLog.激光切割零件接口推送.ToString(), method: "post");

                Log4NetHelper.Instance.Info($"激光切割零件推送接口调用地址:{url};json:{JsonHelper.Instance.Serialize(pmode)}");
            }
            catch (Exception ex)
            {
                Log4NetHelper.Instance.Error($"激光切割零件推送接口【pushLoft】方法异常:{ex.Message}");
            }
        }

        /// <summary>
        /// 激光切割套料需求推送
        /// </summary>
        /// <returns></returns>
        public void pushNestPlan()
        {
            try
            {




                //调用激光切割套料需求推送
                //var url = "/3d/nest/pushNestPlan";
                var url = GetDictionaryDictValue("LaserCutPushNestPlan", "GetUrl");
                if (string.IsNullOrEmpty(url))
                {
                    Log4NetHelper.Instance.Error($"激光切割零件推送接口调用地址未配置!LaserCutPushNestPlan-GetUrl");
                    return;
                }

                HttpManVoid(url, "pmode", EnumLog.激光切割套料需求推送.ToString(), method: "post");

                //Log4NetHelper.Instance.Info($"激光切割零件推送接口调用地址:{url};json:{JsonHelper.Instance.Serialize(pmode)}");
            }
            catch (Exception ex)
            {
                Log4NetHelper.Instance.Error($"激光切割零件推送接口【pushLoft】方法异常:{ex.Message}");
            }
        }
    }
}