服务端的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
using Rhea.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using Tiger.IBusiness;
using Tiger.Business.SqlSugarHepler;
using Tiger.IBusiness.WMS.T100ToWMS;
using Tiger.Model;
using Tiger.Model.Entitys.WMS.DTOS;
using Tiger.Model.Extensions;
 
namespace Tiger.Business.WMS.T100ToWMS
{
    /// <summary>
    ///出货通知单业务类
    /// </summary>
    public class SaleOutInfoBusiness : ISaleOutInfoBusiness
    {
        /// <summary>
        ///业务方法
        /// </summary>
        public int SaveSaleOutInfo(List<SaleOutInfoDTO> input)
        {
            if (input == null || input.Count() == 0)
            {
                return 0;
            }
            var masterData = input.ToObject<List<BIZ_ERP_SALE_OUT>>();// 实体映射
            var detailSource = new List<SalDetailDTO>();
            foreach (var item in input)
            {
                if (!item.Details.Any())
                {
                    continue;
                }
                //把主表的公共数据赋值到明细
                foreach (var detail in item.Details)
                {
                    detail.BILLCODE = item.BILLCODE;
                    detail.CREATE_TIME = item.BILLDATE;
                    detail.DELIVERYDATE = item.BILLDATE;
                    detail.AUTH_ORG = item.AUTH_ORG;
                }
                detailSource.AddRange(item.Details);
            }
            var detailData = detailSource.ToObject<List<BIZ_ERP_SALE_OUT_DTL>>();// 实体映射
            int res = 0;
            //var db = Business.Biz.Db;
            var db = Biz.DataSource["WMS57"].Client;
 
            var BILLCODELst = masterData.Select(i => i.BILLCODE).Distinct().ToList();
 
            #region 区分主表需要插入及更新的数据
 
            var hostoryMasterData = db.Queryable<BIZ_ERP_SALE_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) && i.GHOST_ROW == false).ToList();// 需要插入的数据
            var masterNeedUpdate = masterData.Where(i => resMaster.Contains(i.BILLCODE) && i.GHOST_ROW == false).ToList();// 需要更新的数据
                                                                                                                          // var masterNeedUpdate = hostoryMasterData.Except(masterData).ToList();// 需要更新的数据
                                                                                                                          //更新
            foreach (var itemnew in masterNeedUpdate)
            {
                itemnew.ID = hostoryMasterData.Where(i => i.BILLCODE == itemnew.BILLCODE).FirstOrDefault()?.ID;
            }
            //删除明细表
            foreach (var ith in hostoryMasterData)
            {
                db.Deleteable<BIZ_ERP_SALE_OUT_DTL>().Where(i => i.BILLCODE == ith.BILLCODE).ExecuteCommand();
            }
 
            #endregion 区分主表需要插入及更新的数据
 
            #region 区分明细表需要插入及更新的数据
 
            //  var hostoryDetailData = db.Queryable<BIZ_ERP_SALE_OUT_DTL>().Where(i => BILLCODELst.Contains(i.BILLCODE)).ToList();// 获取明细表旧数据
            // var resDetail = hostoryDetailData.Select(i => i.BILLCODE).Distinct().ToList();
            // var detailNeedInsert = detailData.Where(i => !resDetail.Contains(i.BILLCODE)).ToList();// 需要插入的数据
            // var detailNeedUpdate = detailData.Where(i => resDetail.Contains(i.BILLCODE)).ToList();// 需要更新的数据
            // var detailNeedUpdate = hostoryDetailData.Except(detailData).ToList();// 需要更新的数据
 
            #endregion 区分明细表需要插入及更新的数据
 
            try
            {
                BizSqlsugar.CreateTran(() =>
                {
                    if (masterNeedInsert.Any())
                    {
                        res = BizSqlsugar.InsertDataTable(masterNeedInsert, db);
                    }
                    if (detailData.Any())
                    {
                        res += BizSqlsugar.InsertDataTable(detailData, db);
                    }
                    if (masterNeedUpdate.Any())
                    {
                        res += BizSqlsugar.UpdateDataTable(masterNeedUpdate, db);
                    }
                    /* if (detailNeedUpdate.Any())
                     {
                         res += BizSqlsugar.UpdateDataTable(detailNeedUpdate, db);
                     }*/
                }, db);
            }
            catch (Exception ex)
            {
                new ApiAction().CatchExceptionWithLog(ex, $"接口新增或更新数据异常!");
            }
            return res;
        }
    }
}