服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-05-31 d4c326deaa51e7d4897a84afc339684012b8cfbe
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 Org.BouncyCastle.Asn1.Cmp;
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 OtherOutInfoBusiness : IOtherOutInfoBusiness
    {
        /// <summary>
        /// 存储T100推送过来的其他出库单信息
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public int SaveOthOutInfo(List<otherOutInfoDTO> input)
        {
            var masterData = input.ToObject<List<BIZ_ERP_OTH_OUT>>();// 实体映射
            var detailSource = new List<DetailDTO>();
 
            foreach (var item in input)
            {
                if (!item.Details.Any())
                {
                    continue;
                }
                foreach (var detail in item.Details)
                {
                    detail.BILLCODE = item.BILLCODE;
                    detail.LINESTATUS = 0;
                    detail.AUTH_ORG = item.AUTH_ORG;
                }
                detailSource.AddRange(item.Details);
            }
            var detailData = detailSource.ToObject<List<BIZ_ERP_OTH_OUT_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_ERP_OTH_OUT>().Where(i => BILLCODELst.Contains(i.BILLCODE) && i.GHOST_ROW == false).ToList();// 获取主表旧数据
            var resMaster = hostoryMasterData.Select(i => i.BILLCODE).Distinct().ToList();
            var masterNeedInsert = masterData.Where(i => !resMaster.Contains(i.BILLCODE)).ToList();// 需要插入的数据
            foreach (var item in masterNeedInsert)
            {
                item.STATUS = 0;
            }
 
            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_ERP_OTH_OUT_DTL>().Where(i => BILLCODELst.Contains(i.BILLCODE) && i.GHOST_ROW == false).ToList();// 获取明细表旧数据
            var itemcodeLst = hostoryDetailData.Select(i => i.ITEM_CODE).Distinct().ToList();// 查询历史物料编号
            var insertDetailData = detailData.Where(i => !resMaster.Contains(i.BILLCODE) && !itemcodeLst.Contains(i.ITEM_CODE)).ToList();// 需要插入的数据
            var updateDetailData = detailData.Where(i => resMaster.Contains(i.BILLCODE) && itemcodeLst.Contains(i.ITEM_CODE)).ToList();// 需要更新的数据
            foreach (var item in updateDetailData)
            {
                item.ID = hostoryDetailData.Where(i => i.BILLCODE == item.BILLCODE && i.ITEM_CODE == item.ITEM_CODE).FirstOrDefault()?.ID;
                item.AUTH_ORG = input[0].AUTH_ORG;
            }
 
            var exceptCode = detailData.Select(i => i.ITEM_CODE).Distinct().ToList();
            var deletecode = itemcodeLst.Except(exceptCode).ToList();
 
            var needDeleteData = hostoryDetailData.Where(i => deletecode.Contains(i.ITEM_CODE) && BILLCODELst.Contains(i.BILLCODE)).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 (insertDetailData.Any())
                        {
                            res += BizSqlsugar.InsertDataTable(insertDetailData, db);
                        }
                        if (updateDetailData.Any())
                        {
                            res += BizSqlsugar.InsertDataTable(updateDetailData, db);
                        }
 
                        //res += BizSqlsugar.InsertDataTable(detailData, db);
                    }
                }, db);
            }
            catch (Exception)
            {
            }
 
            return res;
        }
    }
}