add 流转日志

This commit is contained in:
2021-07-06 17:22:18 +08:00
parent eac0711850
commit 23e2b79cfe
13 changed files with 280 additions and 35 deletions

View File

@@ -13,6 +13,7 @@ using Dapper;
using Ewide.Core.Extension;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Collections.Generic;
namespace Ewide.Application.Service.HouseCode
{
@@ -25,13 +26,20 @@ namespace Ewide.Application.Service.HouseCode
private readonly IRepository<BsHouseCode> _houseCodeRep;
private readonly IDapperRepository _dapperRepository;
public HouseCodeService(IRepository<BsHouseCode> HouseCodeRep, IDapperRepository dapperRepository)
private readonly IUserManager _userManager;
private readonly IHouseLogService _houseLogService;
public HouseCodeService(IRepository<BsHouseCode> HouseCodeRep, IDapperRepository dapperRepository, IUserManager userManager, IHouseLogService houseLogService)
{
_houseCodeRep = HouseCodeRep;
_dapperRepository = dapperRepository;
_userManager = userManager;
_houseLogService = houseLogService;
}
[HttpPost("/houseCode/add")]
[UnitOfWork]
public async Task AddHouseCode(AddHouseCodeInput input)
{
var houseProjectInfoRep = Db.GetRepository<BsHouseProjectInfo>();
@@ -42,10 +50,16 @@ namespace Ewide.Application.Service.HouseCode
var areaCode = await areaCodeRep.DetachedEntities.FirstOrDefaultAsync(a => a.Code == input.AreaCode && a.LevelType == 4);
if(areaCode == null) throw Oops.Oh("区域编码有误,添加失败");
input.HouseCode = areaCode.AdCode + houseProject.Sort.ToString().PadLeft(3, '0') + input.No.ToString().PadLeft(3, '0');
var id = System.Guid.NewGuid().ToString().ToLower();
var houseCode = input.Adapt<BsHouseCode>();
houseCode.Id = id;
var isExist = await _houseCodeRep.AnyAsync(p => p.HouseCode == houseCode.HouseCode);
if (isExist) throw Oops.Oh("房屋编码已存在,不可重复添加");
await _houseCodeRep.InsertAsync(houseCode);
await houseCode.InsertAsync();
// 添加到流转日志
await _houseLogService.AddThenDone(id, _userManager.User, HouseLogType.CreateCode);
await _houseLogService.Add(id, _userManager.User, HouseLogType.SelectMember);
}
[HttpPost("/houseCode/edit")]
@@ -65,7 +79,9 @@ namespace Ewide.Application.Service.HouseCode
[HttpPost("/houseCode/page")]
public async Task<dynamic> QueryPage([FromBody] QueryHouseCodeInput input)
{
var sql = @"SELECT HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.Name,'(',Proj.Note,')') FullProjName FROM bs_house_code HC
var sql = @"SELECT
HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName
FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9)

View File

@@ -31,14 +31,18 @@ namespace Ewide.Application.Service.HouseSafety.HouseInfo
private readonly IUserManager _userManager;
private readonly IDapperRepository _dapperRepository;
private readonly IHouseLogService _houseLogService;
public HouseInfoService(IRepository<BsHouseCode> HouseCodeRep,IRepository<BsHouseInfo> HouseInfoRep, IRepository<BsHouseTask> HouseTaskRep, IUserManager userManager, IDapperRepository dapperRepository)
public HouseInfoService(IRepository<BsHouseCode> HouseCodeRep,IRepository<BsHouseInfo> HouseInfoRep, IRepository<BsHouseTask> HouseTaskRep, IUserManager userManager, IDapperRepository dapperRepository, IHouseLogService houseLogService)
{
_houseCodeRep = HouseCodeRep;
_houseInfoRep = HouseInfoRep;
_houseTaskRep = HouseTaskRep;
_userManager = userManager;
_dapperRepository = dapperRepository;
_houseLogService = houseLogService;
}
[HttpPost("/houseInfo/save")]
@@ -62,7 +66,7 @@ namespace Ewide.Application.Service.HouseSafety.HouseInfo
}
[HttpGet("/houseInfo/getByTaskId")]
[AllowAnonymous]
[UnitOfWork]
public async Task<HouseInfoOutputForDetailPage> GetByTaskId([Required] string taskId)
{
//获取任务实体
@@ -71,7 +75,9 @@ namespace Ewide.Application.Service.HouseSafety.HouseInfo
//获取房屋编码信息
var houseCodeOutputAsync = await _dapperRepository.QueryAsync<HouseCodeOutput>(
@"SELECT HC.Id,HC.Address,HC.ProjectId,HC.ZoneId,HC.Type,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,O.Name ZoneName,Proj.Note ProjectNote,CONCAT(Proj.Name,'(',Proj.Note,')') ProjectFullName,HC.HouseCode,HC.Lng,HC.Lat,HC.No FROM bs_house_code HC
@"SELECT
HC.Id,HC.Address,HC.ProjectId,HC.ZoneId,HC.Type,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,O.Name ZoneName,Proj.Note ProjectNote,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName,HC.HouseCode,HC.Lng,HC.Lat,HC.No
FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_org O ON HC.ZoneId = O.Id
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
@@ -97,6 +103,12 @@ WHERE HC.Id=@HouseCodeId", new { houseTask.HouseCodeId }
taskOutput.PatrolUser = String.IsNullOrEmpty(houseTask.PatrolUser) ? currentUser.Name : houseTask.PatrolUser;
houseInfoOutputForDetailPage.PatrolInfo = taskOutput;
if (houseInfo == null || houseInfo.State <= (int)DataStatus.Submited)
{
// 未建档或者当前数据未提交时打开,标记为已读
await _houseLogService.Read(houseCodeOutput.Id);
}
if (houseInfo == null)
{
houseInfoOutputForDetailPage.HouseInfo = new HouseInfoOutput();

View File

@@ -0,0 +1,109 @@
using Ewide.Core;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public class HouseLogService : IHouseLogService, ITransient
{
private readonly IRepository<BsHouseLog> _bsHouseLogRep;
public HouseLogService(IRepository<BsHouseLog> bsHouseLogRep)
{
_bsHouseLogRep = bsHouseLogRep;
}
[UnitOfWork]
public async Task Add(string houseCodeId, SysUser targetUser, HouseLogType type)
{
await Add(houseCodeId, new List<SysUser> { targetUser }, type);
}
[UnitOfWork]
public async Task Add(string houseCodeId, List<SysUser> targetUsers, HouseLogType type)
{
await new BsHouseLog
{
Id = Guid.NewGuid().ToString(),
HouseCodeId = houseCodeId,
TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)),
Type = type,
Status = HouseLogStatus.Handle
}.InsertAsync();
}
[UnitOfWork]
public async Task Read(string houseCodeId)
{
var log = await _bsHouseLogRep
.Where(p => p.HouseCodeId.Equals(houseCodeId) && p.Status.Equals(HouseLogStatus.Handle))
.OrderByDescending(p => p.CreatedTime)
.FirstOrDefaultAsync();
if (log != null)
{
log.Status = HouseLogStatus.Handling;
await log.UpdateAsync();
}
}
[UnitOfWork]
public async Task Done(string houseCodeId)
{
var log = await _bsHouseLogRep
.Where(p => p.HouseCodeId.Equals(houseCodeId) && !p.Status.Equals(HouseLogStatus.Handled))
.OrderByDescending(p => p.CreatedTime)
.FirstOrDefaultAsync();
if (log != null)
{
log.Status = HouseLogStatus.Handled;
await log.UpdateAsync();
}
}
[UnitOfWork]
public async Task AddThenRead(string houseCodeId, SysUser targetUser, HouseLogType type)
{
await AddThenRead(houseCodeId, new List<SysUser> { targetUser }, type);
}
[UnitOfWork]
public async Task AddThenRead(string houseCodeId, List<SysUser> targetUsers, HouseLogType type)
{
await new BsHouseLog
{
Id = Guid.NewGuid().ToString(),
HouseCodeId = houseCodeId,
TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)),
Type = type,
Status = HouseLogStatus.Handling
}.InsertAsync();
}
[UnitOfWork]
public async Task AddThenDone(string houseCodeId, SysUser targetUser, HouseLogType type)
{
await AddThenDone(houseCodeId, new List<SysUser> { targetUser }, type);
}
[UnitOfWork]
public async Task AddThenDone(string houseCodeId, List<SysUser> targetUsers, HouseLogType type)
{
await new BsHouseLog
{
Id = Guid.NewGuid().ToString(),
HouseCodeId = houseCodeId,
TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)),
Type = type,
Status = HouseLogStatus.Handled
}.InsertAsync();
}
}
}

View File

@@ -0,0 +1,21 @@
using Ewide.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public interface IHouseLogService
{
Task Add(string houseCodeId, SysUser targetUser, HouseLogType type);
Task Add(string houseCodeId, List<SysUser> targetUsers, HouseLogType type);
Task Read(string houseCodeId);
Task Done(string houseCodeId);
Task AddThenRead(string houseCodeId, SysUser targetUser, HouseLogType type);
Task AddThenRead(string houseCodeId, List<SysUser> targetUsers, HouseLogType type);
Task AddThenDone(string houseCodeId, SysUser targetUser, HouseLogType type);
Task AddThenDone(string houseCodeId, List<SysUser> targetUsers, HouseLogType type);
}
}

View File

@@ -322,14 +322,5 @@ WHERE SU.Id=@Id";
return roles;
}
[HttpGet("/houseMember/test")]
[Microsoft.AspNetCore.Authorization.AllowAnonymous]
public async Task<dynamic> Test([FromQuery] string str)
{
var result1 = str.ToCamelCase();
var result2 = str.ToUnderScoreCase();
return result1 + "," + result2;
}
}
}

View File

@@ -1,4 +1,5 @@
using Dapper;
using Ewide.Core;
using Ewide.Core.Extension;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
@@ -19,26 +20,38 @@ namespace Ewide.Application.Service
[ApiDescriptionSettings(Name = "HouseSelector", Order = 180)]
public class HouseSelectorService : IHouseSelectorService, IDynamicApiController, ITransient
{
private readonly IUserManager _userManager;
private readonly IDapperRepository _dapperRep;
private readonly IRepository<BsHouseMemberRelation> _bsHouseMemberRelationRep;
private readonly IRepository<BsHouseCode> _bsHouseCodeRep;
private readonly IRepository<BsHouseTask> _bsHouseTaskRep;
private readonly IRepository<SysUser> _sysUserRep;
private readonly IHouseZoneService _houseZoneService;
private readonly IHouseLogService _houseLogService;
public HouseSelectorService(
IUserManager userManager,
IDapperRepository dapperRep,
IRepository<BsHouseMemberRelation> bsHouseMemberRelationRep,
IRepository<BsHouseCode> bsHouseCodeRep,
IRepository<BsHouseTask> bsHouseTaskRep,
IHouseZoneService houseZoneService
IRepository<SysUser> sysUserRep,
IHouseZoneService houseZoneService,
IHouseLogService houseLogService
)
{
_userManager = userManager;
_dapperRep = dapperRep;
_bsHouseMemberRelationRep = bsHouseMemberRelationRep;
_bsHouseCodeRep = bsHouseCodeRep;
_bsHouseTaskRep = bsHouseTaskRep;
_sysUserRep = sysUserRep;
_houseZoneService = houseZoneService;
_houseLogService = houseLogService;
}
/// <summary>
@@ -50,7 +63,7 @@ namespace Ewide.Application.Service
public async Task<dynamic> HouseSelectorList([FromBody] QueryHouseSelectorInput input)
{
var sql = @"SELECT
HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`,'(',Proj.Note,')') FullProjName
HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName
FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
@@ -77,7 +90,7 @@ WHERE HM.Id IS NULL";
public async Task<dynamic> HouseSelectedList([FromBody] QueryHouseSelectorInput input)
{
var sql = @"SELECT
HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`,'(',Proj.Note,')') FullProjName
HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName
FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
@@ -128,8 +141,10 @@ INNER JOIN (SELECT * FROM bs_house_member_relation WHERE SysUserId = @UserId) HM
if (ids.Count == 0) throw Oops.Oh("当前房屋在此之前已经全部被选中,请确认");
var selectedUser = await _sysUserRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(input.UserId));
// 从用户所在片区中过滤房屋
var zoneId = await _houseZoneService.GetZoneByUser(input.UserId);
var zoneId = await _houseZoneService.GetZoneByUser(selectedUser.Id);
var house = await _bsHouseCodeRep.DetachedEntities.Where(p => ids.Contains(p.Id) && p.ZoneId == zoneId).Select(p => p.Id).ToListAsync();
if (house.Count == 0) throw Oops.Oh("选中的房屋错误");
@@ -137,11 +152,11 @@ INNER JOIN (SELECT * FROM bs_house_member_relation WHERE SysUserId = @UserId) HM
#endregion
// 选定房屋
house.ForEach(p =>
house.ForEach(async p =>
{
new BsHouseMemberRelation
{
SysUserId = input.UserId,
SysUserId = selectedUser.Id,
HouseCodeId = p
}.Insert();
@@ -152,17 +167,23 @@ INNER JOIN (SELECT * FROM bs_house_member_relation WHERE SysUserId = @UserId) HM
{
Id = System.Guid.NewGuid().ToString(),
HouseCodeId = p,
UserID = input.UserId,
UserID = selectedUser.Id,
EndTime = System.DateTime.Now.AddMonths(1),
Status = 0,
TaskType = 0
}.Insert();
await _houseLogService.Done(p);
}
else
{
initTask.UserID = input.UserId;
initTask.Update();
await _houseLogService.AddThenDone(p, _userManager.User, HouseLogType.SelectMember);
}
await _houseLogService.Add(p, selectedUser, HouseLogType.CreateInfo);
});
}

View File

@@ -29,18 +29,22 @@ namespace Ewide.Application.Service
private readonly IDapperRepository _dapperRepository;
private readonly IUserManager _userManager;
public HouseTaskService(IRepository<BsHouseTask> HouseTaskRep, IRepository<BsHouseInfo> HouseInfoRep, IDapperRepository dapperRepository, IUserManager userManager)
private readonly IHouseLogService _houseLogService;
public HouseTaskService(IRepository<BsHouseTask> HouseTaskRep, IRepository<BsHouseInfo> HouseInfoRep, IDapperRepository dapperRepository, IUserManager userManager, IHouseLogService houseLogService)
{
_houseTaskRep = HouseTaskRep;
_houseInfoRep = HouseInfoRep;
_dapperRepository = dapperRepository;
_userManager = userManager;
_houseLogService = houseLogService;
}
[HttpPost("/houseTask/page")]
public async Task<dynamic> QueryPage([FromBody] QueryHouseTaskInput input)
{
var sql = @"SELECT T.Id,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,Proj.Name,CONCAT(Proj.Name,'(',Proj.Note,')') FullProjName,HC.HouseCode,HC.Address,T.EndTime,HC.Type,HC.Industry,HC.No,T.Status,IFNULL(HI.State,0) State FROM `bs_house_task` T
var sql = @"SELECT T.Id,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,Proj.Name,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName,HC.HouseCode,HC.Address,T.EndTime,HC.Type,HC.Industry,HC.No,T.Status,IFNULL(HI.State,0) State FROM `bs_house_task` T
LEFT JOIN bs_house_code HC ON T.HouseCodeId = HC.Id
LEFT JOIN bs_house_info HI ON HI.HouseCodeId = T.HouseCodeId
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
@@ -90,6 +94,9 @@ WHERE {0}";
houseInfo.State = 5;
await houseInfo.UpdateExcludeAsync(new[] { nameof(BsHouseInfo.HouseGrade) }, true);
}
// 提交时流转日志
await _houseLogService.Done(houseTask.HouseCodeId);
}
}
}