schangxiang@126.com
2025-09-11 e86f3bddecdc13210a546761ecf5e8550ea20799
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using yunneiWCS.EnumDefine;
using System.ServiceModel;
using yunneiWCS.ORM;
using yunneiWCS.DataAccess;
using yunneiWCS.ExtendFunction;
 
namespace yunneiWCS.SystemInteraction.tianyong
{
    public class TianYongSystem
    {
        /// <summary>机器人上料 安全交互信号
        /// 
        /// </summary>
        /// <param name="station">站点号</param>
        /// <param name="OutOrIn">1=进2=出</param>
        /// <param name="taskId">任务id</param>
        /// <returns></returns>
        public static bool safetySignal(string station, int OutOrIn, string agvTaskNo, string remark)
        {
            bool res = false;
 
            //放开代码 【EditBy shaocx,2023-10-13】
            /*
            //注意:暂时写为true,以后要修改为正式的 【EditBy shaocx,2022-03-18】!!!!
            res = true;
            remark = "【注意:本次是模拟天永返回TRUE】" + remark;
            return res;
            //*/
 
            try
            {
                var materialCode = "";
                using (dbmodel mod = new dbmodel())
                {
                    task sf = mod.task.FirstOrDefault(x => x.AgvTaskNo == agvTaskNo);
                    int quantity = 0;
                    if (sf != null)
                    {
                        if (sf.taskType == (int)taskType.缸体上线 || sf.taskType == (int)taskType.缸体下线直接去上线点)
                        {
                            VproductStock stock = mod.VproductStock.FirstOrDefault(x => x.positionName == sf.toPlace);
                            if (stock != null)
                            {
                                quantity = (int)stock.quantity;
                            }
                        }
                        materialCode = sf.materialCode;
                    }
                    else
                    {
                        WZ.Useful.Commons.LogTextHelper.WriteLine("TianYongSystem", "safetySignal", "根据AgvTaskNo:" + agvTaskNo + "获取任务为NULL");
                        return false;
                    }
                    int taskId = (int)sf.taskId;
                    using (yunneiWCS.tianyong.AutoServiceSoapClient ty = new yunneiWCS.tianyong.AutoServiceSoapClient())
                    {
                        res = ty.safetySignal(station, OutOrIn, taskId, quantity, materialCode);
                    }
                    if (res)
                    {
                        remark = "推送成功," + remark;
                        sf.isSendTotianyong = 1;
                        sf.isSendTotianyongName = "是";
                        sf.SendTotianyongTime = DateTime.Now;
                        sf.SendTotianyongRemark = remark;
 
                    }
                    else
                    {
                        remark = "推送失败," + remark;
                        sf.isSendTotianyong = 0;
                        sf.isSendTotianyongName = "否";
                        sf.SendTotianyongTime = DateTime.Now;
                        sf.SendTotianyongRemark = remark;
                    }
 
                    TianYongLogHandler.AddTianYongLog(mod, sf, remark, res, "safetySignal", station, OutOrIn.ToString(), taskId.ToString(), quantity.ToString(), materialCode);
 
                    var res_SaveChanges = mod.SaveChanges();
                    if (res_SaveChanges > 0)
                    {
 
                    }
                    else
                    {
                        throw new Exception("更新数据失败");
                    }
 
                    Form1.agvInfo = "agv上下料:返回信息:" + res;
                    string resString = res == true ? "允许" : "不允许";
                    WZ.Useful.Commons.LogTextHelper.WriteLine("IyunneiWcf", "safetySignal", "收到安全信号站点号:" +
                        station + " 1=进2=出:" + OutOrIn + " 任务ID:" + taskId + " 数量:" + quantity + "  物料编码:" + materialCode + "  天永返回状态:" + resString);
 
                }
 
            }
            catch (Exception ex)
            {
                WZ.Useful.Commons.LogTextHelper.WriteLine("TianYongSystem", "safetySignal", ex.ToString());
 
            }
            return res;
        }
 
        /// <summary>给天永发信号,缸体上线去旁路工位、缸盖进入、缸盖出去、人工缸盖进入、人工缸盖出去,人工缸体进入,人工缸体出去 的 交互信号
        /// 
        /// </summary>
        /// <param name="station">站点号</param>
        /// <param name="taskId">任务id</param>
        /// <returns></returns>
        public static bool UpdateStoreByTaskID(dbmodel mod, task task, string station, int taskId, string _SendTotianyongRemark)
        {
            bool res = false;
            try
            {
                //using (dbmodel mod = new dbmodel())
                //{
                task sf = mod.task.FirstOrDefault(x => x.taskId == taskId);
                if (sf == null)
                {
                    throw new Exception("根据任务ID" + taskId + "没有找到任务");
                }
                int quantity = 0;
 
                taskType _taskType = (taskType)Enum.Parse(typeof(taskType), sf.taskType.ToString());
                switch (_taskType)
                {
                    case taskType.缸盖上线:
                    case taskType.缸盖下线直接去上线点:
                    case taskType.缸体上线:
                    case taskType.缸体下线直接去上线点:
                    case taskType.缸体上线去旁路工位: //增加任务类型 【EditBy shaocx,2022-04-23】
                        quantity = (int)task.quantity;//直接使用数量,而不是去查库存了 【EditBy shaocx,2022-05-04】
                        // VproductStock stock = null;
                        //stock = mod.VproductStock.FirstOrDefault(x => x.positionName == sf.toPlace);
                        //if (stock != null)
                        //{
                        //    quantity = (int)stock.quantity;
                        //}
                        //else
                        //{
                        //    throw new Exception("根据站点" + sf.toPlace + "获取库存为NULL");
                        //}
                        break;
                    case taskType.空托回库:
                    case taskType.余料回库:
                        quantity = 0;
                        break;
                }
 
                var simulatorNote = "";
                if (!MyExtendHelper.IsAllowSimulatorHandle(task))
                {
                    simulatorNote = "[正式环境]";
                    using (yunneiWCS.tianyong.AutoServiceSoapClient ty = new yunneiWCS.tianyong.AutoServiceSoapClient())
                    {
                        res = ty.UpdateStoreByTaskID(taskId, quantity);
                    }
                }
                else
                {
                    simulatorNote = "[模拟环境]";
                    res = true;//模拟写死
                }
                if (res)
                {
                    sf.isSendTotianyong = 1;
                    sf.isSendTotianyongName = "是";
                    sf.SendTotianyongTime = DateTime.Now;
                    sf.SendTotianyongRemark = simulatorNote + "推送成功," + _SendTotianyongRemark;
                    // mod.SaveChanges();//不再更新,因为他上层方法已经更新了
                }
                else
                {
                    sf.isSendTotianyong = 0;
                    sf.isSendTotianyongName = "否";
                    sf.SendTotianyongTime = DateTime.Now;
                    sf.SendTotianyongRemark = simulatorNote + "推送失败," + _SendTotianyongRemark;
                    // mod.SaveChanges();//不再更新,因为他上层方法已经更新了
                }
                TianYongLogHandler.AddTianYongLog(mod, sf, sf.SendTotianyongRemark, res, "UpdateStoreByTaskID", "", "", taskId.ToString(), quantity.ToString(), "");
 
 
 
                string resString = res == true ? "允许" : "不允许";
                WZ.Useful.Commons.LogTextHelper.WriteLine("TianYongSystem", "UpdateStoreByTaskID", "收到安全信号站点号:" +
                    station + " 任务ID:" + taskId + " 天永返回状态:" + resString);
 
                //}
 
            }
            catch (Exception ex)
            {
                WZ.Useful.Commons.LogTextHelper.WriteLine("TianYongSystem", "UpdateStoreByTaskID", ex.ToString());
                throw ex;
            }
            return res;
        }
    }
}