Browse Source

新增会务物料供应商、物料信息、物料类型列表的CURD

jiangjc 1 year ago
parent
commit
616478f8a7

+ 4 - 1
OASystem/EntitySync/Program.cs

@@ -80,6 +80,9 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
 
     //typeof(Sys_Message),
     //typeof(Sys_MessageReadAuth)
-    typeof(Crm_DeleClient)
+    //typeof(Crm_DeleClient)
+    
+    typeof(Res_ItemDetailInfo),
+    typeof(Res_ItemVendor)
 });
 Console.WriteLine("数据库结构同步完成!");

+ 261 - 13
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -18,8 +18,11 @@ namespace OASystem.API.Controllers
         private readonly LocalGuideDataRepository _localGuideDataRep;
         private readonly ThreeCodeRepository _ThreeCodeRep;
         private readonly HotelDataRepository _hotelDataRep;
+        private readonly ResItemInfoRepository _resItemInfoRep;
 
-        public ResourceController(IMapper mapper, IConfiguration config, CarDataRepository carDataRep, LocalGuideDataRepository localGuideDataRep, ThreeCodeRepository threeCodeRep, HotelDataRepository hotelDataRep)
+        public ResourceController(IMapper mapper, IConfiguration config, CarDataRepository carDataRep,
+            LocalGuideDataRepository localGuideDataRep, ThreeCodeRepository threeCodeRep,
+            HotelDataRepository hotelDataRep, ResItemInfoRepository resItemInfoRep)
         {
             _mapper = mapper;
             _config = config;
@@ -27,6 +30,7 @@ namespace OASystem.API.Controllers
             _localGuideDataRep = localGuideDataRep;
             _ThreeCodeRep = threeCodeRep;
             _hotelDataRep = hotelDataRep;
+            _resItemInfoRep = resItemInfoRep;
         }
         #region 车公司资料板块
 
@@ -40,7 +44,7 @@ namespace OASystem.API.Controllers
         {
             try
             {
-                if (dto.PortType==1)
+                if (dto.PortType == 1)
                 {
                     var carDada = _carDataRep.QueryDto<Res_CarData, CarDataView>().ToList();
                     if (carDada.Count == 0)
@@ -50,29 +54,29 @@ namespace OASystem.API.Controllers
                     carDada = carDada.OrderByDescending(s => s.CreateTime).ToList();
                     return Ok(JsonView(true, "查询成功", carDada));
                 }
-                else if(dto.PortType==2)
+                else if (dto.PortType == 2)
                 {
                     var carDada = _carDataRep.QueryDto<Res_CarData, CarDataView>().ToList();
                     if (carDada.Count == 0)
                     {
                         return Ok(JsonView(false, "暂无数据!"));
                     }
-                    carDada=carDada.OrderByDescending(s=>s.CreateTime).ToList();
+                    carDada = carDada.OrderByDescending(s => s.CreateTime).ToList();
                     return Ok(JsonView(true, "查询成功", carDada));
                 }
                 else
                 {
                     return Ok(JsonView(false, "请传入PortType参数!1:Web,2:Android,3:IOS"));
                 }
-               
+
             }
             catch (Exception ex)
             {
                 return Ok(JsonView(false, "程序错误!"));
                 throw;
             }
-           
-            
+
+
         }
 
         /// <summary>
@@ -102,14 +106,14 @@ namespace OASystem.API.Controllers
                     return Ok(JsonView(false, "请检查联系方式是否填写正确!"));
                 }
 
-                var carDada = _carDataRep.QueryDto<Res_CarData, CarDataView>(a=>a.UnitArea==dto.UnitArea && a.UnitName==dto.UnitName && a.Contact==dto.Contact && a.ContactTel==dto.ContactTel).ToList();
-                if (carDada.Count!=0)
+                var carDada = _carDataRep.QueryDto<Res_CarData, CarDataView>(a => a.UnitArea == dto.UnitArea && a.UnitName == dto.UnitName && a.Contact == dto.Contact && a.ContactTel == dto.ContactTel).ToList();
+                if (carDada.Count != 0)
                 {
                     return Ok(JsonView(false, "该信息已存在,请勿重复添加!"));
                 }
                 Res_CarData _CarData = _mapper.Map<Res_CarData>(dto);
                 int id = await _carDataRep.AddAsyncReturnId(_CarData);
-                if (id == 0) 
+                if (id == 0)
                 {
                     return Ok(JsonView(false, "添加失败!"));
                 }
@@ -301,12 +305,12 @@ namespace OASystem.API.Controllers
         {
             try
             {
-                var res = await _localGuideDataRep.SoftDeleteByIdAsync<Res_LocalGuideData>(dto.Id.ToString(),dto.DeleteUserId);
+                var res = await _localGuideDataRep.SoftDeleteByIdAsync<Res_LocalGuideData>(dto.Id.ToString(), dto.DeleteUserId);
                 if (!res)
                 {
                     return Ok(JsonView(false, "删除失败"));
                 }
-                return Ok(JsonView(true,"删除成功!"));
+                return Ok(JsonView(true, "删除成功!"));
             }
             catch (Exception ex)
             {
@@ -341,7 +345,7 @@ namespace OASystem.API.Controllers
                 else if (dto.PortType == 2)
                 {
                     //分页写法
-                    if (dto.PageIndex==0 || dto.PageSize==0)
+                    if (dto.PageIndex == 0 || dto.PageSize == 0)
                     {
                         return Ok(JsonView(false, "请传入PageIndex和PageSize参数"));
                     }
@@ -548,5 +552,249 @@ namespace OASystem.API.Controllers
             }
         }
         #endregion
+
+        #region 物料信息、供应商维护
+        #region 供应商
+        /// <summary>
+        /// 物料供应商查询
+        /// </summary>
+        /// <param name="paras">Json序列化</param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostSearchItemVendor(string paras)
+        {
+            if (string.IsNullOrEmpty(paras))
+            {
+                return Ok(JsonView(false, "参数为空"));
+            }
+
+            Search_ResItemVendorDto _ItemVendorDto = System.Text.Json.JsonSerializer.Deserialize<Search_ResItemVendorDto>(paras);
+            if (_ItemVendorDto != null)
+            {
+                if (_ItemVendorDto.SearchType == 2) //获取列表
+                {
+                    Res_ItemVendorListView rstList = _resItemInfoRep.GetVendorList(_ItemVendorDto);
+                    return Ok(rstList);
+                }
+                else
+                {
+                    Res_ItemVendorView rstInfo = _resItemInfoRep.getVendorInfo(_ItemVendorDto);
+                    return Ok(rstInfo);
+                }
+            }
+            else
+            {
+                return Ok(JsonView(false, "参数反序列化失败"));
+            }
+
+            return Ok(JsonView(false));
+        }
+
+        /// <summary>
+        /// 创建/编辑/删除供应商信息
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostEditItemVendor(Edit_ResItemVendorDto _dto)
+        {
+            bool rst = false;
+
+            if (_dto.EditType >= 0)
+            {
+
+                if (string.IsNullOrEmpty(_dto.VendorFullName))
+                {
+                    return Ok(JsonView(false, "全称未填写"));
+                }
+
+                if (string.IsNullOrEmpty(_dto.VendorLinker))
+                {
+                    return Ok(JsonView(false, "联系人未填写"));
+                }
+
+                if (string.IsNullOrEmpty(_dto.VendorMobile))
+                {
+                    return Ok(JsonView(false, "联系人手机号未填写"));
+                }
+                if (_dto.EditType == 0)
+                {
+                    var checkEmpty = _resItemInfoRep.Query<Res_ItemVendor>(s => s.FullName == _dto.VendorFullName).First();
+                    if (checkEmpty != null)
+                    {
+                        return Ok(JsonView(false, "已存在同名供应商"));
+                    }
+
+                    rst = await _resItemInfoRep.addVendorInfo(_dto);
+                }
+                else if (_dto.EditType == 1)
+                {
+                    if (_dto.VendorId > 0)
+                    {
+                        Res_ItemVendor _entity = _mapper.Map<Res_ItemVendor>(_dto);
+
+                        rst = await _resItemInfoRep.updVendorInfo(_entity);
+                    }
+                    else
+                    {
+                        return Ok(JsonView(false, "供应商不存在"));
+                    }
+                }
+            }
+            else
+            {
+                if (_dto.VendorId < 1 || _dto.SysUserId < 1)
+                {
+                    return Ok(JsonView(false, "用户Id或供应商Id不存在"));
+                }
+                Res_ItemVendor _entity = _mapper.Map<Res_ItemVendor>(_dto);
+
+                rst = await _resItemInfoRep.delVendorInfo(_entity);
+
+            }
+
+            return Ok(JsonView(rst));
+        }
+
+        #endregion
+        #region 物料信息
+        /// <summary>
+        /// 物料信息查询
+        /// </summary>
+        /// <param name="paras">Json序列化</param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostSearchItemInfo(string paras)
+        {
+            if (string.IsNullOrEmpty(paras))
+            {
+                return Ok(JsonView(false, "参数为空"));
+            }
+
+            Search_ItemInfoDto _ItemInfoDto = System.Text.Json.JsonSerializer.Deserialize<Search_ItemInfoDto>(paras);
+            if (_ItemInfoDto != null)
+            {
+                if (_ItemInfoDto.SearchType == 2) //获取列表
+                {
+                    Res_ItemInfoListView rstList = _resItemInfoRep.GetItemList(_ItemInfoDto);
+                    return Ok(rstList);
+                }
+                else
+                {
+                    Res_ItemInfoView rstInfo = _resItemInfoRep.getItemInfo(_ItemInfoDto);
+                    return Ok(rstInfo);
+                }
+            }
+            else
+            {
+                return Ok(JsonView(false, "参数反序列化失败"));
+            }
+
+            return Ok(JsonView(false));
+        }
+
+        /// <summary>
+        /// 创建/编辑/删除物料信息
+        /// </summary>
+        /// 
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostEditItemInfo(Edit_ResItemInfoDto _dto)
+        {
+            bool rst = false;
+
+            if (_dto.EditType >= 0)
+            {
+                if (_dto.VendorId < 1)
+                {
+                    return Ok(JsonView(false, "未选择供应商"));
+                }
+                if (string.IsNullOrEmpty(_dto.ItemName))
+                {
+                    return Ok(JsonView(false, "物料名称为空"));
+                }
+                if (_dto.SetDataId < 1)
+                {
+                    return Ok(JsonView(false, "未选择物料类型"));
+                }
+                if (_dto.SysUserId < 1)
+                {
+                    return Ok(JsonView(false, "当前操作用户Id为空"));
+                }
+                if (_dto.CurrRate <= 0)
+                {
+                    return Ok(JsonView(false, "物料录入价格不能小于等于0"));
+                }
+
+                if (_dto.EditType == 0)
+                {
+                    //判断物料名称、类型、供应商全部重复
+                    var checkEmpty = _resItemInfoRep.Query<Res_ItemDetailInfo>(s => s.ItemName == _dto.ItemName && s.SetDataId == _dto.SetDataId && s.VendorId == _dto.VendorId).First();
+                    if (checkEmpty != null)
+                    {
+                        return Ok(JsonView(false, "已存在重复物料信息"));
+                    }
+                    Res_ItemDetailInfo _entity = _mapper.Map<Res_ItemDetailInfo>(_dto);
+                    DateTime dtNow = DateTime.Now;
+                    _entity.CreateUserId = _dto.SysUserId;
+                    _entity.IsDel = 0;
+                    _entity.MaxRate = _dto.CurrRate;
+                    _entity.MaxDt = dtNow;
+                    _entity.CurrRate = _dto.CurrRate;
+                    _entity.CurrDt = dtNow;
+                    _entity.MinRate = _dto.CurrRate;
+                    _entity.MinDt = dtNow;
+
+                    rst = await _resItemInfoRep.AddAsync<Res_ItemDetailInfo>(_entity) > 0;
+                }
+                else if (_dto.EditType == 1)
+                {
+                    if (_dto.ItemId > 0)
+                    {
+                        Res_ItemDetailInfo _entity = _mapper.Map<Res_ItemDetailInfo>(_dto);
+                        _entity.Id = _dto.ItemId;
+
+                        rst = await _resItemInfoRep.updItemInfo(_entity);
+                    }
+                    else
+                    {
+                        return Ok(JsonView(false, "供应商不存在"));
+                    }
+                }
+            }
+            else
+            {
+                if (_dto.ItemId < 1 || _dto.SysUserId < 1)
+                {
+                    return Ok(JsonView(false, "用户Id或物料信息Id不存在"));
+                }
+                Res_ItemDetailInfo _entity = _mapper.Map<Res_ItemDetailInfo>(_dto);
+
+                rst = await _resItemInfoRep.delItemInfo(_entity);
+            }
+
+            return Ok(JsonView(rst));
+        }
+        #endregion
+        #region 物料类型获取
+        /// <summary>
+        /// 物料类型列表获取
+        /// </summary>
+        /// <param name="paras">Json序列化</param>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetItemTypeListBySetData()
+        {
+            List<SetDataView> list = _resItemInfoRep.GetItemTypeListBySetData();
+
+            return Ok(JsonView(list));
+        }
+        #endregion
+        #endregion
     }
 }

+ 17 - 5
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -42,14 +42,14 @@ namespace OASystem.Domain.AutoMappers
 
             #region 岗位板块
             CreateMap<Sys_JobPost, JobPostView>();
-            CreateMap<AddJobPostDto,Sys_JobPost>();
+            CreateMap<AddJobPostDto, Sys_JobPost>();
             CreateMap<Sys_JobPostI, JobPostView>();
             #endregion
 
             #region 用户板块
             CreateMap<UserDto, Sys_Users>();
             CreateMap<Sys_Users, UserInfo>();
-            CreateMap<UserInfo,UserInfoWebView>();
+            CreateMap<UserInfo, UserInfoWebView>();
 
             #endregion
 
@@ -68,12 +68,10 @@ namespace OASystem.Domain.AutoMappers
             CreateMap<Res_CarData, CarDataView>();
             CreateMap<AddCarDataDto, Res_CarData>();
             #endregion
-
             #region 导游地接资料
             CreateMap<Res_LocalGuideData, LocalGuideDataView>();
-            CreateMap<LocalGuideOperationDto,Res_LocalGuideData>();
+            CreateMap<LocalGuideOperationDto, Res_LocalGuideData>();
             #endregion
-
             #region 机场三字码资料
             CreateMap<Res_ThreeCode, ThreeCodeView>();
             CreateMap<ThreeCodeOperationDto, Res_ThreeCode>();
@@ -81,6 +79,20 @@ namespace OASystem.Domain.AutoMappers
             #region 酒店资料数据
             CreateMap<Res_HotelData, HotelDataView>();
             #endregion
+            #region 物料供应商
+            CreateMap<Edit_ResItemVendorDto, Res_ItemVendor>()
+                 .ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.VendorAddress))
+                 .ForMember(dest => dest.CreateUserId, opt => opt.MapFrom(src => src.SysUserId))
+                 .ForMember(dest => dest.Remark, opt => opt.MapFrom(src => src.Remark))
+                 .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.VendorFullName))
+                 .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.VendorId))
+                 .ForMember(dest => dest.Job, opt => opt.MapFrom(src => src.VendorJob))
+                 .ForMember(dest => dest.Linker, opt => opt.MapFrom(src => src.VendorLinker))
+                 .ForMember(dest => dest.Mobile, opt => opt.MapFrom(src => src.VendorMobile))
+                 .ForMember(dest => dest.ShortName, opt => opt.MapFrom(src => src.VendorShortName));
+
+            CreateMap<Edit_ResItemInfoDto, Res_ItemDetailInfo>();
+            #endregion
             #endregion
         }
     }

+ 2 - 2
OASystem/OASystem.Domain/Dtos/DtoBase.cs

@@ -17,7 +17,7 @@ namespace OASystem.Domain.Dtos
         /// </summary>
         public int PortType { get; set; } = 1;
 
-        public int PageIndex { get; set; }
-        public int PageSize { get; set; }
+        public int PageIndex { get; set; } = 1;
+        public int PageSize { get; set; } = 10;
     }
 }

+ 5 - 0
OASystem/OASystem.Domain/Dtos/Groups/Grp_ScheduleDto.cs

@@ -17,6 +17,11 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int SearchType { get; set; }
 
+        /// <summary>
+        /// 删除状态
+        /// </summary>
+        public int IsDel { get; set; } = 0;
+
         #region 对象
 
         /// <summary>

+ 140 - 0
OASystem/OASystem.Domain/Dtos/Resource/Res_ItemVendorDto.cs

@@ -0,0 +1,140 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Resource
+{
+
+    #region 供应商查询参数实体
+
+    public class Search_ResItemVendorDto : DtoBase
+    {
+        /// <summary>
+        /// 查询类型(int)
+        /// <list type="table">
+        /// <item>1:对象</item>
+        /// <item>2:列表</item>
+        /// </list>
+        /// </summary>
+        public int SearchType { get; set; }
+
+        #region 对象 只需要Id
+
+        /// <summary>
+        /// 供应商Id
+        /// </summary>
+        public int VendorId { get; set; }
+
+        #endregion
+
+
+        /// <summary>
+        /// 供应商名称
+        /// </summary>
+        public string VendorName { get; set; }
+
+        /// <summary>
+        /// 供应商地址
+        /// </summary>
+        public string VendorAddress { get; set; }
+
+        /// <summary>
+        /// 供应商联系人
+        /// </summary>
+        public string VendorLinker { get; set; }
+
+        /// <summary>
+        /// 供应商联系方式
+        /// </summary>
+        public string VendorMobile { get; set; }
+    }
+
+    #endregion
+    #region 供应商编辑参数实体
+
+    public class Edit_ResItemVendorDto
+    {
+        public int VendorId { get; set; }
+        public string VendorFullName { get; set; }
+        public string VendorShortName { get; set; }
+        public string VendorAddress { get; set; }
+        public string VendorLinker { get; set; }
+        public string VendorMobile { get; set; }
+        public string VendorJob { get; set; }
+        public string Remark { get; set; }
+
+        public int SysUserId { get; set; }
+
+        /// <summary>
+        /// 0:添加,1:修改,-1:删除
+        /// </summary>
+        public int EditType { get; set; }
+    }
+
+    #endregion
+    #region 物料信息查询参数实体
+    public class Search_ItemInfoDto : DtoBase
+    {
+        /// <summary>
+        /// 查询类型(int)
+        /// <list type="table">
+        /// <item>1:对象</item>
+        /// <item>2:列表</item>
+        /// </list>
+        /// </summary>
+        public int SearchType { get; set; }
+
+        #region 对象 只需要Id
+        /// <summary>
+        /// 物料Id
+        /// </summary>
+        public int ItemId { get; set; }
+        #endregion
+
+        /// <summary>
+        /// 供应商Id
+        /// </summary>
+        public int VendorId { get; set; }
+
+        /// <summary>
+        /// 物料名称
+        /// </summary>
+        public string ItemName { get; set; }
+
+        /// <summary>
+        /// 类型Id
+        /// </summary>
+        public int SetDataId { get; set; }
+
+        /// <summary>
+        /// 价格区间(最低)
+        /// </summary>
+        public decimal MinRate { get; set; }
+
+        /// <summary>
+        /// 价格区间(最高)
+        /// </summary>
+        public decimal MaxRate { get; set; }
+    }
+    #endregion
+    #region 物料信息编辑参数实体
+    public class Edit_ResItemInfoDto
+    {
+        public int ItemId { get; set; }
+        public int VendorId { get; set; }
+        public string ItemName { get; set; }
+        public int SetDataId { get; set; }
+        public decimal CurrRate { get; set; }
+        public string Remark { get; set; }
+
+        public int SysUserId { get; set; }
+
+        /// <summary>
+        /// 0:添加,1:修改,-1:删除
+        /// </summary>
+        public int EditType { get; set; }
+    }
+    #endregion
+}

+ 113 - 0
OASystem/OASystem.Domain/Entities/Resource/Res_ItemVendor.cs

@@ -0,0 +1,113 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Resource
+{
+    /// <summary>
+    /// 物料供应商
+    /// </summary>
+    [SugarTable("Res_ItemVendor")]
+    public class Res_ItemVendor : EntityBase
+    {
+        /// <summary>
+        /// 供应商名称(公司全称)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string FullName { get; set; }
+
+        /// <summary>
+        /// 供应商简称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string ShortName { get; set; }
+
+        /// <summary>
+        /// 供应商联系地址
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 供应商联系人
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string Linker { get; set; }
+
+        /// <summary>
+        /// 供应商联系人职位
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string Job { get; set; }
+
+        /// <summary>
+        /// 供应商联系方式
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string Mobile { get; set; }
+
+    }
+
+    /// <summary>
+    /// 物料供应详细信息表
+    /// </summary>
+    [SugarTable("Res_ItemDetail")]
+    public class Res_ItemDetailInfo : EntityBase
+    {
+        /// <summary>
+        /// 物料供应商
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int VendorId { get; set; }
+
+        /// <summary>
+        /// 物料名称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string ItemName { get; set; }
+
+        /// <summary>
+        /// 物料类型Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int SetDataId { get; set; }
+
+        /// <summary>
+        /// 最低单价
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(9,2)")]
+        public decimal MinRate { get; set; }
+
+        /// <summary>
+        /// 最低价格维护时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "datetime")]
+        public DateTime MinDt { get; set; }
+
+        /// <summary>
+        /// 最高单价
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(9,2)")]
+        public decimal MaxRate { get; set; }
+
+        /// <summary>
+        /// 最高价格维护时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "datetime")]
+        public DateTime MaxDt { get; set; }
+
+        /// <summary>
+        /// 当前单价
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(9,2)")]
+        public decimal CurrRate { get; set; }
+
+        /// <summary>
+        /// 当前价格维护时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "datetime")]
+        public DateTime CurrDt { get; set; }
+    }
+}

+ 89 - 0
OASystem/OASystem.Domain/ViewModels/Resource/Res_ItemInfoView.cs

@@ -0,0 +1,89 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Resource
+{
+    #region 物料
+
+    public class Res_ItemInfoView
+    {
+        /// <summary>
+        /// 物料Id
+        /// </summary>
+        public int ItemId { get; set; }
+
+        /// <summary>
+        /// 供应商Id
+        /// </summary>
+        public int VendorId { get; set; }
+
+        /// <summary>
+        /// 供应商全称
+        /// </summary>
+        public string VendorFullName { get; set; }
+
+        /// <summary>
+        /// 供应商简称
+        /// </summary>
+        public string VendorShortName { get; set; }
+
+        /// <summary>
+        /// SetDataId
+        /// </summary>
+        public int SetDataId { get; set; }
+
+        /// <summary>
+        /// 物料类型,SetDataName
+        /// </summary>
+        public string ItemTypeName { get; set; }
+
+        /// <summary>
+        /// 价格区间(最低)
+        /// </summary>
+        public decimal MinRate { get; set; }
+
+        /// <summary>
+        /// 价格区间(最高)
+        /// </summary>
+        public decimal MaxRate { get; set; }
+
+        public decimal CurrRate { get; set; }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+
+    }
+
+    public class Res_ItemInfoListView : ListViewBase<Res_ItemInfoView>
+    {
+    }
+
+    #endregion
+
+
+    #region 供应商
+
+    public class Res_ItemVendorView
+    {
+        public int Id { get; set; }
+        public string FullName { get; set; }
+        public string ShortName { get; set; }
+        public string Address { get; set; }
+        public string Linker { get; set; }
+        public string Job { get; set; }
+        public string Mobile { get; set; }
+        public string Remark { get; set; }
+    }
+
+    public class Res_ItemVendorListView : ListViewBase<Res_ItemVendorView>
+    {
+    }
+
+    #endregion
+
+}

+ 23 - 0
OASystem/OASystem.Domain/ViewModels/ViewBase.cs

@@ -12,4 +12,27 @@
         /// </summary>
         public string ReturnDt { get; set; } = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
     }
+
+    public class ListViewBase<T> : ViewBase
+    {
+        /// <summary>
+        /// 当前页码
+        /// </summary>
+        public int CurrPageIndex { get; set; }
+
+        /// <summary>
+        /// 每页条数
+        /// </summary>
+        public int CurrPageSize { get; set; }
+
+        /// <summary>
+        /// 数据总条数
+        /// </summary>
+        public int DataCount { get; set; }
+
+        /// <summary>
+        /// 数据列表
+        /// </summary>
+        public List<T> DataList { get; set; }
+    }
 }

+ 15 - 2
OASystem/OASystem.Infrastructure/Repositories/BaseRepository.cs

@@ -150,6 +150,19 @@ namespace OASystem.Infrastructure.Repositories
             return result > 0;
         }
 
+        /// <summary>
+        /// 根据Dictionary,TableName添加数据
+        /// </summary>
+        /// <param name="dic">key[列名],value[值]</param>
+        /// <param name="tableName">表名</param>
+        /// <returns></returns>
+        public virtual async Task<bool> InsertDataByDictionary(Dictionary<string, object> dic, string tableName)
+        {
+            var result = await _sqlSugar.Insertable(dic).AS(tableName).ExecuteReturnIdentityAsync();
+
+            return result > 0;
+        }
+
         #endregion
 
         public virtual Task<bool> AnyAsync(Expression<Func<TEntity, bool>> exp)
@@ -195,7 +208,7 @@ namespace OASystem.Infrastructure.Repositories
             }).ExecuteCommandAsync();
             return result > 0;
         }
-       
+
         public virtual async Task<bool> SoftDeleteAsync(Expression<Func<TEntity, bool>> wherexp)
         {
             var result = await _sqlSugar.Updateable<TEntity>().Where(wherexp).SetColumns(a => new TEntity()
@@ -263,7 +276,7 @@ namespace OASystem.Infrastructure.Repositories
             }).ExecuteCommandAsync();
             return result > 0;
         }
-       
+
         public virtual async Task<bool> SoftDeleteAsync<T>(Expression<Func<TEntity, bool>> wherexp) where T : EntityBase, new()
         {
             var result = await _sqlSugar.Updateable<TEntity>().Where(wherexp).SetColumns(a => new TEntity()

+ 328 - 0
OASystem/OASystem.Infrastructure/Repositories/Resource/ResItemInfoRepository.cs

@@ -0,0 +1,328 @@
+using OASystem.Domain.Dtos.Resource;
+using OASystem.Domain.Entities.Resource;
+using OASystem.Domain.ViewModels.Resource;
+using Serilog;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Infrastructure.Repositories.Resource
+{
+    public class ResItemInfoRepository : BaseRepository<Res_ItemDetailInfo, Res_ItemInfoView>
+    {
+        public ResItemInfoRepository(SqlSugarClient sqlSugar) : base(sqlSugar)
+        {
+        }
+
+        #region 供应商
+
+        /// <summary>
+        /// 供应商列表查询
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        public Res_ItemVendorListView GetVendorList(Search_ResItemVendorDto _dto)
+        {
+            string sqlWhere = string.Format(" Where IsDel=0 ");
+
+            #region SqlWhere
+
+            if (!string.IsNullOrEmpty(_dto.VendorAddress))//供应商联系地址
+            {
+                sqlWhere += string.Format(" And [Address] Like '%{0}%' ", _dto.VendorAddress);
+            }
+            if (!string.IsNullOrEmpty(_dto.VendorLinker))//供应商联系人
+            {
+                sqlWhere += string.Format(" And Linker Like '%{0}%' ", _dto.VendorLinker);
+            }
+            if (!string.IsNullOrEmpty(_dto.VendorMobile))//供应商联系电话
+            {
+                sqlWhere += string.Format(" And Mobile Like '%{0}%' ", _dto.VendorMobile);
+            }
+            if (!string.IsNullOrEmpty(_dto.VendorName))//供应商公司名称/简称
+            {
+                sqlWhere += string.Format(" And ( FullName Like '%{0}%' Or ShortName Like '%{0}%' ) ", _dto.VendorName);
+            }
+
+            //if (!string.IsNullOrEmpty(sqlWhere.Trim()))
+            //{
+            //    Regex r = new Regex("And");
+            //    sqlWhere = r.Replace(sqlWhere, "Where", 1);
+            //}
+            #endregion
+
+            int currPIndex = (((_dto.PageIndex > 0) ? (_dto.PageIndex - 1) : 0) * _dto.PageSize) + 1;
+            int currPSize = (((_dto.PageIndex > 0) ? (_dto.PageIndex - 1) : 0) + 1) * _dto.PageSize;
+
+            string sql = string.Format(@" Select ROW_NUMBER() Over(order By Id desc) as RowNumber,* From ( 
+ Select Id,FullName,ShortName,Address,Linker,Job,Mobile,Remark From Res_ItemVendor With(Nolock) {2}
+) ) as tb Where tb.RowNumber Between {0} And {1} ", currPIndex, currPSize, sqlWhere);
+            Res_ItemVendorListView rst = new Res_ItemVendorListView();
+            rst.CurrPageIndex = currPIndex;
+            rst.CurrPageSize = currPSize;
+            rst.DataList = _sqlSugar.SqlQueryable<Res_ItemVendorView>(sql).ToList();
+            if (rst.DataList.Count > 0)
+            {
+                string sqlCount = string.Format(@" Select Id From Res_ItemVendor With(Nolock) {0} ", sqlWhere);
+                int dataCount = _sqlSugar.SqlQueryable<Res_ItemVendorView>(sqlCount).Count();
+                rst.DataCount = dataCount;
+            }
+
+            return rst;
+        }
+
+        /// <summary>
+        /// 供应商信息查询
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        public Res_ItemVendorView getVendorInfo(Search_ResItemVendorDto _dto)
+        {
+            string sqlWhere = string.Format(" Where IsDel=0 ");
+
+            if (_dto.VendorId > 0)
+            {
+                Res_ItemVendorView _view = _sqlSugar.Queryable<Res_ItemVendorView>().Where(s => s.Id == _dto.VendorId).First();
+                return _view;
+            }
+            else
+            {
+                return null;
+            }
+
+            return null;
+        }
+
+        /// <summary>
+        /// 创建供应商信息
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        public async Task<bool> addVendorInfo(Edit_ResItemVendorDto _dto)
+        {
+            Dictionary<string, object> dic = new Dictionary<string, object>();
+
+            dic.Add("FullName", _dto.VendorFullName);
+            dic.Add("ShortName", string.IsNullOrEmpty(_dto.VendorShortName) ? "" : _dto.VendorShortName);
+            dic.Add("Address", string.IsNullOrEmpty(_dto.VendorAddress) ? "" : _dto.VendorAddress);
+            dic.Add("Linker", _dto.VendorLinker);
+            dic.Add("Job", string.IsNullOrEmpty(_dto.VendorJob) ? "" : _dto.VendorJob);
+            dic.Add("Mobile", _dto.VendorMobile);
+            dic.Add("CreateUserId", _dto.SysUserId);
+            dic.Add("CreateTime", DateTime.Now);
+            dic.Add("DeleteUserId", 0);
+            dic.Add("DeleteTime", "Null");
+            dic.Add("Remark", _dto.Remark);
+            dic.Add("IsDel", 0);
+
+            return await InsertDataByDictionary(dic, "Res_ItemVendor");
+
+        }
+
+
+        /// <summary>
+        /// 修改供应商信息
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        public async Task<bool> updVendorInfo(Res_ItemVendor _entity)
+        {
+            var result = await _sqlSugar.Updateable<Res_ItemVendor>()
+                .Where(s => s.Id == _entity.Id)
+                .UpdateColumns(s => new { s.FullName, s.ShortName, s.Address, s.Linker, s.Mobile, s.Job, s.Remark })
+                .ExecuteCommandAsync();
+
+            return result > 0;
+        }
+
+        /// <summary>
+        /// 删除供应商信息
+        /// </summary>
+        /// <param name="_entity"></param>
+        /// <returns></returns>
+        public async Task<bool> delVendorInfo(Res_ItemVendor _entity)
+        {
+            _entity.IsDel = 1;
+            _entity.DeleteUserId = _entity.CreateUserId;
+            _entity.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            var result = await _sqlSugar.Updateable<Res_ItemVendor>()
+               .Where(s => s.Id == _entity.Id)
+               .UpdateColumns(s => new { s.IsDel, s.DeleteTime, s.DeleteUserId })
+               .ExecuteCommandAsync();
+
+            return result > 0;
+        }
+
+        #endregion
+
+        #region 物料
+
+        /// <summary>
+        /// 物料信息列表查询
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        public Res_ItemInfoListView GetItemList(Search_ItemInfoDto _dto)
+        {
+            string sqlWhere = string.Format(" Where d.IsDel=0 ");
+
+            #region SqlWhere
+
+            if (!string.IsNullOrEmpty(_dto.ItemName))//物料名称
+            {
+                sqlWhere += string.Format(" And d.ItemName Like '%{0}%' ", _dto.ItemName);
+            }
+            if (_dto.VendorId > 0)//供应商Id
+            {
+                sqlWhere += string.Format(" And d.VendorId = {0} ", _dto.VendorId);
+            }
+            if (_dto.SetDataId > 0)//类型Id
+            {
+                sqlWhere += string.Format(" And d.SetDataId = {0} ", _dto.SetDataId);
+            }
+            if (_dto.MinRate > 0)//价格区间(最低)
+            {
+                sqlWhere += string.Format(" And d.MinRate >= {0} ", _dto.MinRate);
+            }
+            if (_dto.MaxRate > 0)//价格区间(最高)
+            {
+                sqlWhere += string.Format(" And d.MaxRate <= {0} ", _dto.MaxRate);
+            }
+
+            //if (!string.IsNullOrEmpty(sqlWhere.Trim()))
+            //{
+            //    Regex r = new Regex("And");
+            //    sqlWhere = r.Replace(sqlWhere, "Where", 1);
+            //}
+            #endregion
+
+            int currPIndex = (((_dto.PageIndex > 0) ? (_dto.PageIndex - 1) : 0) * _dto.PageSize) + 1;
+            int currPSize = (((_dto.PageIndex > 0) ? (_dto.PageIndex - 1) : 0) + 1) * _dto.PageSize;
+
+            string sql = string.Format(@" Select ROW_NUMBER() Over(order By Id desc) as RowNumber,* From ( 
+ Select d.Id as ItemId,d.VendorId,v.FullName as VendorFullName,v.ShortName as VendorShortName,sd.Id as SetDataId,sd.Name as ItemTypeName,d.MinRate,d.MaxRate,d.CurrRate,d.Remark
+ From Res_ItemDetail as d With(Nolock) 
+ Inner Join Res_ItemVendor as v With(Nolock) On d.VendorId=v.Id
+ Inner Join Sys_SetData as sd With(Nolock) On d.SetDataId=sd.Id
+{2}
+) ) as tb Where tb.RowNumber Between {0} And {1} ", currPIndex, currPSize, sqlWhere);
+            Res_ItemInfoListView rst = new Res_ItemInfoListView();
+            rst.CurrPageIndex = currPIndex;
+            rst.CurrPageSize = currPSize;
+            rst.DataList = _sqlSugar.SqlQueryable<Res_ItemInfoView>(sql).ToList();
+            if (rst.DataList.Count > 0)
+            {
+                string sqlCount = string.Format(@" Select Id From Res_ItemDetail as d 5 With(Nolock) {0} ", sqlWhere);
+                int dataCount = _sqlSugar.SqlQueryable<Res_ItemInfoView>(sqlCount).Count();
+                rst.DataCount = dataCount;
+            }
+
+            return rst;
+        }
+
+        /// <summary>
+        /// 物料详细信息查询
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        public Res_ItemInfoView getItemInfo(Search_ItemInfoDto _dto)
+        {
+            string sqlWhere = string.Format(" Where IsDel=0 ");
+
+            if (_dto.ItemId > 0)
+            {
+                string sql = string.Format(@" Select d.Id as ItemId,d.VendorId,v.FullName as VendorFullName,v.ShortName as VendorShortName,sd.Id as SetDataId,sd.Name as ItemTypeName,
+ d.MinRate,d.MaxRate,d.CurrRate,d.Remark
+ From Res_ItemDetail as d With(Nolock) Where d.Id={0} ", _dto.ItemId);
+
+                Res_ItemInfoView _view = _sqlSugar.SqlQueryable<Res_ItemInfoView>(sql).First();
+                return _view;
+            }
+            else
+            {
+                return null;
+            }
+
+            return null;
+        }
+
+        public async Task<bool> updItemInfo(Res_ItemDetailInfo _entity)
+        {
+            var source = await _sqlSugar.Queryable<Res_ItemDetailInfo>().Where(s => s.Id == _entity.Id).FirstAsync();
+            if (source != null)
+            {
+                DateTime dtNow = DateTime.Now;
+                if (_entity.CurrRate < source.MinRate)
+                {
+                    _entity.MinRate = _entity.CurrRate;
+                    _entity.MinDt = dtNow;
+                }
+                else
+                {
+                    _entity.MinRate = source.MinRate;
+                    _entity.MinDt = source.MinDt;
+                }
+
+                if (_entity.CurrRate > source.MaxRate)
+                {
+                    _entity.MaxRate = _entity.CurrRate;
+                    _entity.MaxDt = dtNow;
+                }
+                else
+                {
+                    _entity.MaxRate = source.MaxRate;
+                    _entity.MaxDt = source.MaxDt;
+                }
+                _entity.CurrDt = dtNow;
+
+
+                Log.Warning("物料信息修改,原数据:【" + JsonSerializer.Serialize(source) + "】,修改参数:【" + JsonSerializer.Serialize(_entity) + "】");
+
+
+                var result = await _sqlSugar.Updateable<Res_ItemDetailInfo>()
+                   .Where(s => s.Id == _entity.Id)
+                   .UpdateColumns(s => new { s.CurrDt, s.CurrRate, s.ItemName, s.MaxDt, s.MaxRate, s.MinDt, s.MinRate, s.Remark, s.SetDataId, s.VendorId })
+                   .ExecuteCommandAsync();
+                return result > 0;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 删除供应商信息
+        /// </summary>
+        /// <param name="_entity"></param>
+        /// <returns></returns>
+        public async Task<bool> delItemInfo(Res_ItemDetailInfo _entity)
+        {
+            _entity.IsDel = 1;
+            _entity.DeleteUserId = _entity.CreateUserId;
+            _entity.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            var result = await _sqlSugar.Updateable<Res_ItemDetailInfo>()
+               .Where(s => s.Id == _entity.Id)
+               .UpdateColumns(s => new { s.IsDel, s.DeleteTime, s.DeleteUserId })
+               .ExecuteCommandAsync();
+
+            return result > 0;
+        }
+
+        #endregion
+
+
+        /// <summary>
+        /// 获取 物料类型列表
+        /// </summary>
+        /// <returns></returns>
+        public List<SetDataView> GetItemTypeListBySetData()
+        {
+            string sql = string.Format(@" Select d.Id,d.Name,d.STid From Sys_SetData as d With(Nolock) 
+Inner Join Sys_SetDataType as t With(Nolock) On d.STid=t.Id 
+Where t.IsDel=0 And d.IsDel=0 And t.Id=58 ");
+            List<SetDataView> list = _sqlSugar.SqlQueryable<SetDataView>(sql).ToList();
+
+            return list;
+        }
+    }
+}