CutWeldService.cs 10.1 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.Response;
using Hh.Mes.POJO.ViewModel;
using Hh.Mes.POJO.WebEntity;
using Hh.Mes.Service.Repository;
using Hh.Mes.Service.SystemAuth;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Xml;
using static Microsoft.AspNetCore.Hosting.Internal.HostingApplication;

namespace Hh.Mes.Service
{
    public class CutWeldService : RepositorySqlSugar<dynamic>
    {
        /// <summary>
        /// 管段工序完工调用
        /// </summary>
        /// <param name="BarCode">追踪码</param>
        /// <param name="processesState">状态</param>
        /// <returns></returns>
        public async void SendIWPTechnologylineProcess(string BarCode, int processesState)
        {

            if (string.IsNullOrWhiteSpace(BarCode)) return;

            //切割完成处理,ECS完成时会更新套料方案,工单工序,这里只需要组织数据反馈上游
            var oprSequenceCode = "";
            if (processesState == (int)EnumCutHeadState.已套料)
                oprSequenceCode = EnumoprSequenceCode.套料;
            if (processesState == (int)EnumCutHeadState.切坡完成)
                oprSequenceCode = EnumoprSequenceCode.切割坡口;
            if (processesState == (int)EnumCutHeadState.切割完成)
                oprSequenceCode = EnumoprSequenceCode.切割;
            if (processesState == (int)EnumCutHeadState.坡口完成)
                oprSequenceCode = EnumoprSequenceCode.坡口;
            if (processesState == (int)EnumCutHeadState.打磨完成)
                oprSequenceCode = EnumoprSequenceCode.打磨;
            if (processesState == (int)EnumCutHeadState.组对完成)
                oprSequenceCode = EnumoprSequenceCode.组对;
            if (processesState == (int)EnumCutHeadState.焊接完成)
                oprSequenceCode = EnumoprSequenceCode.焊接;
            if (processesState == (int)EnumCutHeadState.组焊完成)
                oprSequenceCode = EnumoprSequenceCode.组焊;
            if (processesState == (int)EnumCutHeadState.弯管完成)
                oprSequenceCode = EnumoprSequenceCode.弯管;

            if (oprSequenceCode == "") return;

            var workOrderDetail = base.Context.Queryable<bus_workOrder_detail>().Where(x => x.oprSequenceCode == oprSequenceCode && x.barCode == BarCode).First();
            if (workOrderDetail == null) return;

            //更新工单明细
            workOrderDetail.workReportStatus = (int)EnumWorkReportStatus.完工已报工;
            Context.Updateable(workOrderDetail).UpdateColumns(t => new { t.workReportStatus }).ExecuteCommand();



            var data = new
            {
                Worker = workOrderDetail.createBy,
                WorkerJobNo = workOrderDetail.createBy,
                WorkStartDate = workOrderDetail.actualStartTime.ToString("yyyy-MM-dd HH:mm:ss"),
                WorkEndDate = workOrderDetail.actualEndTime.ToString("yyyy-MM-dd HH:mm:ss"),
                Operator = workOrderDetail.createBy,
                OperatorJobNo = workOrderDetail.createBy,
                OperateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                WorkstationTypeName = workOrderDetail.oprSequenceCode,
                WorkPieceCode = workOrderDetail.barCode,
                Status = 1
            };
            //var data = new
            //{
            //    workOrderCode = workOrderDetail.workOrderCode,//工单
            //    partCode = workOrderDetail.partCode,//管段号
            //    barCode = workOrderDetail.barCode,//追踪码(管段码)
            //    oprSequenceCode = workOrderDetail.oprSequenceCode,//工序
            //    stationCode = workOrderDetail.stationCode,//工位
            //    equipmentCode = workOrderDetail.equipmentCode,//生产设备
            //    actualStartTime = workOrderDetail.actualStartTime,//开始时间
            //    actualEndTime = workOrderDetail.actualEndTime,// 完成时间
            //    cutMaterCode = workOrderDetail.cutMaterCode,//管段物料编码
            //    weldNo = workOrderDetail.weldNo,//组对(焊接)焊口号
            //    batchNo = workOrderDetail.batchNo,//组对(焊接)批次号
            //    createBy = workOrderDetail.createBy,//操作人                   
            //};
            var url = "";
            var workOrder = base.Context.Queryable<base_work_order_head>().Where(x =>  x.workPieceNo == BarCode).First();
            if (workOrder != null && workOrder.extend2 == "XF")
            {
                url = GetDictionaryDictValue("UrlProcessFeedback", "GetUrl");
            }
            else
            {
                url = GetDictionaryDictValue("UrlProcessFeedback_xyz", "GetUrl");
            }
            //调用上游MES工序完工反馈
           

            HttpManVoid(url, data, EnumLog.调用上游MES工序完工反馈.ToString(), method: "post");
        }


        /// <summary>
        /// PDA,ECS调用,任务号设备完工报工
        /// </summary>
        /// <param name="taskCode">任务号</param>
        /// <param name="equipmentCode">设备编码</param>
        /// <returns></returns>
        public void SendTaskEnd(string taskCode, string equipmentCode)
        {

            if (string.IsNullOrWhiteSpace(taskCode) || string.IsNullOrWhiteSpace(equipmentCode)) return;

            //查询工序明细
            //var workOrderDetail = base.Context.Queryable<bus_workOrder_detail>()
            //        .Where(x => x.barCode== taskCode&&x.oprSequenceCode == EnumoprSequenceCode.焊接&&x.state== (int)EnumOrderBodyStatus.生产中).ToList();
            var workOrderDetail = base.Context.Queryable<bus_workOrder_detail>()
                    .Where(x => x.barCode == taskCode && x.oprSequenceCode == EnumoprSequenceCode.焊接).ToList();
            if (workOrderDetail.Count == 0) return;

            //更新工单明细
            workOrderDetail.ForEach(x =>
            {
                x.state = (int)EnumOrderBodyStatus.已完成;
                x.equipmentCode = equipmentCode;
                x.updateBy = sysUserApi?.Account;
                x.workReportStatus = (int)EnumWorkReportStatus.完工已报工;
                x.actualEndTime = DateTime.Now;
            });


            Context.Updateable(workOrderDetail).ExecuteCommand();

            var item = workOrderDetail.OrderBy(x => x.serialNumberName).First();
            //反馈只需要反馈一次
            //foreach (var item in workOrderDetail.OrderBy(x => x.serialNumberName).First()) 
            //{
            var data = new
            {
                Worker = item.createBy,
                WorkerJobNo = item.createBy,
                WorkStartDate = item.actualStartTime.ToString("yyyy-MM-dd HH:mm:ss"),
                WorkEndDate = item.actualEndTime.ToString("yyyy-MM-dd HH:mm:ss"),
                Operator = item.createBy,
                OperatorJobNo = item.createBy,
                OperateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                WorkstationTypeName = item.oprSequenceCode,
                WorkPieceCode = item.barCode,
                Status = 1
            };

            //调用上游MES工序完工反馈
            var url = "";
            var workOrder = base.Context.Queryable<base_work_order_head>().Where(x => x.workPieceNo == taskCode).First();
            if (workOrder != null && workOrder.extend2 == "XF")
            {
                url = GetDictionaryDictValue("UrlProcessFeedback", "GetUrl");
            }
            else
            {
                url = GetDictionaryDictValue("UrlProcessFeedback_xyz", "GetUrl");
            }
            HttpManVoid(url, data, EnumLog.调用上游MES工序完工反馈.ToString(), method: "post");
            //}
        }

        /// <summary>
        /// 余料反馈发送上游工单系统
        /// </summary>
        public void OddFeedBack(OddFeelBackModel model)
        {
            var url = GetDictionaryDictValue("OddFeedBack", "GetUrl");
            HttpManVoid(url, model, EnumLog.余料接口.ToString(), method: "post");
        }

        public dynamic CreateXmlByWorkOrder(string workOrderCode)
        {
            var response = new POJO.Response.Response();
            List<base_work_order_head> work_order = Context.Queryable<base_work_order_head>().Where(x => x.workOrderCode == workOrderCode).ToList();
            foreach (var item in work_order)
            {
                CreateXmlByOrder(item.workPieceNo);
            }
            return response;
        }



        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("未获取到对应的切割数据");
            }
            try
            {
                bus_flameCut_job model = new bus_flameCut_job();
                model.createBy = "sys";
                model.createTime = DateTime.Now;
                model.workOrderCode = work_order.workOrderCode;
                model.lineCode = work_order.lineCode;
                model.workPieceNo = work_order.workPieceNo;
                model.state = "0";
                Context.Insertable(model).ExecuteCommand();
            }
            catch (Exception ex)
            {
                return response.ResponseError(ex.Message);
            }
            return response;

        }
     
    }
}