cdk
2025-09-02 4e045ea0364774a6ac20a18491653ff0c9d77ea4
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
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
using System.ComponentModel.DataAnnotations;
 
namespace MES.Service.service.BasicData;
 
public class MesFactoryDateManager : Repository<MesFactoryDate>
{
    public bool Save(ErpFactoryDate factoryDate)
    {
        var entity = ConvertToEntity(factoryDate);
 
        return UseTransaction(db =>
        {
            switch (factoryDate.Type)
            {
                case "3":
                    // 删除
                    return DeleteFactoryDate(db, entity.ErpId) ? 1 : 0;
                case "2":
                case "4":
                    // 新增或同步
                    return InsertOrUpdate(db, entity) ? 1 : 0;
                default:
                    throw new ArgumentNullException($"type没有{factoryDate.Type}这个类型的参数");
            }
        }) > 0;
    }
 
    public bool SaveList(List<ErpFactoryDate> factoryDates)
    {
        var list = factoryDates.Select(ConvertToEntity).ToList();
        var groupBy = list.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
 
        return UseTransaction(db =>
        {
            foreach (var group in groupBy)
            {
                switch (group.Key)
                {
                    case "3":
                        if (!DeleteFactoryDateBatch(db, group.Value))
                            throw new NotImplementedException("删除失败");
                        break;
                    case "2":
                    case "4":
                        if (!InsertOrUpdateBatch(db, group.Value))
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException($"type没有{group.Key}这个类型的参数");
                }
            }
            return 1;
        }) > 0;
    }
 
    private MesFactoryDate ConvertToEntity(ErpFactoryDate dto)
    {
        string DateType = "";
        switch (dto.FDateStyle)
        {
            case "1":
                DateType = "工作日";
                break;
            case "2":
                DateType = "休息日";
                break;
            case "3":
                DateType = "法定节假日";
                break;
            case "4":
                DateType = "空";
                break;
        }
        return new MesFactoryDate
        {
            Guid = Guid.NewGuid(),
            Type = dto.Type,
            FDocumentStatus = dto.FDocumentStatus,
            FForbidStatus = dto.FForbidStatus,
            ErpId = dto.ErpId,
            Seq = dto.FSeq,
            OrgId = dto.FUseOrgId,
            FactoryDate = dto.FDay,
            DateType = DateType,
            IsWork = dto.FIsWorkTime,
            InterId = dto.FInterId
        };
    }
 
    private bool DeleteFactoryDate(SqlSugarScope db, string? erpId)
    {
        var result = db.Deleteable<MesFactoryDate>()
            .Where(s => s.ErpId == erpId).ExecuteCommand();
        if (result > 0)
            return true;
 
        throw new NotImplementedException("删除失败");
    }
 
    private bool DeleteFactoryDateBatch(SqlSugarScope db, List<MesFactoryDate> list)
    {
        var erpIds = list.Select(it => it.ErpId).ToArray();
        var result = db.Deleteable<MesFactoryDate>()
            .Where(s => erpIds.Contains(s.ErpId)).ExecuteCommand();
        if (result > 0)
            return true;
 
        throw new NotImplementedException("删除失败");
    }
 
    private bool InsertOrUpdate(SqlSugarScope db, MesFactoryDate entity)
    {
        db.Deleteable<MesFactoryDate>().Where(s => s.ErpId == entity.ErpId)
            .ExecuteCommand();
 
        var insert = db.Insertable(entity).ExecuteCommand();
 
        return insert > 0;
    }
 
    private bool InsertOrUpdateBatch(SqlSugarScope db, List<MesFactoryDate> list)
    {
        return list.All(entity => InsertOrUpdate(db, entity));
    }
}