CutWeldService.cs 6.69 KB
using ApkInfo;
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.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.Linq;
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
            {
                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,//操作人                   
            };

            //调用上游MES工序完工反馈
            var url = GetDictionaryDictValue("UrlProcessFeedback", "GetUrl");
            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();
            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();

            foreach (var item in workOrderDetail) 
            {
                var data = new
                {
                    workOrderCode = item.workOrderCode,//工单
                    partCode = item.partCode,//管段号
                    barCode = item.barCode,//追踪码(管段码)
                    oprSequenceCode = item.oprSequenceCode,//工序
                    stationCode = item.stationCode,//工位
                    equipmentCode = equipmentCode,//生产设备
                    actualStartTime = item.actualStartTime,//开始时间
                    actualEndTime = item.actualEndTime,// 完成时间
                    cutMaterCode = item.cutMaterCode,//管段物料编码
                    weldNo = item.weldNo,//组对(焊接)焊口号
                    batchNo = item.batchNo,//组对(焊接)批次号
                    createBy = item.createBy,//操作人                   
                };

                //调用上游MES工序完工反馈
                var url = GetDictionaryDictValue("UrlProcessFeedback", "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");
        }
    }
}