1,開始之前這裡關鍵是用的了(映射),在你的DTO入參字段必須包含Model中的字段(Model字段忽略)
注意:這裡我隻列舉了年報的DTO,其實還有半年報的,倆個公共部分DTO我已經提取出來了
1 /// <summary>
2 /// 海外倉情況表 年報
3 /// </summary>
4 ///
5 public class OverseasWarehouseSituationYearReportBusDTO
6 {
7
8 /// <summary>
9 /// 企業主鍵ID
10 /// </summary>
11 public Guid? MainId { get; set; }
12
13 /// <summary>
14 /// 企業名稱
15 /// </summary>
16 public string EntName { get; set; }
17
18 /// <summary>
19 /// 統一信用代碼
20 /// </summary>
21 public string EntSCCCode { get; set; }
22
23
24 /// <summary>
25 /// 報表主鍵ID
26 /// </summary>
27 public Guid ReportId { get; set; }
28
29 /// <summary>
30 /// 報表主表
31 /// </summary>
32 public EntInfoReportDTO EntInfoReport { get; set; }
33
34 /// <summary>
35 /// 海外倉資訊填寫(年報)
36 /// </summary>
37 public OverseasWarehouseSituationYearReportDTO OverseasWarehouseSituationYearReportDTO { get; set; }
38
39
40 /// <summary>
41 /// 海外倉的所在地(年報)
42 /// </summary>
43 public List<OverseasHomeYearReportDTO> OverseasHomeYearReportDTO { get; set; }
44 }
45
46
47 /// <summary>
48 /// 海外倉情況表 年報
49 /// </summary>
50 ///
51 public class OverseasWarehouseSituationYearReportDTO: PublicOverseasWarehouseSituationDTO
52 {
53 /// <summary>
54 /// 資料狀态
55 /// </summary>
56 // public State State { get; set; }
57 }
58
59
60
61 /// <summary>
62 /// 海外倉情況表(DTO)(公共部分)
63 /// </summary>
64 public class PublicOverseasWarehouseSituationDTO : TenantBaseEntityDTO
65 {
66
67 #region *Id,*企業ID,*年份
68 /// <summary>
69 /// Id
70 /// </summary>
71 public Guid Id { get; set; }
72
73 /// <summary>
74 /// 企業id外鍵
75 /// </summary>
76 public Guid MainId { get; set; }
77
78
79 /// <summary>
80 /// 報表id外鍵
81 /// </summary>
82 public Guid ReportId { get; set; }
83
84
85 /// <summary>
86 /// 年份
87 /// </summary>
88 public int Year { get; set; }
89 #endregion
90
91
92
93 #region 企業情況
94
95 /// <summary>
96 /// 省份
97 /// </summary>
98 public int? Province { get; set; }
99
100 /// <summary>
101 /// 市
102 /// </summary>
103 public int? City { get; set; }
104
105 /// <summary>
106 /// 區
107 /// </summary>
108 public int? Area { get; set; }
109
110 /// <summary>
111 /// 門牌号
112 /// </summary>
113 public string Addresses { get; set; }
114
115
116
117 /// <summary>
118 /// 企業性質(0-國有,1-私企, 2-外資)
119 /// </summary>
120 public int? Enterprise { get; set; }
121
122
123 /// <summary>
124 /// 有無企業***投資證書(0-有,1-無)
125 /// </summary>
126 public bool? IsCertificate { get; set; }
127
128
129 /// <summary>
130 /// 企業性質海外倉的數量
131 /// </summary>
132 public int? WarehouseCount { get; set; }
133
134 /// <summary>
135 /// 聘用***員工總人數
136 /// </summary>
137 public int? OverseasEmployees { get; set; }
138
139 /// <summary>
140 /// 訂單進行中心(個)
141 /// </summary>
142 public int? OrderCenter { get; set; }
143
144 /// <summary>
145 /// 日均處理訂單量(個)
146 /// </summary>
147 public int? AverageDeal { get; set; }
148
149 /// <summary>
150 /// 本年度累計發貨單數(萬票)
151 /// </summary>
152 public decimal? DeliverySingular { get; set; }
153
154
155 #endregion
156
157
158 #region *建立時間,*是否删除,*修改時間
159 /// <summary>
160 /// 建立時間
161 /// </summary>
162 public DateTime CreateTime { get; set; }
163
164 /// <summary>
165 /// 是否删除
166 /// </summary>
167 public bool IsDel { get; set; }
168
169 /// <summary>
170 /// 修改時間
171 /// </summary>
172 public DateTime LastModiTime { get; set; }
173 #endregion
174
175
176 }
177
178 /// <summary>
179 /// 海外倉所在地(附表)年報
180 /// </summary>
181 public class OverseasHomeYearReportDTO: PublicOverseasHomeDTO
182 {
183
184 }
185
186
187 /// <summary>
188 /// 海外倉所在地(附表)半年報
189 /// </summary>
190 public class OverseasHomeHalfYearReportDTO : PublicOverseasHomeDTO
191 {
192 /// <summary>
193 /// 半年報(0-上半年,1-下半年)
194 /// </summary>
195 public int? HalfYear { get; set; }
196
197 }
198
199
200 /// <summary>
201 /// 海外倉所在地(附表)(公共部分)
202 /// </summary>
203 public class PublicOverseasHomeDTO : TenantBaseEntityDTO
204 {
205 /// <summary>
206 /// 主鍵
207 /// </summary>
208 public Guid Id { get; set; }
209 /// <summary>
210 /// 企業id外鍵
211 /// </summary>
212 public Guid MainId { get; set; }
213
214 /// <summary>
215 /// 報表id外鍵
216 /// </summary>
217 public Guid ReportId { get; set; }
218
219 /// <summary>
220 /// 年份
221 /// </summary>
222 public int Year { get; set; }
223
224
225
226 /// <summary>
227 /// 對應主表的外鍵
228 /// </summary>
229 public Guid WarehouseId { get; set; }
230
231
232 /// <summary>
233 /// 海外倉所在地(國家)
234 /// </summary>
235 public string WarehouseHome { get; set; }
236
237
238 /// <summary>
239 /// 海外倉所在地(城市)
240 /// </summary>
241 public string WarehouseHomeCity { get; set; }
242
243
244 /// <summary>
245 /// 投入營運時間
246 /// </summary>
247 public DateTime? OperatingTime { get; set; }
248
249
250 /// <summary>
251 /// 投資規模(萬元)
252 /// </summary>
253 public decimal? OperatingSize { get; set; }
254
255
256 /// <summary>
257 /// 倉儲面積(㎡)
258 /// </summary>
259 public decimal? Warehousearea { get; set; }
260
261
262 /// <summary>
263 /// 聘用***員工(人)
264 /// </summary>
265 public int? EmployCount { get; set; }
266
267
268 #region 海外倉經營情況
269
270 /// <summary>
271 /// 海外倉營業收入(萬元)
272 /// </summary>
273 public decimal? WarehouseIncome { get; set; }
274
275 /// <summary>
276 /// 營運成本(萬元)
277 /// </summary>
278 public decimal? OperatingCost { get; set; }
279
280 /// <summary>
281 /// 營業利潤(萬元)
282 /// </summary>
283 public decimal? BusinessProfits { get; set; }
284
285 /// <summary>
286 /// 企業性質(0-自建(獨資/合資),1-租賃(第三方海外倉),2-亞馬遜FBA倉)
287 /// </summary>
288 public int? EnterpriseNature { get; set; }
289
290 /// <summary>
291 /// 海外倉建倉模式(0-購買海外空地自建,1-租海外空地自建海外倉,2-租賃海外倉庫改建海外倉,3-與海外倉庫合作共建海外倉)
292 /// </summary>
293 public string OverseasPositions { get; set; }
294
295
296 /// <summary>
297 /// 海外倉服務功能(0-倉儲, 1-發貨, 2-FBA退換貨、修理,3-保稅,4-FBA中轉,5-運輸資源整合,6-金融保險,7-其他)
298 /// </summary>
299 public string OverseasService { get; set; }
300
301 /// <summary>
302 /// 海外倉服務功能(其他填寫)
303 /// </summary>
304 public string OverseasServiceOther { get; set; }
305
306
307 /// <summary>
308 /// 企業性質(0-是(服務企業數量(個)) 1-否(自用))
309 /// </summary>
310 public bool? IsEnterpriseNature { get; set; }
311
312 /// <summary>
313 /// 服務企業數量(條件是企業性質為是)
314 /// </summary>
315 public int? ServiceNumber { get; set; }
316 #endregion
317
318
319 #region *建立時間,*是否删除,*修改時間
320 /// <summary>
321 /// 建立時間
322 /// </summary>
323 public DateTime CreateTime { get; set; }
324
325 /// <summary>
326 /// 是否删除
327 /// </summary>
328 public bool IsDel { get; set; }
329
330 /// <summary>
331 /// 修改時間
332 /// </summary>
333 public DateTime LastModiTime { get; set; }
334 #endregion
335
336 }
DTO
2,DTO我們已經準備好了,下面就開始寫業務邏輯層了,直接OverseasWarehouseSituationYearReportBusDTO以這個入參
注意:這裡是配合了查詢方法(在下一個随筆中會展現出來)一起寫的代碼
1 #region 更新或插入海外倉情況報表年報
2 /// <summary>
3 /// 更新或插入海外倉情況報表年報
4 /// </summary>
5 /// <param name="dto">實體</param>
6 /// <returns></returns>
7 public async Task<ResultWithNoData> AddOrUpdateOverseasWarehouseSituationYearReport(OverseasWarehouseSituationYearReportBusDTO dto)
8 {
9 ResultWithNoData res = new ResultWithNoData(false, "操作失敗", null);
10 await using var transaction = await _context.Database.BeginTransactionAsync();
11 try
12 {
13 var dataInfo = await GetOverseasWarehouseSituationYearReportFirstOrDefaultAsync(dto.ReportId);
14 if (!dataInfo.MainId.HasValue)
15 {
16 res.Msg = "企業資訊未完善";
17 return res;
18 }
19 if (dataInfo.EntInfoReport == null)
20 {
21 res.Msg = "無報表記錄";
22 return res;
23 }
24 else if (dataInfo.EntInfoReport != null && (dataInfo.EntInfoReport.State == State.待稽核 || dataInfo.EntInfoReport.State == State.稽核已認證))
25 {
26 res.Msg = "請勿重複送出";
27 return res;
28 }
29
30 dto.OverseasWarehouseSituationYearReportDTO.RegionID = dataInfo.EntInfoReport.RegionID;
31 dto.OverseasWarehouseSituationYearReportDTO.ReportId = dto.ReportId;
32 dto.OverseasWarehouseSituationYearReportDTO.MainId = dto.MainId.Value;
33 dto.OverseasWarehouseSituationYearReportDTO.IsDel = false;
34 dto.OverseasWarehouseSituationYearReportDTO.Year = dataInfo.EntInfoReport.Year;
35 dto.OverseasWarehouseSituationYearReportDTO.LastModiTime = DateTime.Now;
36 dto.OverseasHomeYearReportDTO.ForEach(c => { c.RegionID = dataInfo.EntInfoReport.RegionID; c.ReportId = dataInfo.ReportId; c.MainId = dto.MainId.Value; ; c.Year = dto.OverseasWarehouseSituationYearReportDTO.Year; c.CreateTime = DateTime.Now; c.LastModiTime = DateTime.Now; });
37
38
39
40 if (dto.EntInfoReport.State == State.待稽核)
41 dataInfo.EntInfoReport.State = State.待稽核;
42 if (dto.EntInfoReport.State != State.待稽核 && dataInfo.EntInfoReport.State == State.無)
43 dataInfo.EntInfoReport.State = State.草稿資料;
44
45 dataInfo.EntInfoReport.StatisticalHead = dto.EntInfoReport.StatisticalHead;
46 dataInfo.EntInfoReport.FillPeople = dto.EntInfoReport.FillPeople;
47 dataInfo.EntInfoReport.FillPhone = dto.EntInfoReport.FillPhone;
48 dataInfo.EntInfoReport.LastModiTime = DateTime.Now;
49 _context.EntInfoReport.Update(_mapper.Map<EntInfoReport>(dataInfo.EntInfoReport));
50
51 if (dataInfo.OverseasWarehouseSituationYearReportDTO != null)
52 {
53 _context.OverseasWarehouseSituationYearReport.Update(_mapper.Map<OverseasWarehouseSituationYearReport>(dto.OverseasWarehouseSituationYearReportDTO));
54 }
55 else
56 {
57 dto.OverseasWarehouseSituationYearReportDTO.Id = Guid.NewGuid();
58 await _context.OverseasWarehouseSituationYearReport.AddAsync(_mapper.Map<OverseasWarehouseSituationYearReport>(dto.OverseasWarehouseSituationYearReportDTO));
59 }
60
61 foreach (var item in dto.OverseasHomeYearReportDTO)
62 {
63 item.WarehouseId = dto.OverseasWarehouseSituationYearReportDTO.Id;
64 if (dataInfo.OverseasHomeYearReportDTO.Where(c => c.Id == item.Id).Any())
65 {
66 _context.OverseasHomeYearReport.Update(_mapper.Map<OverseasHomeYearReport>(item));
67 }
68 else
69 {
70 item.Id = Guid.NewGuid();
71 await _context.OverseasHomeYearReport.AddAsync(_mapper.Map<OverseasHomeYearReport>(item));
72 }
73 }
74
75 //删除操作
76 foreach (var item in dataInfo.OverseasHomeYearReportDTO)
77 {
78 if (!dto.OverseasHomeYearReportDTO.Where(c => c.Id == item.Id).Any())
79 {
80 item.IsDel = true;
81 _context.OverseasHomeYearReport.Update(_mapper.Map<OverseasHomeYearReport>(item));
82 }
83 }
84
85 var i = await _context.SaveChangesAsync();
86 await transaction.CommitAsync();
87 if (i > 0)
88 {
89 res.Res = true;
90 res.Msg = "操作成功";
91 res.Data = dto;
92 }
93 return res;
94 }
95 catch (Exception e)
96 {
97
98 throw;
99 }
100 }
101 #endregion
View Service
3,這裡一個就是控制器層了,直接調用業務層就好了,中間用一個接口來轉接一下
1 #region 更新或插入海外倉情況表年報
2 /// <summary>
3 /// 更新或插入海外倉情況表年報
4 /// </summary>
5 /// <param name="dto">實體</param>
6 /// <returns></returns>
7 Task<ResultWithNoData> AddOrUpdateOverseasWarehouseSituationYearReport(OverseasWarehouseSituationYearReportBusDTO dto);
8 #endregion
View IService
1 #region 送出或儲存海外倉情況報表(年報)
2 /// <summary>
3 /// 送出或儲存海外倉情況報表(年報)
4 /// </summary>
5 /// <param name="model">查詢實體</param>
6 /// <returns></returns>
7 [HttpPost(nameof(AddOverseasWarehouseSituationYearReport))]
8 public async Task<ResultWithNoData> AddOverseasWarehouseSituationYearReport(OverseasWarehouseSituationYearReportBusDTO model)
9 {
10 ResultWithNoData res = new ResultWithNoData(false, "操作失敗", null);
11
12 if (model.EntInfoReport != null && model.EntInfoReport.State != State.待稽核 && model.EntInfoReport.State != State.草稿資料)
13 return res;
14
15 model.MainId = CurrentObjectId;
16
17 res = await OverseasWarehouseSituationYearReportService.AddOrUpdateOverseasWarehouseSituationYearReport(model);
18 return res;
19 }
20 #endregion
View Controllers