服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-10-24 8ef454eb0bbd2e74eb66c11fd5aa1438348ed75c
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
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using Tiger.Business.SqlSugarHepler;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Entitys.WMS.DTOS;
using Tiger.Model.Extensions;
 
namespace Tiger.Business.WMS
{
    /// <summary>
    ///
    /// </summary>
    public class TrasferInfoBusiness : ITrasferInfoBusiness
    {
        /// <summary>
        /// 存储T100推送过来的调拨信息
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public int SaveTrasferInfo(List<TrasferInfoDTO> input, string type = "1")
        {
            var masterData = input.ToObject<List<BIZ_WMS_TRANSFER>>();// 实体映射
            if (masterData != null && type == "2")
            {
                foreach (var item in masterData)
                {
                    item.SOURCECODE = item.BILLCODE;
                }
            }
            var detailSource = new List<TrasferInfoDetailDTO>();
            var time = DateTime.Now;
            foreach (var item in input)
            {
                if (!item.details.Any())
                {
                    continue;
                }
                foreach (var detail in item.details)
                {
                    detail.AUTH_ORG = item.AUTH_ORG;
                    detail.BILLCODE = item.BILLCODE;
                    detail.CREATE_TIME = time;
                    detail.LINESTATUS = string.IsNullOrWhiteSpace(detail.LINESTATUS) ? "0" : detail.LINESTATUS;
                }
                detailSource.AddRange(item.details);
            }
            var detailData = detailSource.ToObject<List<BIZ_WMS_TRANSFER_DTL>>();// 实体映射
 
            int res = 0;
            //var db = input.First()?.CorporateCode == "88" ? Biz.Db : Biz.DataSource["WMS57"].Client;// 区分正式库还是测试库
            //var db = Biz.Db;// 区分正式库还是测试库
            var db = Biz.DataSource["WMS57"].Client; // 区分正式库还是测试库
 
            var BILLCODELst = masterData.Select(i => i.BILLCODE).Distinct().ToList();
 
            #region 区分主表需要插入及更新的数据
 
            var hostoryMasterData = db.Queryable<BIZ_WMS_TRANSFER>().Where(i => BILLCODELst.Contains(i.BILLCODE)).ToList();// 获取主表旧数据
            var resMaster = hostoryMasterData.Select(i => i.BILLCODE).Distinct().ToList();
            var masterNeedInsert = masterData.Where(i => !resMaster.Contains(i.BILLCODE)).ToList();// 需要插入的数据
            var masterNeedUpdate = masterData.Where(i => resMaster.Contains(i.BILLCODE)).ToList();// 需要更新的数据
            foreach (var item in masterNeedUpdate)
            {
                item.ID = hostoryMasterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.ID;
            }
 
            #endregion 区分主表需要插入及更新的数据
 
            #region 区分明细表需要插入及更新的数据
 
            var hostoryDetailData = db.Queryable<BIZ_WMS_TRANSFER_DTL>().Where(i => BILLCODELst.Contains(i.BILLCODE)).ToList();// 获取明细表旧数据   剔除状态为2的数据
            var resDetail = hostoryDetailData.Select(i => i.ITEM_CODE).Distinct().ToList();// 获取所有的物料编号
            var ignoreCode = hostoryDetailData.Where(i => i.LINESTATUS == 2 || i.LINESTATUS == 3).Select(i => i.ITEM_CODE).Distinct().ToList();// 需要忽略的物料编号
            var needInsertData = detailData.Where(i => !resDetail.Contains(i.ITEM_CODE) && !ignoreCode.Contains(i.ITEM_CODE)).ToList();// 需要插入的数据
            if (type == "1")
            {
                foreach (var item in needInsertData)
                {
                    item.OUTQTY = 0;
                }
            }
 
            var needUpdateDetail = detailData.Where(i => resDetail.Contains(i.ITEM_CODE)).ToList();// 确认需要更新的数据
 
            foreach (var item in needUpdateDetail)
            {
                if (item.LINESTATUS == 0 && type == "1")
                {
                    item.OUTQTY = 0;
                }
                item.AUTH_ORG = input[0].AUTH_ORG;
            }
 
            var exceptCode = detailData.Select(i => i.ITEM_CODE).Distinct().ToList();
            var deletecode = resDetail.Except(exceptCode).ToList();
 
            var needDeleteData = hostoryDetailData.Where(i => deletecode.Contains(i.ITEM_CODE) && BILLCODELst.Contains(i.BILLCODE)).ToList();
 
            foreach (var item in needUpdateDetail)
            {
                item.ID = hostoryDetailData.Where(i => i.ITEM_CODE == item.ITEM_CODE).FirstOrDefault()?.ID;
            }
            //var needInsertData = detailData.Except(hostoryDetailData).ToList();// 需要插入的数据
            //var needDeleteData = hostoryDetailData.Except(detailData).ToList();// 需要删除的数据
 
            #endregion 区分明细表需要插入及更新的数据
 
            try
            {
                BizSqlsugar.CreateTran(() =>
                {
                    if (masterNeedInsert.Any())
                    {
                        res = BizSqlsugar.InsertDataTable(masterNeedInsert, db);
                    }
                    if (masterNeedUpdate.Any())
                    {
                        res += BizSqlsugar.UpdateDataTable(masterNeedUpdate, db);
                    }
                    if (detailData.Any())
                    {
                        if (needDeleteData.Any())
                        {
                            db.Deleteable(needDeleteData).ExecuteCommand();
                        }
                        if (needUpdateDetail.Any())
                        {
                            res += db.Updateable(needUpdateDetail).ExecuteCommand();
                        }
                        if (needInsertData.Any())
                        {
                            res += BizSqlsugar.InsertDataTable(needInsertData, db);
                        }
                    }
                }, db);
            }
            catch (Exception)
            {
            }
 
            return res;
        }
    }
}