diff --git a/BasicData/Tnb.BasicData.Entities/Dto/OrgLocOutput.cs b/BasicData/Tnb.BasicData.Entities/Dto/OrgLocOutput.cs
new file mode 100644
index 00000000..84af4710
--- /dev/null
+++ b/BasicData/Tnb.BasicData.Entities/Dto/OrgLocOutput.cs
@@ -0,0 +1,9 @@
+namespace Tnb.BasicData.Entities
+{
+ public class OrgLocOutput
+ {
+ public string id { get; set; }
+ public string f_organize_id { get; set; }
+ public string f_object_id { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/BasicData/Tnb.BasicData/BasOrgLocationService.cs b/BasicData/Tnb.BasicData/BasOrgLocationService.cs
new file mode 100644
index 00000000..a47082a8
--- /dev/null
+++ b/BasicData/Tnb.BasicData/BasOrgLocationService.cs
@@ -0,0 +1,104 @@
+using JNPF.Common.Core.Manager;
+using JNPF.Common.Dtos.VisualDev;
+using JNPF.Common.Enums;
+using JNPF.Common.Filter;
+using JNPF.Common.Security;
+using JNPF.DependencyInjection;
+using JNPF.DynamicApiController;
+using JNPF.FriendlyException;
+using JNPF.Systems.Entitys.Permission;
+using JNPF.Systems.Entitys.System;
+using JNPF.VisualDev;
+using JNPF.VisualDev.Entitys;
+using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
+using JNPF.VisualDev.Interfaces;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using SqlSugar;
+using Tnb.BasicData.Entities;
+
+namespace Tnb.BasicData
+{
+ ///
+ /// 工位绑定库位
+ ///
+ [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)]
+ [Route("api/[area]/[controller]/[action]")]
+ [OverideVisualDev(ModelId)]
+ public class BasOrgLocationService : IOverideVisualDevService, IDynamicApiController, ITransient
+ {
+ public const string ModelId = "35018844692245";
+ private readonly ISqlSugarRepository _repository;
+ private readonly IUserManager _userManager;
+ private readonly IVisualDevService _visualDevService;
+ public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
+
+ public BasOrgLocationService(
+ ISqlSugarRepository repository,
+ IUserManager userManager,
+ IVisualDevService visualDevService)
+ {
+ _repository = repository;
+ _userManager = userManager;
+ _visualDevService = visualDevService;
+ OverideFuncs.GetListAsync = GetList;
+ OverideFuncs.CreateAsync = Create;
+ }
+
+ private async Task GetList(VisualDevModelListQueryInput input)
+ {
+ ISqlSugarClient db = _repository.AsSugarClient();
+ Dictionary? queryJson = !string.IsNullOrEmpty(input.queryJson) ? Newtonsoft.Json.JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary();
+ string f_organize_id = queryJson.ContainsKey("f_organize_id") ? queryJson["f_organize_id"].ToString() : "";
+ SqlSugarPagedList result = await db.Queryable()
+ .LeftJoin((a, b) => a.ObjectId == b.id)
+ .LeftJoin((a,b,c)=>a.OrganizeId==c.Id)
+ .WhereIF(!string.IsNullOrEmpty(f_organize_id), (a, b) => a.OrganizeId.Contains(f_organize_id))
+ .Where(a=>a.ObjectType=="Loc")
+ .OrderByDescending(a => a.CreatorTime)
+ .Select((a, b,c) => new OrgLocOutput
+ {
+ id = a.Id,
+ f_organize_id = c.FullName,
+ f_object_id = b.location_name
+ }).ToPagedListAsync(input.currentPage, input.pageSize);
+ return PageResult.SqlSugarPageResult(result);
+ }
+
+ ///
+ /// 保存工序工位关联表
+ ///
+ [HttpPost]
+ public async Task Create(VisualDevModelDataCrInput visualDevModelDataCrInput)
+ {
+ DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
+ {
+ Console.WriteLine(JsonConvert.SerializeObject(visualDevModelDataCrInput.data));
+ List orgIds = JsonConvert.DeserializeObject>(visualDevModelDataCrInput.data["f_organize_id"].ToString());
+ List locIds = JsonConvert.DeserializeObject>(visualDevModelDataCrInput.data["f_object_id"].ToString());
+ List list = new List();
+ foreach (var item in locIds)
+ {
+ list.Add(new OrganizeRelationEntity()
+ {
+ Id = SnowflakeIdHelper.NextId(),
+ OrganizeId = orgIds[orgIds.Count-1],
+ ObjectId = item,
+ ObjectType = "Loc",
+ CreatorTime = DateTime.Now,
+ CreatorUserId = _userManager.UserId
+ });
+ }
+
+ if (list.Count > 0)
+ {
+ await _repository.AsSugarClient().Insertable(list).ExecuteCommandAsync();
+ }
+
+ });
+
+ return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : (dynamic)(result.IsSuccess ? "保存成功" : result.ErrorMessage);
+ }
+ }
+}
\ No newline at end of file