更新或者添加数据报表总结
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 }
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
3,这里一个就是控制器层了,直接调用业务层就好了,中间用一个接口来转接一下
1 #region 更新或插入海外仓情况表年报 2 /// <summary> 3 /// 更新或插入海外仓情况表年报 4 /// </summary> 5 /// <param name="dto">实体</param> 6 /// <returns></returns> 7 Task<ResultWithNoData> AddOrUpdateOverseasWarehouseSituationYearReport(OverseasWarehouseSituationYearReportBusDTO dto); 8 #endregion
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

浙公网安备 33010602011771号