Browse Source

解决事务接口事务问题

master
bin.jiang 2 years ago
parent
commit
849c52a5e9
  1. 13550
      host/WmsWebApi.HttpApi.Host/Logs/logs20230224.txt
  2. 17
      host/WmsWebApi.HttpApi.Host/Properties/launchSettings.json
  3. 6
      src/WmsWebApi.Application/OtherZll/OtherZllService.cs
  4. 171
      src/WmsWebApi.Application/ZlldcjLogs/ZlldcjLogAppService.cs
  5. 2
      src/WmsWebApi.EntityFrameworkCore/EntityFrameworkCore/WmsWebApiDbContext.cs

13550
host/WmsWebApi.HttpApi.Host/Logs/logs20230224.txt

File diff suppressed because it is too large

17
host/WmsWebApi.HttpApi.Host/Properties/launchSettings.json

@ -1,24 +1,9 @@
{ {
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:5000",
"sslPort": 5000
}
},
"profiles": { "profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WmsWebApi.DemoApp": { "WmsWebApi.DemoApp": {
"commandName": "Project", "commandName": "Project",
"launchBrowser": true, "launchBrowser": true,
"applicationUrl": "https://localhost:5000", "applicationUrl": "http://localhost:5000",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
} }

6
src/WmsWebApi.Application/OtherZll/OtherZllService.cs

@ -4,6 +4,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json; using Newtonsoft.Json;
using Volo.Abp;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Volo.Abp.Uow; using Volo.Abp.Uow;
@ -60,7 +61,7 @@ public class OtherZllService : ApplicationService, IOtherZllService
result.MESSAGE = "Json格式不正确,详细信息:" + ex.Message; result.MESSAGE = "Json格式不正确,详细信息:" + ex.Message;
return result; return result;
} }
try try
{ {
if (_dtoList[0].ZDJLX == "20") if (_dtoList[0].ZDJLX == "20")
@ -324,10 +325,11 @@ public class OtherZllService : ApplicationService, IOtherZllService
await _otherZllManager.AddAsync(dto); await _otherZllManager.AddAsync(dto);
} }
} }
catch(Exception ex) catch (Exception ex)
{ {
result.TYPE = 'E'; result.TYPE = 'E';
result.MESSAGE = ex.Message; result.MESSAGE = ex.Message;
throw new UserFriendlyException(ex.Message, null, null, ex);
} }
return result; return result;

171
src/WmsWebApi.Application/ZlldcjLogs/ZlldcjLogAppService.cs

@ -11,6 +11,8 @@ using Volo.Abp.Uow;
using WmsWebApi.EntityFrameworkCore; using WmsWebApi.EntityFrameworkCore;
using WmsWebApi.Wms; using WmsWebApi.Wms;
using Abp.Web.Models; using Abp.Web.Models;
using Microsoft.EntityFrameworkCore;
using Abp.Domain.Uow;
namespace WmsWebApi.ZlldcjLogs; namespace WmsWebApi.ZlldcjLogs;
@ -22,21 +24,24 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
private readonly ITmSapMoveTypeRepository _tbSapMoveTypeRepository; private readonly ITmSapMoveTypeRepository _tbSapMoveTypeRepository;
private readonly ITmOtherAskRepository _tbOtherInOutAskRepository; private readonly ITmOtherAskRepository _tbOtherInOutAskRepository;
private readonly TmOtherAskRepositoryUpdate _tmOtherAskRepositoryUpdate; private readonly TmOtherAskRepositoryUpdate _tmOtherAskRepositoryUpdate;
private readonly Volo.Abp.Uow.IUnitOfWorkManager _unitOfWorkManager;
public ZlldcjLogAppService(ZlldcjLogManager zlldcjLogManager public ZlldcjLogAppService(ZlldcjLogManager zlldcjLogManager
, ITbBillRepository tbBillRepository , ITbBillRepository tbBillRepository
, ITmSapMoveTypeRepository tbSapMoveTypeRepository , ITmSapMoveTypeRepository tbSapMoveTypeRepository
, ITmOtherAskRepository tbOtherInOutAskRepository , ITmOtherAskRepository tbOtherInOutAskRepository
, TmOtherAskRepositoryUpdate tmOtherAskRepositoryUpdate) , TmOtherAskRepositoryUpdate tmOtherAskRepositoryUpdate
, Volo.Abp.Uow.IUnitOfWorkManager unitOfWorkManager)
{ {
_zlldcjLogManager = zlldcjLogManager; _zlldcjLogManager = zlldcjLogManager;
_tbBillRepository = tbBillRepository; _tbBillRepository = tbBillRepository;
_tbSapMoveTypeRepository = tbSapMoveTypeRepository; _tbSapMoveTypeRepository = tbSapMoveTypeRepository;
_tbOtherInOutAskRepository = tbOtherInOutAskRepository; _tbOtherInOutAskRepository = tbOtherInOutAskRepository;
_tmOtherAskRepositoryUpdate = tmOtherAskRepositoryUpdate; _tmOtherAskRepositoryUpdate = tmOtherAskRepositoryUpdate;
_unitOfWorkManager = unitOfWorkManager;
} }
[HttpPost("add")] [HttpPost("add")]
public async Task<ReturnResult> AddAsync(List<ZlldcjLogDto> dto) public async Task<ReturnResult> AddAsync(List<ZlldcjLogDto> dto)
{ {
var result = new ReturnResult(); var result = new ReturnResult();
@ -47,8 +52,8 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
entity.SetId(GuidGenerator); entity.SetId(GuidGenerator);
_ZlldcjLogs.Add(entity); _ZlldcjLogs.Add(entity);
} }
try try
{ {
var ret = await _zlldcjLogManager.AddAsync(_ZlldcjLogs); var ret = await _zlldcjLogManager.AddAsync(_ZlldcjLogs);
@ -81,23 +86,23 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
return result; return result;
} }
var dtoList = dtos.Where(p => p.WERKS == "1000").ToList(); try
if (dtoList == null || dtoList.Count == 0)
{
bErr = true;
result.MESSAGE = "err:没有1000工厂数据";
}
else
{ {
foreach (var dtoItem in dtos) var dtoList = dtos.Where(p => p.WERKS == "1000").ToList();
if (dtoList == null || dtoList.Count == 0)
{ {
var entity = ObjectMapper.Map<ZlldcjLogDto, ZlldcjLog>(dtoItem); bErr = true;
entity.SetId(GuidGenerator); result.MESSAGE = "err:没有1000工厂数据";
_ZlldcjLogs.Add(entity);
} }
else
try
{ {
foreach (var dtoItem in dtos)
{
var entity = ObjectMapper.Map<ZlldcjLogDto, ZlldcjLog>(dtoItem);
entity.SetId(GuidGenerator);
_ZlldcjLogs.Add(entity);
}
var djList = _ZlldcjLogs.Select(p => p.ZLLDJ).Distinct(); var djList = _ZlldcjLogs.Select(p => p.ZLLDJ).Distinct();
foreach (var dj in djList) foreach (var dj in djList)
{ {
@ -106,7 +111,7 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
//检查是否为存在 //检查是否为存在
var tbBill = await _tbBillRepository.FirstOrDefaultAsync(p => p.BillNum == dj); var tbBill = await _tbBillRepository.FirstOrDefaultAsync(p => p.BillNum == dj);
//tbBill.CheckIsNotExist(); //tbBill.CheckIsNotExist();
if(tbBill != null) if (tbBill != null)
{ {
result.TYPE = 'E'; result.TYPE = 'E';
bErr = true; bErr = true;
@ -127,8 +132,8 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
}; };
//确定SubBillType //确定SubBillType
var sapMoveType = await _tbSapMoveTypeRepository.FirstOrDefaultAsync(p => p.SAPBillType == _zlldcjList[0].ZDJLX var sapMoveType = await _tbSapMoveTypeRepository.FirstOrDefaultAsync(p => p.SAPBillType == _zlldcjList[0].ZDJLX
&& p.GetOrBack == _zlldcjList[0].ZLTLX && p.GetOrBack == _zlldcjList[0].ZLTLX
&& p.MoveType == _zlldcjList[0].BWART); && p.MoveType == _zlldcjList[0].BWART);
var sapBillDesc = ""; var sapBillDesc = "";
if (sapMoveType != null) if (sapMoveType != null)
{ {
@ -140,7 +145,7 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
foreach (var item in _zlldcjList) foreach (var item in _zlldcjList)
{ {
var hasdetail = await _tbOtherInOutAskRepository.FirstOrDefaultAsync(p => p.BillNum == item.ZLLDJ && p.BillLineID == item.ZLLITEM.ToString()); var hasdetail = await _tbOtherInOutAskRepository.FirstOrDefaultAsync(p => p.BillNum == item.ZLLDJ && p.BillLineID == item.ZLLITEM.ToString());
if(hasdetail != null) if (hasdetail != null)
{ {
throw new UserFriendlyException($"单号 {item.ZLLDJ},行号 {item.ZLLITEM} 已存在!"); throw new UserFriendlyException($"单号 {item.ZLLDJ},行号 {item.ZLLITEM} 已存在!");
} }
@ -173,9 +178,8 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
item.IType = "新增"; item.IType = "新增";
} }
//新增本地单据 //新增本地单据
await _tbBillRepository.InsertAsync(tbBill,true); await _tbBillRepository.InsertAsync(tbBill, true);
await _tbOtherInOutAskRepository.InsertManyAsync(askList); await _tbOtherInOutAskRepository.InsertManyAsync(askList);
} }
else else
{ {
@ -186,15 +190,21 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
} }
//新增日志记录 //新增日志记录
await _zlldcjLogManager.AddZlldcjAsync(_zlldcjList); await _zlldcjLogManager.AddZlldcjAsync(_zlldcjList);
} }
} }
catch (Exception ex)
{
bErr = true;
result.TYPE = 'E';
result.MESSAGE = ex.Message;
}
} }
catch (Exception ex)
{
bErr = true;
result.TYPE = 'E';
result.MESSAGE = ex.Message;
throw new UserFriendlyException(ex.Message, null, null, ex);
}
finally
{
}
try try
{ {
WmsWebApiZLLDCJDTO zlldcjdto = new WmsWebApiZLLDCJDTO() WmsWebApiZLLDCJDTO zlldcjdto = new WmsWebApiZLLDCJDTO()
@ -217,10 +227,32 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
result.TYPE = 'E'; result.TYPE = 'E';
result.MESSAGE = ex.GetBaseException().Message; result.MESSAGE = ex.GetBaseException().Message;
} }
return result; return result;
} }
private async Task AddDtoAsync(WmsWebApiZLLDCJDTO dto)
{
if (dto == null) { return; }
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: false))
{
await _zlldcjLogManager.AddDtoAsync(dto);
await uow.SaveChangesAsync();
}
}
private async Task AddZlldcjAsync(List<ZlldcjLog> dtos)
{
if (dtos == null || dtos.Count <= 0) { return; }
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: false))
{
await _zlldcjLogManager.AddZlldcjAsync(dtos);
await uow.SaveChangesAsync();
}
}
[HttpPost("close")] [HttpPost("close")]
//[UnitOfWork(false)] //[UnitOfWork(false)]
public async Task<ReturnResult> CloseAsync([FromBody] object content)//ZlldcjLogDto dto public async Task<ReturnResult> CloseAsync([FromBody] object content)//ZlldcjLogDto dto
@ -312,7 +344,7 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
zlldcjdto.ITYPE += result.MESSAGE; zlldcjdto.ITYPE += result.MESSAGE;
} }
await _zlldcjLogManager.AddDtoAsync(zlldcjdto); await _zlldcjLogManager.AddDtoAsync(zlldcjdto);
await CurrentUnitOfWork.SaveChangesAsync(); await CurrentUnitOfWork.SaveChangesAsync();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -321,4 +353,79 @@ public class ZlldcjLogAppService : ApplicationService, IZlldcjLogAppService
} }
return result; return result;
} }
[HttpPost("test/shiwu")]
public async Task<ReturnResult> TestShiWu()
{
var result = new ReturnResult();
var dateTime = DateTime.Now;
var tbBill = new TB_BILL()
{
BillNum = dateTime.ToString("yyyyMMddHHmmss"),
State = 0,
BillType = 0,
SubBillType = 0,
BillTime = dateTime,
OperName = dateTime.ToString("yyyyMMddHHmmss"),
DetailQty = 0,
Guid = GuidGenerator.Create()
};
List<TM_PG_OTHER_INOUT_ASK> askList = new List<TM_PG_OTHER_INOUT_ASK>();
for (int i = 0; i < 2; i++)
{
askList.Add(new TM_PG_OTHER_INOUT_ASK()
{
BillNum = dateTime.ToString("yyyyMMddHHmmss"),
BillLineID = i.ToString(),
});
}
var dbContext = await _tbBillRepository.GetDbContextAsync();
dbContext.Database.SetCommandTimeout(120);
try
{
await _tbBillRepository.InsertAsync(tbBill);
throw new Exception("异常了");
await _tbOtherInOutAskRepository.InsertManyAsync(askList);
}
catch (Exception ex)
{
result.TYPE = 'E';
result.MESSAGE = ex.GetBaseException().Message;
throw new UserFriendlyException("经过进一步包装的异常", null, null, ex);
//throw new Exception("经过进一步包装的异常", ex);
}
finally
{
result.TYPE = 'E';
await SaveLogsAsync();
}
return result;
}
private async Task SaveLogsAsync()
{
var dateTime = DateTime.Now;
var tbBill = new TB_BILL()
{
BillNum = dateTime.ToString("yyyyMMddHHmmss") + "log",
State = 0,
BillType = 0,
SubBillType = 0,
BillTime = dateTime,
OperName = dateTime.ToString("yyyyMMddHHmmss"),
DetailQty = 0,
Guid = GuidGenerator.Create()
};
using (var uow = _unitOfWorkManager.Begin(
requiresNew: true, isTransactional: false
))
{
await _tbBillRepository.InsertAsync(tbBill, true);
//await uow.SaveChangesAsync();
}
}
} }

2
src/WmsWebApi.EntityFrameworkCore/EntityFrameworkCore/WmsWebApiDbContext.cs

@ -46,7 +46,7 @@ namespace WmsWebApi.EntityFrameworkCore
public WmsWebApiDbContext(DbContextOptions<WmsWebApiDbContext> options) public WmsWebApiDbContext(DbContextOptions<WmsWebApiDbContext> options)
: base(options) : base(options)
{ {
//this.Database.SetCommandTimeout(120);
} }
protected override void OnModelCreating(ModelBuilder builder) protected override void OnModelCreating(ModelBuilder builder)

Loading…
Cancel
Save