kazelee
2025-07-05 59dc2aa6e3fe7f699c4f2d03b774763142c5698d
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
 
using HH.WCS.Mobox3.AnGang.models;
using HH.WCS.Mobox3.AnGang.process;
using HH.WCS.Mobox3.AnGang.util;
using HH.WCS.Mobox3.AnGang.wms;
 
using Newtonsoft.Json;
 
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace HH.WCS.Mobox3.AnGang.core {
    /// <summary>
    /// 定时轮询任务
    /// </summary>
    public class Monitor
    {
        public static void InboundDataSync() {
            var db = new SqlHelper<object>().GetInstance();
            try {
                var inboundDataList = db.Queryable<TN_Inbound_DataRecord>().ToList();
                LogHelper.Info($"轮询:入库信息同步:当前没有待同步的ERP物料信息");
 
                var needDeleteDataList = new List<TN_Inbound_DataRecord>();
                var needUpdateLocCntrRelList = new List<TN_Loc_Container>();
                var needUpdateCgDetailList = new List<TN_CG_Detail>();
                foreach (var inboundData in inboundDataList) {
                    var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_LOC_CODE == inboundData.S_LOCATION_CODE).First();
                    // 暂时不考虑如果当前关系表,锁状态为1(已经ERP覆盖过)的情况,默认有就覆盖
                    if (locCntrRel != null) {
                        var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First();
                        if (cgDetail == null) {
                            LogHelper.Info($"轮询:入库信息同步:货位容器表中,包含货位={locCntrRel.S_LOC_CODE}, 容器={locCntrRel.S_CNTR_CODE};但容器对应的物料表,没有找到物料!");
                            continue;
                        }
                        cgDetail.S_ITEM_CODE = inboundData.S_ITEM_CODE;
                        cgDetail.T_MODIFY = DateTime.Now;
                        locCntrRel.N_LOCK_STATE = 1;
                        locCntrRel.T_MODIFY = DateTime.Now;
                        needUpdateLocCntrRelList.Add(locCntrRel);
                        needUpdateCgDetailList.Add(cgDetail);
                        needDeleteDataList.Add(inboundData);
                    }
                }
 
                using (var tran = db.Ado.UseTran()) {
                    if (needDeleteDataList.Count > 0 && db.Deleteable<TN_Inbound_DataRecord>(needDeleteDataList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        LogHelper.Info($"轮询:入库信息同步:删除已有物料的入库信息表失败!" + JsonConvert.SerializeObject(needDeleteDataList));
                        return;
                    }
 
                    if (needUpdateCgDetailList.Count > 0 && db.Updateable<TN_CG_Detail>(needUpdateCgDetailList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        LogHelper.Info($"轮询:入库信息同步:根据ERP信息,更新物料信息表失败!" + JsonConvert.SerializeObject(needUpdateCgDetailList));
                        return;
                    }
 
                    if (needUpdateLocCntrRelList.Count > 0 && db.Updateable<TN_Loc_Container>(needUpdateLocCntrRelList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        LogHelper.Info($"轮询:入库信息同步:根据ERP信息,更新货位容器关系表失败!" + JsonConvert.SerializeObject(needUpdateLocCntrRelList));
                        return;
                    }
 
                    tran.CommitTran();
                    LogHelper.Info($"轮询:入库信息同步:根据ERP信息,更改货位容器关系、货品明细成功!已更改货位:" + JsonConvert.SerializeObject(needUpdateLocCntrRelList.Select(c => c.S_LOC_CODE).ToArray()));
                }
 
            }
            catch (Exception ex) {
 
                LogHelper.Info($"发生了异常:{ex.Message}");
            }
        }
 
        public static void OutboundDataSync() {
            var db = new SqlHelper<object>().GetInstance();
            try {
                var outboundDataList = db.Queryable<TN_Outbound_DataRecord>().ToList();
 
                if (outboundDataList.Count== 0 ) {
                    LogHelper.Info($"轮询:出库信息同步:当前没有待同步的ERP物料信息");
                }
 
                var needDeleteDataList = new List<TN_Outbound_DataRecord>();
                var needUpdateLocCntrRelList = new List<TN_Loc_Container>();
                var needUpdateCgDetailList = new List<TN_CG_Detail>();
                foreach (var outboundData in outboundDataList) {
                    var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_LOC_CODE == outboundData.S_LOCATION_CODE).First();
                    // 暂时不考虑如果当前关系表,锁状态为1(已经ERP覆盖过)的情况,默认有就覆盖
                    if (locCntrRel != null) {
                        var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First();
                        if (cgDetail == null) {
                            LogHelper.Info($"轮询:出库信息同步:货位容器表中,包含货位={locCntrRel.S_LOC_CODE}, 容器={locCntrRel.S_CNTR_CODE};但容器对应的物料表,没有找到物料!");
                            continue;
                        }
                        cgDetail.S_ITEM_CODE = outboundData.S_ITEM_CODE;
                        cgDetail.T_MODIFY = DateTime.Now;
                        locCntrRel.N_LOCK_STATE = 1;
                        locCntrRel.T_MODIFY = DateTime.Now;
                        needUpdateLocCntrRelList.Add(locCntrRel);
                        needUpdateCgDetailList.Add(cgDetail);
                        needDeleteDataList.Add(outboundData);
                    }
                }
 
                using (var tran = db.Ado.UseTran()) {
                    if (needDeleteDataList.Count > 0 && db.Deleteable<TN_Outbound_DataRecord>(needDeleteDataList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        LogHelper.Info($"轮询:出库信息同步:删除已有物料的出库信息表失败!" + JsonConvert.SerializeObject(needDeleteDataList));
                        return;
                    }
 
                    if (needUpdateCgDetailList.Count > 0 && db.Updateable<TN_CG_Detail>(needUpdateCgDetailList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        LogHelper.Info($"轮询:出库信息同步:根据ERP信息,更新物料信息表失败!" + JsonConvert.SerializeObject(needUpdateCgDetailList));
                        return;
                    }
 
                    if (needUpdateLocCntrRelList.Count > 0 && db.Updateable<TN_Loc_Container>(needUpdateLocCntrRelList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        LogHelper.Info($"轮询:出库信息同步:根据ERP信息,更新货位容器关系表失败!" + JsonConvert.SerializeObject(needUpdateLocCntrRelList));
                        return;
                    }
 
                    tran.CommitTran();
                    LogHelper.Info($"轮询:出库信息同步:根据ERP信息,更改货位容器关系、货品明细成功!已更改货位:" + JsonConvert.SerializeObject(needUpdateLocCntrRelList.Select(c => c.S_LOC_CODE).ToArray()));
                }
 
            }
            catch (Exception ex) {
 
                LogHelper.Info($"发生了异常:{ex.Message}");
            }
        }
    }
 
}