服务端的TigerApi 框架,基于.NET6 2024 版本
YangYuGang
2 天以前 e26f91635aa0343f6f5c201c95d20141dc465ed3
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
using Rhea.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Tiger.Business.SqlSugarHepler;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Entitys.WMS.DTOS;
 
namespace Tiger.Business.WMS
{
    /// <summary>
    ///
    /// </summary>
    public class SplitBoxBusiness : ISplitBoxBusiness
    {
        /// <summary>
        /// 分合箱
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public int SaveSplitBoxData(SplitBoxDTO input)
        {
            //var DB = Biz.Db;// 数据库地址
            var type = "P";
            //var DB = Biz.DataSource["Test"].Client;
            var DB = Biz.DataSource["WMS57"].Client;
            var oldsns = input.OldSns;// 旧的Sn
            var oldData = DB.Queryable<WMS_ITEM_PKG>().Where(i => oldsns.Contains(i.SN) || oldsns.Contains(i.PARENT_SN)).ToList();// 获取历史数据
            if (!oldData.Any(i => string.IsNullOrWhiteSpace(i.PARENT_SN)))
            {
                type = "B";
                var olddataparnet = oldData.Select(i => i.PARENT_SN).Distinct().ToList();// 获取栈板号
                var oldData2 = DB.Queryable<WMS_ITEM_PKG>().Where(i => olddataparnet.Contains(i.SN) && string.IsNullOrWhiteSpace(i.PARENT_SN)).ToList();// 获取顶级数据
                oldData.AddRange(oldData2);// 获取所有的历史数据
            }
 
            var oldSnData = oldData.Where(i => string.IsNullOrWhiteSpace(i.PARENT_SN)).ToList();// 获取栈板对应NULL数据
            if (type == "B")
            {
                oldSnData = oldData.Where(i => string.IsNullOrWhiteSpace(i.PARENT_SN) || input.OldSns.Contains(i.SN)).ToList();// 获取栈板对应NULL数据以及箱号对应的栈板号数据
            }
 
            //var oldParentSnData = oldData.Where(i => oldsns.Contains(i.PARENT_SN)).ToList(); // 获取父级数据
            //var oldCorrespondence = oldParentSnData.Select(i => new { i.SN, i.PARENT_SN }).ToDictionary(i => i.SN, i => i.PARENT_SN).ToList();// 获取旧的对应关系
 
            var newsnList = input.NewSnList;
            var palletList = newsnList.Select(i => i.Pallet).Distinct().ToList(); // 获取所有的栈板号
            var dicBox = new Dictionary<string, string>(); // 对应关系(新)
            var dicCount = new Dictionary<string, int>(); // 栈板号——数量对应关系
 
            #region 获取新的对应关系
 
            foreach (var pallet in palletList)
            {
                var cartonList = newsnList.Where(i => i.Pallet == pallet).Select(i => i.Carton).Distinct().ToList();// 查询栈板号绑定的箱号
                int sqn = 0;
                foreach (var carton in cartonList)
                {
                    var data = newsnList.Where(i => i.Pallet == pallet && i.Carton == carton).ToList();
                    if (!dicBox.ContainsKey(carton) && carton != pallet)
                    {
                        dicBox.Add(carton, pallet);// 箱号——栈板号
                    }
                    foreach (var item in data)
                    {
                        if (!dicBox.ContainsKey(item.SN))
                        {
                            sqn++;
                            dicBox.Add(item.SN, carton);// SN——箱号
                        }
                    }
                }
                dicBox.Add(pallet, null);// 栈板号——NULL
                dicCount.Add(pallet, sqn);// 栈板号——NULL
            }
 
            #endregion 获取新的对应关系
 
            if (oldSnData.Any())
            {
                DB.Deleteable(oldSnData).ExecuteCommand();// 删除Box-Pallet和Pallet-Null数据
            }
 
            if (dicBox.Any())
            {
                var newboxdata = dicBox.Keys.ToList();
                var oldboxdata = oldData.Where(i => newboxdata.Contains(i.SN)).ToList();// 需要更新的数据
                foreach (var boxdata in oldboxdata)
                {
                    boxdata.PARENT_SN = dicBox[boxdata.SN];// 更新箱号/栈板号
                }
                DB.Updateable(oldboxdata).ExecuteCommand();
 
                //var insertData =
 
                var dataLst = new List<WMS_ITEM_PKG>();
                foreach (var item in dicBox.Keys)
                {
                    var data = oldData.Where(i => i.SN == item).FirstOrDefault();
 
                    if (data == null)
                    {
                        dataLst.Add(new WMS_ITEM_PKG()
                        {
                            ID = null,
                            SN = item,
                            ITEM_CODE = oldData[0].ITEM_CODE,
                            UNIT = oldData[0].UNIT,
                            TRANS_NO = oldData[0].TRANS_NO,
                            QTY = dicCount[item],
                            AUTH_ORG = oldData[0].AUTH_ORG,
                            PARENT_SN = dicBox[item]
                        });// 添加顶层数据
                    }
                }
                if (dataLst.Any())
                {
                    DB.Insertable(dataLst).ExecuteCommand();// 插入新的Box-Pallet/Pallet-Null数据
                }
            }
 
            return oldsns.Count();
        }
    }
}