Browse Source

合并服务器

yuanrf 2 years ago
parent
commit
1a806ed66c
49 changed files with 3106 additions and 212 deletions
  1. 4 0
      OASystem/EntitySync/Program.cs
  2. 39 0
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  3. 336 54
      OASystem/OASystem.Api/Controllers/ResourceController.cs
  4. 1 1
      OASystem/OASystem.Api/Controllers/SystemController.cs
  5. 439 0
      OASystem/OASystem.Api/Controllers/TencentOCRController.cs
  6. 207 0
      OASystem/OASystem.Api/OAMethodLib/TencentOCRTools.cs
  7. 2 0
      OASystem/OASystem.Api/OASystem.API.csproj
  8. 32 1
      OASystem/OASystem.Api/Program.cs
  9. 18 5
      OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs
  10. 17 0
      OASystem/OASystem.Domain/Dtos/CRM/DeleClientAddDto.cs
  11. 2 2
      OASystem/OASystem.Domain/Dtos/DtoBase.cs
  12. 5 0
      OASystem/OASystem.Domain/Dtos/Groups/Grp_ScheduleDto.cs
  13. 19 0
      OASystem/OASystem.Domain/Dtos/Resource/CarDataDto.cs
  14. 20 0
      OASystem/OASystem.Domain/Dtos/Resource/LocalGuideDataDto.cs
  15. 140 0
      OASystem/OASystem.Domain/Dtos/Resource/Res_ItemVendorDto.cs
  16. 15 0
      OASystem/OASystem.Domain/Dtos/Tencent/BizLicenseOCRDto.cs
  17. 16 0
      OASystem/OASystem.Domain/Dtos/Tencent/BusinessCardOCRDto.cs
  18. 16 0
      OASystem/OASystem.Domain/Dtos/Tencent/GeneralBasicOCRDto.cs
  19. 29 0
      OASystem/OASystem.Domain/Dtos/Tencent/IDCardOCRDto.cs
  20. 16 0
      OASystem/OASystem.Domain/Dtos/Tencent/MLIDPassportOCRDto.cs
  21. 16 0
      OASystem/OASystem.Domain/Dtos/Tencent/MarriageLicenseOCRDto.cs
  22. 20 0
      OASystem/OASystem.Domain/Dtos/Tencent/OCRDtoBase.cs
  23. 15 0
      OASystem/OASystem.Domain/Dtos/Tencent/OrgCodeCertOCRDto.cs
  24. 16 0
      OASystem/OASystem.Domain/Dtos/Tencent/PassportOCRDto.cs
  25. 15 0
      OASystem/OASystem.Domain/Dtos/Tencent/PropOwnerCertOCRDto.cs
  26. 15 0
      OASystem/OASystem.Domain/Dtos/Tencent/ResidenceBookletOCRDto.cs
  27. 16 0
      OASystem/OASystem.Domain/Dtos/Tencent/UniformCreditCodeOCRDto.cs
  28. 22 0
      OASystem/OASystem.Domain/Dtos/Tencent/VehicleLicenseOCRDto.cs
  29. 95 0
      OASystem/OASystem.Domain/Entities/Resource/Res_CountryFeeCost.cs
  30. 113 0
      OASystem/OASystem.Domain/Entities/Resource/Res_ItemVendor.cs
  31. 66 0
      OASystem/OASystem.Domain/Enums/TencentOCREnum.cs
  32. 16 0
      OASystem/OASystem.Domain/ViewModels/CRM/CustomerCertView.cs
  33. 2 0
      OASystem/OASystem.Domain/ViewModels/CRM/VisaDeleClientView.cs
  34. 27 1
      OASystem/OASystem.Domain/ViewModels/Group/DelegationInfoView.cs
  35. 6 0
      OASystem/OASystem.Domain/ViewModels/Resource/CarDataView.cs
  36. 5 0
      OASystem/OASystem.Domain/ViewModels/Resource/LocalGuideDataView.cs
  37. 89 0
      OASystem/OASystem.Domain/ViewModels/Resource/Res_ItemInfoView.cs
  38. 60 0
      OASystem/OASystem.Domain/ViewModels/TencentOCR/IDCardOCRView.cs
  39. 131 0
      OASystem/OASystem.Domain/ViewModels/TencentOCR/ResidenceBookletOCRView.cs
  40. 23 0
      OASystem/OASystem.Domain/ViewModels/ViewBase.cs
  41. 15 2
      OASystem/OASystem.Infrastructure/Repositories/BaseRepository.cs
  42. 56 2
      OASystem/OASystem.Infrastructure/Repositories/CRM/VisaDeleClientRepository.cs
  43. 81 4
      OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationInfoRepository.cs
  44. 147 2
      OASystem/OASystem.Infrastructure/Repositories/Resource/CarDataRepository.cs
  45. 135 0
      OASystem/OASystem.Infrastructure/Repositories/Resource/LocalGuideDataRepository.cs
  46. 328 0
      OASystem/OASystem.Infrastructure/Repositories/Resource/ResItemInfoRepository.cs
  47. 19 0
      OASystem/OASystem.Tencent/OASystem.Tencent.csproj
  48. 92 0
      OASystem/OASystem.Tencent/TencentOCRTools.cs
  49. 92 138
      OASystem/_Doc/OA2023数据字典.docx

+ 4 - 0
OASystem/EntitySync/Program.cs

@@ -85,5 +85,9 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
 
     typeof(Crm_ClientDataAndUser),
     typeof(Crm_ClientDataAndBusiness),
+    
+    //typeof(Res_ItemDetailInfo),
+    //typeof(Res_ItemVendor)
+    typeof(Res_CountryFeeCost)
 });
 Console.WriteLine("数据库结构同步完成!");

+ 39 - 0
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -298,10 +298,49 @@ namespace OASystem.API.Controllers
             return Ok(JsonView(groupData.Data, groupData.Data.Count));
         }
 
+        /// <summary>
+        /// 获取团组名称data  And 签证国别Data
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetGroupNameAndVisaNationality(GroupNameDto dto)
+        {
+            var groupData = await _groupRepository.GetGroupNameAndVisaNationality(dto);
+            if (groupData.Code != 0)
+            {
+                return Ok(JsonView(false, groupData.Msg));
+            }
+
+
+            return Ok(JsonView(groupData.Data));
+        }
+
         #endregion
 
         #region 团组&签证
 
+        /// <summary>
+        ///  根据团组Id获取签证客户信息List
+        /// </summary>
+        /// <param name="dto">请求dto</param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetCrmByGroupId(ClientByGroupIdDto dto)
+        {
+            var groupData = await _groupRepository.GetCrmByGroupId(dto);
+            if (groupData.Code != 0)
+            {
+                return Ok(JsonView(false, groupData.Msg));
+            }
+
+            return Ok(JsonView(groupData.Data));
+        }
+
+       
+
         #endregion
     }
 }

+ 336 - 54
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -1,8 +1,4 @@
 
-
-using NetTaste;
-using System.Drawing.Printing;
-
 namespace OASystem.API.Controllers
 {
     /// <summary>
@@ -18,8 +14,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 +26,7 @@ namespace OASystem.API.Controllers
             _localGuideDataRep = localGuideDataRep;
             _ThreeCodeRep = threeCodeRep;
             _hotelDataRep = hotelDataRep;
+            _resItemInfoRep = resItemInfoRep;
         }
         #region 车公司资料板块
 
@@ -36,37 +36,21 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> QuertCarData(DtoBase dto)
+        public async Task<IActionResult> QueryCarData(QueryCarDataDto dto)
         {
             try
             {
-                if (dto.PortType==1)
+                Result LocalGuide = await _carDataRep.QueryCarData(dto);
+                if (LocalGuide.Code == 0)
                 {
-                    var carDada = _carDataRep.QueryDto<Res_CarData, CarDataView>().ToList();
-                    if (carDada.Count == 0)
-                    {
-                        return Ok(JsonView(false, "暂无数据!"));
-                    }
-                    carDada = carDada.OrderByDescending(s => s.CreateTime).ToList();
-                    return Ok(JsonView(true, "查询成功", carDada));
-                }
-                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();
-                    return Ok(JsonView(true, "查询成功", carDada));
+                    return Ok(JsonView(true, "查询成功", LocalGuide.Data));
                 }
                 else
                 {
-                    return Ok(JsonView(false, "请传入PortType参数!1:Web,2:Android,3:IOS"));
+                    return Ok(JsonView(false, LocalGuide.Msg));
                 }
-               
             }
-            catch (Exception ex)
+            catch (Exception)
             {
                 return Ok(JsonView(false, "程序错误!"));
                 throw;
@@ -75,6 +59,40 @@ namespace OASystem.API.Controllers
             
         }
 
+        /// <summary>
+        /// 车公司资料下拉框数据
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> QueryCarSelect()
+        {
+            try
+            {
+                var CarData = _carDataRep.QueryDto<Res_CarData, CarDataSelectView>().ToList();
+                if (CarData.Count == 0)
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+                }
+                CarData.Add(new CarDataSelectView { Id = 0, UnitArea = "全部" });
+                CarData = CarData.Where((x, i) => CarData.FindIndex(z => z.UnitArea == x.UnitArea) == i).ToList();
+                CarData = CarData.OrderBy(x => x.Id).ToList();
+                List<CarDataSelectView> data= new List<CarDataSelectView>();
+                foreach (CarDataSelectView car in CarData)
+                {
+                    if (!string.IsNullOrWhiteSpace(car.UnitArea))
+                    {
+                        data.Add(car);
+                    }
+                }
+                return Ok(JsonView(true, "查询成功", data));
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
         /// <summary>
         /// 车公司信息添加
         /// </summary>
@@ -102,14 +120,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, "添加失败!"));
                 }
@@ -121,7 +139,7 @@ namespace OASystem.API.Controllers
                 throw;
             }
         }
-
+       
         /// <summary>
         /// 车公司信息修改
         /// </summary>
@@ -211,33 +229,18 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> QueryLocalGuide(DtoBase dto)
+        public async Task<IActionResult> QueryLocalGuide(QueryLocalGuide dto)
         {
             try
             {
-                if (dto.PortType == 1)
+                Result LocalGuide = await _localGuideDataRep.QueryLocalGuide(dto);
+                if (LocalGuide.Code == 0)
                 {
-                    var LocalGuideData = _localGuideDataRep.QueryDto<Res_LocalGuideData, LocalGuideDataView>().ToList();
-                    if (LocalGuideData.Count == 0)
-                    {
-                        return Ok(JsonView(false, "暂无数据!"));
-                    }
-                    LocalGuideData = LocalGuideData.OrderByDescending(s => s.CreateTime).ToList();
-                    return Ok(JsonView(true, "查询成功", LocalGuideData));
-                }
-                else if (dto.PortType == 2)
-                {
-                    var LocalGuideData = _localGuideDataRep.QueryDto<Res_LocalGuideData, LocalGuideDataView>().ToList();
-                    if (LocalGuideData.Count == 0)
-                    {
-                        return Ok(JsonView(false, "暂无数据!"));
-                    }
-                    LocalGuideData = LocalGuideData.OrderByDescending(s => s.CreateTime).ToList();
-                    return Ok(JsonView(true, "查询成功", LocalGuideData));
+                    return Ok(JsonView(true, "查询成功", LocalGuide.Data));
                 }
                 else
                 {
-                    return Ok(JsonView(false, "请传入PortType参数!1:Web,2:Android,3:IOS"));
+                    return Ok(JsonView(false, LocalGuide.Msg));
                 }
 
             }
@@ -250,6 +253,41 @@ namespace OASystem.API.Controllers
 
         }
 
+        /// <summary>
+        /// 导游地接资料下拉框数据
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> QueryLocalGuideSelect()
+        {
+            try
+            {
+                var LocalGuide = _carDataRep.QueryDto<Res_LocalGuideData, QueryLocalGuideSelectView>().ToList();
+                if (LocalGuide.Count == 0)
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+                }
+                LocalGuide.Add(new QueryLocalGuideSelectView { Id = 0, UnitArea = "全部" });
+                LocalGuide = LocalGuide.Where((x, i) => LocalGuide.FindIndex(z => z.UnitArea == x.UnitArea && z.UnitArea != "") == i).ToList();
+                LocalGuide = LocalGuide.OrderBy(x => x.Id).ToList();
+                List<QueryLocalGuideSelectView> data = new List<QueryLocalGuideSelectView>();
+                foreach (QueryLocalGuideSelectView Local in LocalGuide)
+                {
+                    if (!string.IsNullOrWhiteSpace(Local.UnitArea))
+                    {
+                        data.Add(Local);
+                    }
+                }
+                return Ok(JsonView(true, "查询成功", LocalGuide));
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
+
         /// <summary>
         /// 导游地接信息操作(Status:1.新增,2.修改)
         /// </summary>
@@ -301,12 +339,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 +379,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 +586,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
     }
 }

+ 1 - 1
OASystem/OASystem.Api/Controllers/SystemController.cs

@@ -1428,7 +1428,7 @@ namespace OASystem.API.Controllers
         }
 
         /// <summary>
-        /// 操作权限功能表
+        /// 操作权限功能表操作(Status 1:添加,2:编辑)
         /// </summary>
         /// <returns></returns>
         [HttpPost]

+ 439 - 0
OASystem/OASystem.Api/Controllers/TencentOCRController.cs

@@ -0,0 +1,439 @@
+using OASystem.API.OAMethodLib;
+using OASystem.Domain.Dtos.CRM;
+using OASystem.Domain.Dtos.Tencent;
+using OASystem.Domain.ViewModels.TencentOCR;
+using OASystem.Infrastructure.Repositories.CRM;
+using StackExchange.Redis;
+using System.Net.NetworkInformation;
+using TencentCloud.Ocr.V20181119.Models;
+using Ubiety.Dns.Core;
+
+namespace OASystem.API.Controllers
+{
+    /// <summary>
+    /// TencentOCR 识别 
+    /// </summary>
+    [Route("api/[controller]/[action]")]
+    //[ApiController]
+    public class TencentOCRController : ControllerBase
+    {
+        private readonly VisaDeleClientRepository _visaDeleClientRepository;
+
+        public TencentOCRController(VisaDeleClientRepository visaDeleClientRepository)
+        {
+            this._visaDeleClientRepository = visaDeleClientRepository;
+        }
+
+        /// <summary>
+        /// 通用印刷体
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetGeneralBasic(GeneralBasicOCRDto dto)
+        {
+            string[] picBase64Array = dto.picBase64.Split(';');
+            string picFormat = picBase64Array[0].Split('/')[1];
+            if (!TencentOCRTools.ImageType(picFormat))
+            {
+                return Ok(JsonView("图片格式不正确!只支持 PNG、JPG、JPEG、BMP 格式!"));
+            }
+
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var gbData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.GeneralBasic, dto);
+
+            if (gbData.Code != 0)
+            {
+                return Ok(JsonView(gbData.Msg));
+            }
+
+            if (gbData.Data == null)
+            {
+                return Ok(JsonView(gbData.Msg));
+            }
+
+            return Ok(JsonView(gbData.Data));
+        }
+
+
+        /// <summary>
+        /// 身份证识别(国徽面/反面)
+        /// 获取身份证返回数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetIDCard(IDCardOCRDto dto)
+        {
+            string[] picBase64Array = dto.picBase64.Split(';');
+            string picFormat = picBase64Array[0].Split('/')[1];
+            if (!TencentOCRTools.ImageType(picFormat))
+            {
+                return Ok(JsonView("图片格式不正确!只支持 PNG、JPG、JPEG、BMP 格式!"));
+            }
+
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var idCardData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.IDCard, dto);
+
+            if (idCardData.Code != 0)
+            {
+                return Ok(JsonView(idCardData.Msg));
+            }
+
+            if (idCardData.Data == null)
+            {
+                return Ok(JsonView(idCardData.Msg));
+            }
+
+            bool cerdStatus = await _visaDeleClientRepository.SetCrmUpdPassIdCardOCR(
+                new SetCrmUpdPassIdCardOCRDto
+                {
+                    UserId = dto.UserId,
+                    ClientName = idCardData.Data.Name,
+                    Sex = idCardData.Data.Sex == "男" ? 0 : 1,
+                    CerdNo = idCardData.Data.IdNum,
+                    CerdAddress = idCardData.Data.Address,
+                });
+
+            IDCardOCRView iDCardOCRView = new IDCardOCRView()
+            {
+                Status = cerdStatus,
+                Name = idCardData.Data.Name,
+                Sex = idCardData.Data.Sex,
+                Nation = idCardData.Data.Nation,
+                Birth = idCardData.Data.Birth,
+                Address = idCardData.Data.Address,
+                IdNum = idCardData.Data.IdNum,
+                Authority = idCardData.Data.Authority,
+                ValidDate = idCardData.Data.ValidDate
+            };
+
+            return Ok(JsonView(iDCardOCRView));
+        }
+
+        /// <summary>
+        /// 户口簿识别
+        /// 获取户口簿返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetResidenceBookletOCR(ResidenceBookletOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var residenceBookData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.ResidenceBooklet, dto);
+
+            if (residenceBookData.Code != 0)
+            {
+                return Ok(JsonView(residenceBookData.Msg));
+            }
+
+            if (residenceBookData.Data == null)
+            {
+                return Ok(JsonView(residenceBookData.Msg));
+            }
+
+
+            return Ok(JsonView(residenceBookData.Data));
+        }
+
+        /// <summary>
+        /// 营业执照识别
+        /// 获取营业执照返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetBizLicenseOCR(BizLicenseOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var residenceBookData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.BizLicense, dto);
+
+            if (residenceBookData.Code != 0)
+            {
+                return Ok(JsonView(residenceBookData.Msg));
+            }
+
+            if (residenceBookData.Data == null)
+            {
+                return Ok(JsonView(residenceBookData.Msg));
+            }
+
+
+            return Ok(JsonView(residenceBookData.Data));
+        }
+
+        /// <summary>
+        /// 营业执照识别
+        /// 获取营业执照返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetOrgCodeCertOCR(OrgCodeCertOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var occData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.OrgCodeCert, dto);
+
+            if (occData.Code != 0)
+            {
+                return Ok(JsonView(occData.Msg));
+            }
+
+            if (occData.Data == null)
+            {
+                return Ok(JsonView(occData.Msg));
+            }
+
+            return Ok(JsonView(occData.Data));
+        }
+        
+        /// <summary>
+        /// 行驶证识别
+        /// 获取行驶证返回数据 
+        /// CardSide=0 主页正面(有红色印章的一面),CardSide=1 行驶证副页正面(有号码号牌的一面),CardSide=2 行驶证主页正面和副页正面。
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetVehicleLicense(VehicleLicenseOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var vehicleLicenseData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.VehicleLicense, dto);
+
+            if (vehicleLicenseData.Code != 0)
+            {
+                return Ok(JsonView(vehicleLicenseData.Msg));
+            }
+
+            if (vehicleLicenseData.Data == null)
+            {
+                return Ok(JsonView(vehicleLicenseData.Msg));
+            }
+
+            return Ok(JsonView(vehicleLicenseData.Data));
+        }
+
+        /// <summary>
+        /// 房产证识别
+        /// 获取房产证返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetPropOwnerCert(PropOwnerCertOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var pcData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.PropOwnerCert, dto);
+
+            if (pcData.Code != 0)
+            {
+                return Ok(JsonView(pcData.Msg));
+            }
+
+            if (pcData.Data == null)
+            {
+                return Ok(JsonView(pcData.Msg));
+            }
+
+            return Ok(JsonView(pcData.Data));
+        }
+
+        /// <summary>
+        /// 结婚证识别
+        /// 获取结婚证返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetMarriageLicense(MarriageLicenseOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var mlData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.GeneralBasic, dto);
+
+            if (mlData.Code != 0)
+            {
+                return Ok(JsonView(mlData.Msg));
+            }
+
+            if (mlData.Data == null)
+            {
+                return Ok(JsonView(mlData.Msg));
+            }
+
+            return Ok(JsonView(mlData.Data));
+        }
+
+        /// <summary>
+        /// 统一信用代码识别 
+        /// 获取统一信用代码返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetUniformCreditCode(UniformCreditCodeOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var gbData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.GeneralBasic, dto);
+
+            if (gbData.Code != 0)
+            {
+                return Ok(JsonView(gbData.Msg));
+            }
+
+            if (gbData.Data == null)
+            {
+                return Ok(JsonView(gbData.Msg));
+            }
+
+            return Ok(JsonView(gbData.Data));
+        }
+
+        /// <summary>
+        /// 护照识别(中国大陆地区护照) 
+        /// 获取护照识别(中国大陆地区护照)返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetPassport(PassportOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var pData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.Passport, dto);
+
+            if (pData.Code != 0)
+            {
+                return Ok(JsonView(pData.Msg));
+            }
+
+            if (pData.Data == null)
+            {
+                return Ok(JsonView(pData.Msg));
+            }
+
+            return Ok(JsonView(pData.Data));
+        }
+
+        /// <summary>
+        /// 护照识别(港澳台地区及境外护照)
+        /// 获取护照识别(港澳台地区及境外护照)返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetMLIDPassport(PassportOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var mlidpData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.MLIDPassport, dto);
+
+            if (mlidpData.Code != 0)
+            {
+                return Ok(JsonView(mlidpData.Msg));
+            }
+
+            if (mlidpData.Data == null)
+            {
+                return Ok(JsonView(mlidpData.Msg));
+            }
+
+            return Ok(JsonView(mlidpData.Data));
+        }
+
+        /// <summary>
+        /// 名片识别
+        /// 获取名片 返回数据 
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetBusinessCard(BusinessCardOCRDto dto)
+        {
+            double strSize = 1024 * 1024 * 7;
+            if (dto.picBase64.Length > strSize)
+            {
+                return Ok(JsonView("图片不能大于7M!"));
+            }
+
+            var mlidpData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.BusinessCard, dto);
+
+            if (mlidpData.Code != 0)
+            {
+                return Ok(JsonView(mlidpData.Msg));
+            }
+
+            if (mlidpData.Data == null)
+            {
+                return Ok(JsonView(mlidpData.Msg));
+            }
+
+            return Ok(JsonView(mlidpData.Data));
+        }
+    }
+}

+ 207 - 0
OASystem/OASystem.Api/OAMethodLib/TencentOCRTools.cs

@@ -0,0 +1,207 @@
+using OASystem.Domain.Dtos.Tencent;
+using OASystem.TencentOCR;
+using TencentCloud.Common;
+using TencentCloud.Ocr.V20181119.Models;
+using TencentCloud.Ocr.V20181119;
+
+namespace OASystem.API.OAMethodLib
+{
+    /// <summary>
+    /// 腾讯OCR Tools
+    /// </summary>
+    public static class TencentOCRTools
+    {
+        /// <summary>
+        /// 初始化 腾讯云账户密钥对 SecretId,SecretKey
+        /// </summary>
+        static Credential cred = new Credential
+        {
+            SecretId = "AKIDoQUHLBELagatzoScfdMpMddMnz8apqIc",
+            SecretKey = "hKiGbhkX5NWWXu3zDWwAATVK3e5sWuBB"
+        };
+
+        /// <summary>
+        /// ocr识别
+        /// </summary>
+        /// <param name="ocrEnum">转换类型</param>
+        /// <param name="data">请求数据源</param>
+        /// <returns></returns>
+        public static Result GetOCR(int ocrEnum, object data)
+        {
+            Result result = new Result { Code = -1, Msg = "未知错误", Data = null };
+            OcrClient client = new OcrClient(cred, "ap-guangzhou");
+
+            try
+            {
+                switch (ocrEnum)
+                {
+                    case 0: //身份证识别
+                        IDCardOCRDto iDCardDto = (IDCardOCRDto)data;
+                        IDCardOCRRequest req = new IDCardOCRRequest();
+
+                        if (iDCardDto.CardSide == 0) req.CardSide = "FRONT";
+                        else if (iDCardDto.CardSide == 1) req.CardSide = "BACK";
+
+                        req.ImageBase64 = iDCardDto.picBase64;
+                        IDCardOCRResponse resp = client.IDCardOCRSync(req);
+                        result.Data = resp;
+                        break;
+                    case 1: //户口本识别
+                        ResidenceBookletOCRDto rbOCR = (ResidenceBookletOCRDto)data;
+                        ResidenceBookletOCRRequest rbReq = new ResidenceBookletOCRRequest();
+                        rbReq.ImageBase64 = rbOCR.picBase64;
+                        ResidenceBookletOCRResponse rbRep = client.ResidenceBookletOCRSync(rbReq);
+                        result.Data = rbRep;
+                        break;
+                    case 2: //营业执照识别 OrgCodeCert
+
+                        BizLicenseOCRDto blOCR = (BizLicenseOCRDto)data;
+                        BizLicenseOCRRequest blReq = new BizLicenseOCRRequest();
+                        blReq.ImageBase64 = blOCR.picBase64;
+                        BizLicenseOCRResponse blRep = client.BizLicenseOCRSync(blReq);
+                        result.Data = blRep;
+                        break;
+                    case 3: //组织机构代码证识别 
+
+                        OrgCodeCertOCRDto occOCR = (OrgCodeCertOCRDto)data;
+                        OrgCodeCertOCRRequest ocReq = new OrgCodeCertOCRRequest();
+                        ocReq.ImageBase64 = occOCR.picBase64;
+                        OrgCodeCertOCRResponse occReq = client.OrgCodeCertOCRSync(ocReq);
+                        result.Data = occReq;
+                        break;
+                    case 4: //行驶证识别 
+
+                        VehicleLicenseOCRDto vlOCR = (VehicleLicenseOCRDto)data;
+                        VehicleLicenseOCRRequest vlReq = new VehicleLicenseOCRRequest();
+
+                        if (vlOCR.CardSide == 0) vlReq.CardSide = "FRONT";
+                        else if (vlOCR.CardSide == 1) vlReq.CardSide = "BACK";
+                        else if (vlOCR.CardSide == 2) vlReq.CardSide = "DOUBLE";
+
+                        vlReq.ImageBase64 = vlOCR.picBase64;
+                        VehicleLicenseOCRResponse vlRep = client.VehicleLicenseOCRSync(vlReq);
+                        result.Data = vlRep;
+                        break;
+                    case 5: //房产证识别 通用文字识别
+                        PropOwnerCertOCRDto pocOCR = (PropOwnerCertOCRDto)data;
+                        PropOwnerCertOCRRequest pocReq = new PropOwnerCertOCRRequest();
+                        pocReq.ImageBase64 = pocOCR.picBase64;
+                        PropOwnerCertOCRResponse pocRep = client.PropOwnerCertOCRSync(pocReq);
+                        result.Data = pocRep;
+                        break;
+                    case 6: // 通用文字识别
+                        GeneralBasicOCRDto gbOCR = (GeneralBasicOCRDto)data;
+                        GeneralBasicOCRRequest gbReq = new GeneralBasicOCRRequest();
+                        gbReq.ImageBase64 = gbOCR.picBase64;
+                        GeneralBasicOCRResponse gbRep = client.GeneralBasicOCRSync(gbReq);
+                        result.Data = gbRep;
+                        break;
+                    case 7: // 护照识别(中国大陆地区护照)
+                        PassportOCRDto pOCR = (PassportOCRDto)data;
+                        PassportOCRRequest pReq = new PassportOCRRequest();
+                        pReq.ImageBase64 = pOCR.picBase64;
+                        PassportOCRResponse pRep = client.PassportOCRSync(pReq);
+                        result.Data = pRep;
+                        break;
+                    case 8: // 护照识别(港澳台地区及境外护照)
+                        MLIDPassportOCRDto mlidpOCR = (MLIDPassportOCRDto)data;
+                        MLIDPassportOCRRequest mlidpReq = new MLIDPassportOCRRequest();
+                        mlidpReq.ImageBase64 = mlidpOCR.picBase64;
+                        MLIDPassportOCRResponse mlidpRep = client.MLIDPassportOCRSync(mlidpReq);
+                        result.Data = mlidpRep;
+                        break;
+                    case 9: // 护照识别(港澳台地区及境外护照)
+                        BusinessCardOCRDto bcOCR = (BusinessCardOCRDto)data;
+                        BusinessCardOCRRequest bcReq = new BusinessCardOCRRequest();
+                        bcReq.ImageBase64 = bcOCR.picBase64;
+                        BusinessCardOCRResponse bcRep = client.BusinessCardOCRSync(bcReq);
+                        result.Data = bcRep;
+                        break;
+                }
+
+                result.Code = 0;
+                result.Msg = "成功";
+                return result;
+            }
+            catch (Exception ex)
+            {
+                result.Msg = "TencentOCRAPIError:" + ex.Message;
+                return result;
+            }
+        }
+
+
+        /// <summary>
+        /// 图片转Base64
+        /// </summary>
+        /// <param name="ImageFileName">图片的完整路径</param>
+        /// <returns></returns>
+        public static string ImgToBase64(string ImageFileName)
+        {
+            try
+            {
+                Bitmap bmp = new Bitmap(ImageFileName);
+                MemoryStream ms = new MemoryStream();
+                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
+                byte[] arr = new byte[ms.Length];
+                ms.Position = 0;
+                ms.Read(arr, 0, (int)ms.Length);
+                ms.Close();
+                return Convert.ToBase64String(arr);
+            }
+            catch (Exception e)
+            {
+                return e.Message.ToString();
+            }
+        }
+
+        /// <summary>
+        /// TencentOCR图片类型处理
+        /// PNG、JPG、JPEG、BMP
+        /// </summary>
+        /// <param name="type"></param>
+        /// <returns></returns>
+        public static bool ImageType(string type)
+        {
+            if (type.ToLower() == "png" || type.ToLower() == "jpg" || type.ToLower() == "jpeg" || type.ToLower() == "bmp")
+                return true;
+
+            return false;
+        }
+
+
+        private const double KBCount = 1024;
+        private const double MBCount = KBCount * 1024;
+        private const double GBCount = MBCount * 1024;
+        private const double TBCount = GBCount * 1024;
+
+        /// <summary>
+        /// 得到适应的大小
+        /// </summary>
+        /// <param name="path"></param>
+        /// <returns>string</returns>
+        public static string GetAutoSizeString(double size, int roundCount)
+        {
+            if (KBCount > size)
+            {
+                return Math.Round(size, roundCount) + "B";
+            }
+            else if (MBCount > size)
+            {
+                return Math.Round(size / KBCount, roundCount) + "KB";
+            }
+            else if (GBCount > size)
+            {
+                return Math.Round(size / MBCount, roundCount) + "MB";
+            }
+            else if (TBCount > size)
+            {
+                return Math.Round(size / GBCount, roundCount) + "GB";
+            }
+            else
+            {
+                return Math.Round(size / TBCount, roundCount) + "TB";
+            }
+        }
+    }
+}

+ 2 - 0
OASystem/OASystem.Api/OASystem.API.csproj

@@ -32,6 +32,8 @@
     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
     <PackageReference Include="SqlSugarCore" Version="5.1.3.32" />
     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
+    <PackageReference Include="TencentCloudSDK.Common" Version="3.0.734" />
+    <PackageReference Include="TencentCloudSDK.Ocr" Version="3.0.734" />
   </ItemGroup>
 
   <ItemGroup>

+ 32 - 1
OASystem/OASystem.Api/Program.cs

@@ -8,6 +8,8 @@ using OASystem.API.OAMethodLib;
 using System.Text.Json.Serialization;
 using OASystem.API.OAMethodLibs;
 using OASystem.Domain.Dtos.Groups;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.AspNetCore.Server.Kestrel.Core;
 
 var builder = WebApplication.CreateBuilder(args);
 var basePath = AppContext.BaseDirectory;
@@ -32,8 +34,8 @@ builder.Services.AddControllers()
         options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss"));
     });
 
-#region Cors
 
+#region 上传文件 
 builder.Services.AddCors(policy =>
 {
     policy.AddPolicy("Cors", opt => opt
@@ -41,10 +43,38 @@ builder.Services.AddCors(policy =>
     .AllowAnyHeader()
     .AllowAnyMethod()
     .WithExposedHeaders("X-Pagination"));
+
+});
+
+builder.Services.Configure<FormOptions>(options =>
+
+{
+
+    options.KeyLengthLimit = int.MaxValue;
+
+    options.ValueLengthLimit = int.MaxValue;
+
+    options.MultipartBodyLengthLimit = int.MaxValue;
+
+    options.MultipartHeadersLengthLimit = int.MaxValue;
+
+});
+
+builder.Services.Configure<KestrelServerOptions>(options =>
+
+{
+
+    options.Limits.MaxRequestBodySize = int.MaxValue;
+
+    options.Limits.MaxRequestBufferSize = int.MaxValue;
+
 });
 
 #endregion
 
+
+
+
 #region 接口分组
 var groups = new List<Tuple<string, string>>
 {
@@ -217,6 +247,7 @@ app.UseRouting();
 app.UseAuthentication(); // 认证
 app.UseAuthorization();  // 授权
 app.UseCors("Cors");  //Cors
+//app.UseCors("AllowSpecificOrigin");  //Cors
 
 #region 启用swaggerUI
 if (AppSettingsHelper.Get("UseSwagger").ToBool())

+ 18 - 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
 
@@ -71,13 +71,12 @@ namespace OASystem.Domain.AutoMappers
             #region 车公司资料
             CreateMap<Res_CarData, CarDataView>();
             CreateMap<AddCarDataDto, Res_CarData>();
+            CreateMap<Res_CarData, CarDataSelectView>();
             #endregion
-
             #region 导游地接资料
             CreateMap<Res_LocalGuideData, LocalGuideDataView>();
-            CreateMap<LocalGuideOperationDto,Res_LocalGuideData>();
+            CreateMap<LocalGuideOperationDto, Res_LocalGuideData>();
             #endregion
-
             #region 机场三字码资料
             CreateMap<Res_ThreeCode, ThreeCodeView>();
             CreateMap<ThreeCodeOperationDto, Res_ThreeCode>();
@@ -86,6 +85,20 @@ namespace OASystem.Domain.AutoMappers
             CreateMap<Res_HotelData, HotelDataView>();
             CreateMap<OperationHotelDto, Res_HotelData>();
             #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
         }
     }

+ 17 - 0
OASystem/OASystem.Domain/Dtos/CRM/DeleClientAddDto.cs

@@ -12,4 +12,21 @@ namespace OASystem.Domain.Dtos.CRM
     public class DeleClientAddDto
     {
     }
+
+    public class SetCrmUpdPassIdCardOCRDto
+    {
+        public int UserId { get; set; }
+
+        public string ClientName { get; set; }
+
+        public int Sex { get; set; }
+
+        public string CerdNo { get; set; }
+
+        public string CerdAddress { get; set; }
+
+        public DateTime IssueDt { get; set; }
+
+        public DateTime ExpiryDt { get; set; }
+    }
 }

+ 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>

+ 19 - 0
OASystem/OASystem.Domain/Dtos/Resource/CarDataDto.cs

@@ -7,6 +7,25 @@ using System.Threading.Tasks;
 
 namespace OASystem.Domain.Dtos.Resource
 {
+    public class QueryCarDataDto:DtoBase
+    {
+        /// <summary>
+        /// 单位名称
+        /// </summary>
+        public string UnitName { get; set; }
+        /// <summary>
+        /// 单位区域
+        /// </summary>
+        public string UnitArea { get; set; }
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        public string Contact { get; set; }
+        /// <summary>
+        /// 联系人手机号
+        /// </summary>
+        public string ContactTel { get; set; }
+    }
     /// <summary>
     /// 添加车公司数据参数
     /// </summary>

+ 20 - 0
OASystem/OASystem.Domain/Dtos/Resource/LocalGuideDataDto.cs

@@ -7,6 +7,26 @@ using System.Threading.Tasks;
 
 namespace OASystem.Domain.Dtos.Resource
 {
+    public class QueryLocalGuide:DtoBase
+    {
+        /// <summary>
+        /// 区域
+        /// </summary>
+        public string UnitArea { get; set; }
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        public string UnitName { get; set; }
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        public string Contact { get; set; }
+
+        /// <summary>
+        /// 联系人手机号
+        /// </summary>
+        public string ContactTel { get; set; }
+    }
     /// <summary>
     /// 地接导游修改添加参数
     /// </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
+}

+ 15 - 0
OASystem/OASystem.Domain/Dtos/Tencent/BizLicenseOCRDto.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 营业执照识别 请求
+    /// </summary>
+    public class BizLicenseOCRDto:OCRDtoBase
+    {
+    }
+}

+ 16 - 0
OASystem/OASystem.Domain/Dtos/Tencent/BusinessCardOCRDto.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 名片识别
+    /// 请求类
+    /// </summary>
+    public class BusinessCardOCRDto:OCRDtoBase
+    {
+    }
+}

+ 16 - 0
OASystem/OASystem.Domain/Dtos/Tencent/GeneralBasicOCRDto.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 通用文字识别
+    /// 请求类
+    /// </summary>
+    public class GeneralBasicOCRDto:OCRDtoBase
+    {
+    }
+}

+ 29 - 0
OASystem/OASystem.Domain/Dtos/Tencent/IDCardOCRDto.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// TencentOCR ID证件识别 
+    /// </summary>
+    public class IDCardOCRDto:DtoBase
+    {
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 图片的 Base64 值。要求图片经Base64编码后不超过 7M,分辨率建议500*800以上,支持PNG、JPG、JPEG、BMP格式。建议卡片部分占据图片2/3以上。
+        /// </summary>
+        public string picBase64 { get; set; }
+
+        /// <summary>
+        /// 0 FRONT:身份证有照片的一面(人像面)
+        /// 1 BACK:身份证有国徽的一面(国徽面)
+        ///  该参数如果不填,将为您自动判断身份证正反面。
+        /// </summary>
+        public int CardSide { get; set; }
+
+    }
+}

+ 16 - 0
OASystem/OASystem.Domain/Dtos/Tencent/MLIDPassportOCRDto.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 护照识别(港澳台地区及境外护照)
+    /// 请求实体类
+    /// </summary>
+    public class MLIDPassportOCRDto:OCRDtoBase
+    {
+    }
+}

+ 16 - 0
OASystem/OASystem.Domain/Dtos/Tencent/MarriageLicenseOCRDto.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 结婚证
+    /// 请求实体类
+    /// </summary>
+    public class MarriageLicenseOCRDto:OCRDtoBase
+    {
+    }
+}

+ 20 - 0
OASystem/OASystem.Domain/Dtos/Tencent/OCRDtoBase.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// OCR 继承基类
+    /// </summary>
+    public class OCRDtoBase
+    {
+        /// <summary>
+        /// 图片转base64 字符串
+        /// </summary>
+        public string picBase64 { get; set; }
+
+    }
+}

+ 15 - 0
OASystem/OASystem.Domain/Dtos/Tencent/OrgCodeCertOCRDto.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 组织机构代码证识别
+    /// </summary>
+    public class OrgCodeCertOCRDto:OCRDtoBase
+    {
+    }
+}

+ 16 - 0
OASystem/OASystem.Domain/Dtos/Tencent/PassportOCRDto.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 护照识别(中国大陆地区护照)
+    /// 请求实体类
+    /// </summary>
+    public class PassportOCRDto:OCRDtoBase
+    {
+    }
+}

+ 15 - 0
OASystem/OASystem.Domain/Dtos/Tencent/PropOwnerCertOCRDto.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 房产证 请求实体类
+    /// </summary>
+    public class PropOwnerCertOCRDto:OCRDtoBase
+    {
+    }
+}

+ 15 - 0
OASystem/OASystem.Domain/Dtos/Tencent/ResidenceBookletOCRDto.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 户口本OCR Dto
+    /// </summary>
+    public class ResidenceBookletOCRDto:OCRDtoBase
+    {
+    }
+}

+ 16 - 0
OASystem/OASystem.Domain/Dtos/Tencent/UniformCreditCodeOCRDto.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 统一信用代码请求实体类
+    /// 
+    /// </summary>
+    public class UniformCreditCodeOCRDto:OCRDtoBase
+    {
+    }
+}

+ 22 - 0
OASystem/OASystem.Domain/Dtos/Tencent/VehicleLicenseOCRDto.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Tencent
+{
+    /// <summary>
+    /// 行驶证识别
+    /// 请求类
+    /// </summary>
+    public class VehicleLicenseOCRDto:OCRDtoBase
+    {
+        /// <summary>
+        /// 0 FRONT 1 BACK 2 DOUBEL
+        /// FRONT 为行驶证主页正面(有红色印章的一面), BACK 为行驶证副页正面(有号码号牌的一面), DOUBLE 为行驶证主页正面和副页正面。
+        /// 默认值为:FRONT。
+        /// </summary>
+        public int CardSide { get; set; }
+    }
+}

+ 95 - 0
OASystem/OASystem.Domain/Entities/Resource/Res_CountryFeeCost.cs

@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Resource
+{
+    [SugarTable("Res_CountryFeeCost")]
+    public class Res_CountryFeeCost:EntityBase
+    {
+        /// <summary>
+        /// 洲名
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string VisaContinent { get; set; }
+
+        /// <summary>
+        /// 国家名
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string VisaCountry { get; set; }
+
+        /// <summary>
+        /// 是否免签免签 0:是 1:否
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsVisaExemption { get; set; }
+        /// <summary>
+        /// 是否落地签 0:是 1:否
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsVisaOnArrival { get; set; }
+        /// <summary>
+        /// 是否电子签 0:是 1:否
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsElectronicSignature { get; set; }
+
+        /// <summary>
+        /// 签证费用
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(18,2)")]
+        public decimal VisaPrice { get; set; }
+
+        /// <summary>
+        /// 签证费用描述
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "nvarchar(255)")]
+        public string VisaPriceDesc { get; set; }
+
+        /// <summary>
+        /// 签证类型 大公务/小公务/大小公务同时免签
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string VisaType { get; set; }
+
+        /// <summary>
+        /// 一般签证时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        public DateTime VisaTime { get; set; }
+
+        /// <summary>
+        /// 签证是否加急 0:加急  1: 不加急
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsUrgent { get; set; }
+
+        /// <summary>
+        /// 加急时间 
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        public DateTime UrgentTime { get; set; }
+
+        /// <summary>
+        /// 加急费用
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(18,2)")]
+        public decimal UrgentPrice { get; set; }
+
+        /// <summary>
+        /// 加急费用描述 
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "nvarchar(255)")]
+        public string UrgentPriceDesc { get; set; }
+
+        /// <summary>
+        /// 签证地址
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string VisaAddress { get; set; }
+
+    }
+}

+ 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; }
+    }
+}

+ 66 - 0
OASystem/OASystem.Domain/Enums/TencentOCREnum.cs

@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.TencentOCR
+{
+    /// <summary>
+    /// ocr 枚举类型
+    /// </summary>
+    public enum TencentOCREnum
+    {
+        /* OCR存储文件路径
+         * **************************************
+         * 身份证识别 OCR/IDCard
+         * 户口本识别 OCR/ResidenceBooklet
+         * 营业执照识别 OCR/BizLicense
+         * 组织机构代码证识别 OCR/OrgCodeCert
+         * 行驶证识别 OCR/VehicleLicense
+         * 房产证识别 OCR/PropOwnerCert
+         * 通用印刷体识别 OCR/GeneralAccurate
+         ***************************************
+         */
+        /// <summary>
+        /// 身份证识别
+        /// </summary>
+        IDCard = 0,
+        /// <summary>
+        /// 户口本识别
+        /// </summary>
+        ResidenceBooklet=1,
+        /// <summary>
+        /// 营业执照识别
+        /// </summary>
+        BizLicense,
+        /// <summary>
+        /// 组织机构代码证识别
+        /// </summary>
+        OrgCodeCert,
+        /// <summary>
+        /// 行驶证识别
+        /// </summary>
+        VehicleLicense,
+        /// <summary>
+        /// 房产证识别
+        /// </summary>
+        PropOwnerCert,
+        /// <summary>
+        /// 通用印刷体识别
+        /// </summary>
+        GeneralBasic,
+        /// <summary>
+        /// 护照识别(中国大陆地区护照)
+        /// </summary>
+        Passport,
+        /// <summary>
+        /// 护照识别(港澳台地区及境外护照)
+        /// </summary>
+        MLIDPassport,
+        /// <summary>
+        /// 名片识别
+        /// </summary>
+        BusinessCard
+    }
+}

+ 16 - 0
OASystem/OASystem.Domain/ViewModels/CRM/CustomerCertView.cs

@@ -0,0 +1,16 @@
+using OASystem.Domain.Entities.Customer;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.CRM
+{
+    /// <summary>
+    /// 签证 证件类型
+    /// </summary>
+    public class CustomerCertView: Crm_CustomerCert
+    {
+    }
+}

+ 2 - 0
OASystem/OASystem.Domain/ViewModels/CRM/VisaDeleClientView.cs

@@ -92,4 +92,6 @@ namespace OASystem.Domain.ViewModels.CRM
         /// </summary>
         public string IdNo { get; set; }
     }
+
+   
 }

+ 27 - 1
OASystem/OASystem.Domain/ViewModels/Group/DelegationInfoView.cs

@@ -140,7 +140,7 @@ namespace OASystem.Domain.ViewModels.Group
         public string TellPhone { get; set; }
     }
 
-    // <summary>
+    /// <summary>
     /// 接团信息列表
     /// 返回视图
     /// </summary>
@@ -248,4 +248,30 @@ namespace OASystem.Domain.ViewModels.Group
         /// </summary>
         public string GroupName { get; set; }
     }
+
+    /// <summary>
+    /// 根据团组ID 查询客户
+    /// </summary>
+    public class CrmByGroupIdView
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int GrpId { get; set; }
+
+        /// <summary>
+        /// 客户名称
+        /// </summary>
+        public string clientName { get; set; }
+
+        /// <summary>
+        /// 客户手机号
+        /// </summary>
+        public string Tel { get; set; }
+
+        /// <summary>
+        /// 客户身份证号码
+        /// </summary>
+        public string CerdNo { get; set; }
+    }
 }

+ 6 - 0
OASystem/OASystem.Domain/ViewModels/Resource/CarDataView.cs

@@ -10,4 +10,10 @@ namespace OASystem.Domain.ViewModels.Resource
     public class CarDataView:Res_CarData
     {
     }
+
+    public class CarDataSelectView
+    {
+        public int Id { get; set; }
+        public string UnitArea { get; set; }
+    }
 }

+ 5 - 0
OASystem/OASystem.Domain/ViewModels/Resource/LocalGuideDataView.cs

@@ -10,4 +10,9 @@ namespace OASystem.Domain.ViewModels.Resource
     public class LocalGuideDataView:Res_LocalGuideData
     {
     }
+    public class QueryLocalGuideSelectView
+    {
+        public int Id { get; set; }
+        public string UnitArea { 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
+
+}

+ 60 - 0
OASystem/OASystem.Domain/ViewModels/TencentOCR/IDCardOCRView.cs

@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.TencentOCR
+{
+    /// <summary>
+    /// 身份证 OCR 返回视图
+    /// </summary>
+    public class IDCardOCRView
+    {
+        /// <summary>
+        /// 是否修改
+        /// 签证客户人员信息
+        /// </summary>
+        public bool Status { get; set; }
+
+        /// <summary>
+        /// 姓名
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 性别
+        /// </summary>
+        public string Sex { get; set; }
+
+        /// <summary>
+        /// 种族
+        /// </summary>
+        public string Nation { get; set; }
+
+        /// <summary>
+        /// 生日
+        /// </summary>
+        public string Birth { get; set; }
+
+        /// <summary>
+        /// 身份证地址
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 身份证号码
+        /// </summary>
+        public string IdNum { get; set; }
+
+        /// <summary>
+        /// 签发机关
+        /// </summary>
+        public string Authority { get; set; }
+
+        /// <summary>
+        /// 证件有效期
+        /// </summary>
+        public string ValidDate { get; set; }
+    }
+}

+ 131 - 0
OASystem/OASystem.Domain/ViewModels/TencentOCR/ResidenceBookletOCRView.cs

@@ -0,0 +1,131 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.TencentOCR
+{
+    /// <summary>
+    /// 户口簿 返回View
+    /// </summary>
+    public class ResidenceBookletOCRView
+    {
+        /// <summary>
+        /// 户籍地址
+        /// </summary>
+        public string Address { get; set; }
+        /// <summary>
+        /// 出生日期
+        /// </summary>
+        public string BirthDate { get; set; }
+        /// <summary>
+        /// 出生城市
+        /// </summary>
+        public string BirthPlace { get; set; }
+        /// <summary>
+        /// 血型
+        /// </summary>
+        public string BloodType { get; set; }
+        /// <summary>
+        /// 教育程度
+        /// </summary>
+        public string EducationDegree { get; set; }
+        /// <summary>
+        /// 曾用姓名
+        /// </summary>
+        public string FormerName { get; set; }
+        /// <summary>
+        /// 身高
+        /// </summary>
+        public string Height { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string HomePageNumber { get; set; }
+        /// <summary>
+        /// 与户主关系
+        /// </summary>
+        public string Household { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string HouseholdNumber { get; set; }
+        /// <summary>
+        /// 户主名称
+        /// </summary>
+        public string HouseholderName { get; set; }
+        /// <summary>
+        /// 身份证号
+        /// </summary>
+        public string IdCardNumber { get; set; }
+        /// <summary>
+        /// 签发日期
+        /// </summary>
+        public string IssueDate { get; set; }
+        /// <summary>
+        /// 婚姻状态
+        /// </summary>
+        public string MaritalStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string MoveToCityInformation { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string MoveToSiteInformation { get; set; }
+        /// <summary>
+        /// 姓名
+        /// </summary>
+        public string Name { get; set; }
+        /// <summary>
+        /// 种族
+        /// </summary>
+        public string Nation { get; set; }
+        /// <summary>
+        /// 江苏省江阴市
+        /// </summary>
+        public string NativePlace { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string OtherAddresses { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Profession { get; set; }
+        /// <summary>
+        /// 2010年07月13日
+        /// </summary>
+        public DateTime RegistrationDate { get; set; }
+        /// <summary>
+        /// 子
+        /// </summary>
+        public string Relationship { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ReligiousBelief { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RequestId { get; set; }
+        /// <summary>
+        /// 丰镇小学
+        /// </summary>
+        public string ServicePlace { get; set; }
+        /// <summary>
+        /// 男
+        /// </summary>
+        public string Sex { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Signature { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string VeteranStatus { get; set; }
+    }
+}

+ 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()

+ 56 - 2
OASystem/OASystem.Infrastructure/Repositories/CRM/VisaDeleClientRepository.cs

@@ -1,5 +1,6 @@
 using OASystem.Domain;
 using OASystem.Domain.Dtos;
+using OASystem.Domain.Dtos.CRM;
 using OASystem.Domain.Dtos.UserDto;
 using OASystem.Domain.Entities.Customer;
 using OASystem.Domain.Entities.Groups;
@@ -39,7 +40,6 @@ namespace OASystem.Infrastructure.Repositories.CRM
                                              Left Join Crm_CustomerCert crmCard1 On crmCard1.SdId = 773 And  cdc.Id = crmCard1.DcId 
                                              Left Join Crm_CustomerCert crmCard2 On crmCard2.SdId = 774 And  cdc.Id = crmCard2.DcId ");
 
-
                 var clientList = await _sqlSugar.SqlQueryable<VisaDeleClientListView>(sql).ToListAsync();
 
                 if (clientList.Count > 0)
@@ -75,7 +75,7 @@ namespace OASystem.Infrastructure.Repositories.CRM
         /// </summary>
         /// <param name="loginDto"></param>
         /// <returns></returns>
-        public async Task<int> CrmClinetAdd(Crm_DeleClient  client)
+        public async Task<int> CrmClinetAdd(Crm_DeleClient client)
         {
             int addId = -1;
 
@@ -85,5 +85,59 @@ namespace OASystem.Infrastructure.Repositories.CRM
             return addId;
         }
 
+
+        /// <summary>
+        /// 根据身份证识别修改ocr添加
+        /// </summary>
+        /// <param name="client"></param>
+        /// <returns></returns>
+        public async Task<bool> SetCrmUpdPassIdCardOCR(SetCrmUpdPassIdCardOCRDto client)
+        {
+
+            string clientSql = string.Format(@"Select * From Crm_DeleClient Where LastName+FirstName='{0}' And Sex = {1}",
+                                             client.ClientName, client.Sex);
+            var clientInfo = await _sqlSugar.SqlQueryable<VisaDeleClientListView>(clientSql).FirstAsync();
+            if(clientInfo == null) return false;
+
+            string cardSql = string.Format(@"Select * From Crm_CustomerCert Where SdId=773 And DcId={0}", clientInfo.Id);
+            var cardInfo = await _sqlSugar.SqlQueryable<CustomerCertView>(cardSql).FirstAsync();
+
+            if (cardInfo == null)  //添加
+            {
+                int cerdAdd = await _sqlSugar.Insertable<Crm_CustomerCert>(new Crm_CustomerCert
+                {
+                    DcId = clientInfo.Id,
+                    SdId = "773",
+                    Country = "中国",
+                    CertNo = client.CerdNo,
+                    TargetCountry = "",
+                    IssueDt = new DateTime(1990, 1, 1),
+                    ExpiryDt = "1990-01-01 00:00:00.000",
+                    CreateUserId = client.UserId,
+                    CreateTime = DateTime.Now,
+                    DeleteUserId = null,
+                    DeleteTime = "1990-01-01 00:00:00.000",
+                    Remark = "",
+                    IsDel = 0
+                }).ExecuteReturnIdentityAsync();
+                if (cerdAdd > 0) return true;
+
+            }
+            else  //修改
+            {
+                var cerdStatus = await _sqlSugar.Updateable<Crm_CustomerCert>()
+                    .Where(c => c.Id == cardInfo.Id)
+                    .SetColumns(c => new Crm_CustomerCert
+                    {
+                        CertNo = cardInfo.CertNo,
+                        IDCardAddress = cardInfo.IDCardAddress
+                    }).ExecuteCommandAsync();
+
+                if (cerdStatus > 0) return true;
+            }
+
+            
+            return false;
+        }
     }
 }

+ 81 - 4
OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationInfoRepository.cs

@@ -3,8 +3,10 @@ using OASystem.Domain.Dtos;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Dtos.UserDto;
 using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.CRM;
 using OASystem.Domain.ViewModels.Group;
 using OASystem.Infrastructure.Repositories.System;
+using Org.BouncyCastle.Asn1.Cms;
 using Org.BouncyCastle.Utilities.Collections;
 using Serilog;
 using SqlSugar;
@@ -32,6 +34,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
             this._usersRepository = usersRepository;
         }
 
+        #region 团组
         /// <summary>
         /// 获取接团信息List
         /// </summary>
@@ -157,7 +160,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                 throw;
             }
-            
+
 
             return result;
         }
@@ -262,7 +265,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 }  //增加
                 else if (dto.Status == 2)     //修改
                 {
-                    var updateStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo {
+                    var updateStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo
+                    {
                         SalesQuoteNo = dto.SalesQuoteNo,
                         TeamLevSId = dto.TeamLevSId,
                         ClientName = dto.ClientName,
@@ -300,7 +304,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 }
                 else if (dto.Status == 3)  //删除
                 {
-                    var deleteStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo { 
+                    var deleteStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo
+                    {
                         DeleteUserId = dto.UserId,
                         DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                         IsDel = 1
@@ -348,7 +353,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                     result.Msg = "删除失败!";
                 }
-                
+
             }
 
             return result;
@@ -439,5 +444,77 @@ namespace OASystem.Infrastructure.Repositories.Groups
             }
             return result;
         }
+
+        /// <summary>
+        /// 获取接团名称List And 签证国别
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> GetGroupNameAndVisaNationality(GroupNameDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+
+            if (dto.PortType == 1 || dto.PortType == 2) //web
+            {
+                string sql = string.Format(@"Select Id,TeamName GroupName From  Grp_DelegationInfo 
+                                             Where TeamName != '' And IsDel = 0
+                                             Order By Id Desc");
+                var _groupNameList = await _sqlSugar.SqlQueryable<GroupNameView>(sql).ToListAsync();
+                
+                string visaSql = string.Format(@"Select Id,Name From Sys_SetData Where STid = 41 And IsDel = 0");
+                var _setDataList = await _sqlSugar.SqlQueryable<SetDataInfoView>(visaSql).ToListAsync();
+
+                var data = new {
+                    groupNameData = _groupNameList,
+                    visaNationalityData = _setDataList
+                };
+
+                result.Data = data;
+                result.Code = 0;
+
+            }
+            return result;
+        }
+
+        #endregion
+
+        #region 团组&签证
+
+        /// <summary>
+        /// 根据团组Id查询客户
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> GetCrmByGroupId(ClientByGroupIdDto dto)
+        {
+            Result result = new Result() { Code = -2 };
+            if (dto.PortType == 1 || dto.PortType == 2)
+            {
+                string sql = string.Format(@"Select gdjc.GrpDCId grpId,cdc.Id,cdc.LastName+cdc.FirstName clientName,cdc.Tel,ccc.CertNo CerdNo 
+                                             From  Grp_DelegationJoinCustomer gdjc
+                                             Inner join Crm_DeleClient cdc On gdjc.CrmDCId =  cdc.Id
+                                             Left Join Crm_CustomerCert ccc On ccc.SdId = 773 And  cdc.Id = ccc.DcId 
+                                             Where gdjc.GrpDCId = {0}", dto.GroupId);
+
+
+                var clientList = await _sqlSugar.SqlQueryable<CrmByGroupIdView>(sql).ToListAsync();
+
+                if (clientList.Count > 0)
+                {
+                    result.Code = 0;
+                    result.Msg = "成功!";
+                    result.Data = clientList;
+                }
+                else
+                {
+                    result.Msg = "暂无数据!";
+                }
+            }
+
+            return result;
+        }
+
+
+        #endregion
     }
 }

+ 147 - 2
OASystem/OASystem.Infrastructure/Repositories/Resource/CarDataRepository.cs

@@ -1,12 +1,157 @@
-using OASystem.Domain.Entities.Resource;
+using AutoMapper;
+using OASystem.Domain;
+using OASystem.Domain.Dtos.Resource;
+using OASystem.Domain.Entities.Resource;
 using OASystem.Domain.ViewModels.Resource;
+
 namespace OASystem.Infrastructure.Repositories.Resource
 {
     public class CarDataRepository: BaseRepository<Res_CarData, CarDataView>
     {
-        public CarDataRepository(SqlSugarClient sqlSugar) : base(sqlSugar)
+        private readonly IMapper _mapper;
+        public CarDataRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
+        {
+            _mapper = mapper;
+        }
+
+        /// <summary>
+        /// 查询用车资料
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> QueryCarData(QueryCarDataDto dto)
         {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            try
+            {
+                string sqlWhere = string.Empty;
+                if (!string.IsNullOrWhiteSpace(dto.UnitName))
+                {
+                    sqlWhere += string.Format(@" And UnitName like '%{0}%'", dto.UnitName);
+                }
+                if (!string.IsNullOrWhiteSpace(dto.UnitArea) && dto.UnitArea!="全部")
+                {
+                    sqlWhere += string.Format(@" And UnitArea like '%{0}%'", dto.UnitArea);
+                }
+                if (!string.IsNullOrWhiteSpace(dto.Contact))
+                {
+                    sqlWhere += string.Format(@" And Contact like '%{0}%'", dto.Contact);
+                }
+                if (!string.IsNullOrWhiteSpace(dto.ContactTel))
+                {
+                    sqlWhere += string.Format(@" And ContactTel like '%{0}%'", dto.ContactTel);
+                }
+                if (!string.IsNullOrEmpty(sqlWhere.Trim()))
+                {
+                    Regex r = new Regex("And");
+                    sqlWhere = r.Replace(sqlWhere, "Where", 1);
+                }
+                if (dto.PortType == 1)
+                {
+                    string sql = string.Format(@"select * from Res_CarData {0}", sqlWhere);
+                    List<Res_CarData> CarData = await _sqlSugar.SqlQueryable<Res_CarData>(sql).ToListAsync();
+                    if (CarData.Count==0)
+                    {
+                        return result = new Result() { Code = -1, Msg = "暂无数据" };
+                    }
+                    CarData= CarData.OrderByDescending(x => x.CreateTime).ToList();
+
+                    if (dto.PageSize==0 || dto.PageIndex==0)
+                    {
+                        return result = new Result()
+                        {
+                            Code = 0,
+                            Msg = "查询成功",
+                            Data = CarData,
+                        };
+                    }
+                    else
+                    {
+                        int count = CarData.Count;
+                        float totalPage = (float)count / dto.PageSize;//总页数
+                        if (totalPage == 0) totalPage = 1;
+                        else totalPage = (int)Math.Ceiling((double)totalPage);
+
+                        List<Res_CarData> ListData = new List<Res_CarData>();
+                        for (int i = 0; i < dto.PageSize; i++)
+                        {
+                            var RowIndex = i + (dto.PageIndex - 1) * dto.PageSize;
+                            if (RowIndex < CarData.Count)
+                            {
+                                ListData.Add(CarData[RowIndex]);
+                            }
+                            else
+                            {
+                                break;
+                            }
+                        }
+                        return result = new Result()
+                        {
+                            Code = 0,
+                            Msg = "查询成功",
+                            Data = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = ListData },
+                        };
+                    }
+                    
+                }
+                else if (dto.PortType == 2)
+                {
+                    string sql = string.Format(@"select * from Res_CarData {0}", sqlWhere);
+                    List<Res_CarData> CarData = await _sqlSugar.SqlQueryable<Res_CarData>(sql).ToListAsync();
+                    if (CarData.Count == 0)
+                    {
+                        return result = new Result() { Code = -1, Msg = "暂无数据" };
+                    }
+                    CarData = CarData.OrderByDescending(x => x.CreateTime).ToList();
+
+                    if (dto.PageSize == 0 || dto.PageIndex == 0)
+                    {
+                        return result = new Result()
+                        {
+                            Code = 0,
+                            Msg = "查询成功",
+                            Data = CarData,
+                        };
+                    }
+                    else
+                    {
+                        int count = CarData.Count;
+                        float totalPage = (float)count / dto.PageSize;//总页数
+                        if (totalPage == 0) totalPage = 1;
+                        else totalPage = (int)Math.Ceiling((double)totalPage);
 
+                        List<Res_CarData> ListData = new List<Res_CarData>();
+                        for (int i = 0; i < dto.PageSize; i++)
+                        {
+                            var RowIndex = i + (dto.PageIndex - 1) * dto.PageSize;
+                            if (RowIndex < CarData.Count)
+                            {
+                                ListData.Add(CarData[RowIndex]);
+                            }
+                            else
+                            {
+                                break;
+                            }
+                        }
+                        return result = new Result()
+                        {
+                            Code = 0,
+                            Msg = "查询成功",
+                            Data = new { pageCount = count, totalPage = ((int)totalPage).ToString(), pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = ListData },
+                        };
+                    }
+                }
+                else
+                {
+                    return result = new Result() { Code = -2, Msg = "请传入PortType参数!1:Web,2:Android,3:IOS" };
+                }
+            }
+            catch (Exception)
+            {
+                return result;
+                throw;
+            }
+            
         }
     }
 }

+ 135 - 0
OASystem/OASystem.Infrastructure/Repositories/Resource/LocalGuideDataRepository.cs

@@ -85,5 +85,140 @@ namespace OASystem.Infrastructure.Repositories.Resource
             }
             return result;
         }
+
+        public async Task<Result> QueryLocalGuide(QueryLocalGuide dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            try
+            {
+                string sqlWhere = string.Empty;
+                if (!string.IsNullOrWhiteSpace(dto.UnitName))
+                {
+                    sqlWhere += string.Format(@" And UnitName like '%{0}%'", dto.UnitName);
+                }
+                if (!string.IsNullOrWhiteSpace(dto.UnitArea) && dto.UnitArea != "全部")
+                {
+                    sqlWhere += string.Format(@" And UnitArea like '%{0}%''", dto.UnitArea);
+                }
+                if (!string.IsNullOrWhiteSpace(dto.Contact))
+                {
+                    sqlWhere += string.Format(@" And Contact like '%{0}%'", dto.Contact);
+                }
+                if (!string.IsNullOrWhiteSpace(dto.ContactTel))
+                {
+                    sqlWhere += string.Format(@" And ContactTel like '%{0}%'", dto.ContactTel);
+                }
+                if (!string.IsNullOrEmpty(sqlWhere.Trim()))
+                {
+                    Regex r = new Regex("And");
+                    sqlWhere = r.Replace(sqlWhere, "Where", 1);
+                }
+                if (dto.PortType == 1)
+                {
+                    string sql = string.Format(@"select * from Res_LocalGuideData {0}", sqlWhere);
+                    List<Res_LocalGuideData> LocalGuideData = await _sqlSugar.SqlQueryable<Res_LocalGuideData>(sql).ToListAsync();
+                    if (LocalGuideData.Count == 0)
+                    {
+                        return result = new Result() { Code = -1, Msg = "暂无数据" };
+                    }
+                    LocalGuideData = LocalGuideData.OrderByDescending(x => x.CreateTime).ToList();
+
+                    if (dto.PageSize == 0 || dto.PageIndex == 0)
+                    {
+                        return result = new Result()
+                        {
+                            Code = 0,
+                            Msg = "查询成功",
+                            Data = LocalGuideData,
+                        };
+                    }
+                    else
+                    {
+                        int count = LocalGuideData.Count;
+                        float totalPage = (float)count / dto.PageSize;//总页数
+                        if (totalPage == 0) totalPage = 1;
+                        else totalPage = (int)Math.Ceiling((double)totalPage);
+
+                        List<Res_LocalGuideData> ListData = new List<Res_LocalGuideData>();
+                        for (int i = 0; i < dto.PageSize; i++)
+                        {
+                            var RowIndex = i + (dto.PageIndex - 1) * dto.PageSize;
+                            if (RowIndex < LocalGuideData.Count)
+                            {
+                                ListData.Add(LocalGuideData[RowIndex]);
+                            }
+                            else
+                            {
+                                break;
+                            }
+                        }
+                        return result = new Result()
+                        {
+                            Code = 0,
+                            Msg = "查询成功",
+                            Data = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = ListData },
+                        };
+                    }
+
+                }
+                else if (dto.PortType == 2)
+                {
+                    string sql = string.Format(@"select * from Res_LocalGuideData {0}", sqlWhere);
+                    List<Res_LocalGuideData> LocalGuideData = await _sqlSugar.SqlQueryable<Res_LocalGuideData>(sql).ToListAsync();
+                    if (LocalGuideData.Count == 0)
+                    {
+                        return result = new Result() { Code = -1, Msg = "暂无数据" };
+                    }
+                    LocalGuideData = LocalGuideData.OrderByDescending(x => x.CreateTime).ToList();
+
+                    if (dto.PageSize == 0 || dto.PageIndex == 0)
+                    {
+                        return result = new Result()
+                        {
+                            Code = 0,
+                            Msg = "查询成功",
+                            Data = LocalGuideData,
+                        };
+                    }
+                    else
+                    {
+                        int count = LocalGuideData.Count;
+                        float totalPage = (float)count / dto.PageSize;//总页数
+                        if (totalPage == 0) totalPage = 1;
+                        else totalPage = (int)Math.Ceiling((double)totalPage);
+
+                        List<Res_LocalGuideData> ListData = new List<Res_LocalGuideData>();
+                        for (int i = 0; i < dto.PageSize; i++)
+                        {
+                            var RowIndex = i + (dto.PageIndex - 1) * dto.PageSize;
+                            if (RowIndex < LocalGuideData.Count)
+                            {
+                                ListData.Add(LocalGuideData[RowIndex]);
+                            }
+                            else
+                            {
+                                break;
+                            }
+                        }
+                        return result = new Result()
+                        {
+                            Code = 0,
+                            Msg = "查询成功",
+                            Data = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = ListData },
+                        };
+                    }
+                }
+                else
+                {
+                    return result = new Result() { Code = -2, Msg = "请传入PortType参数!1:Web,2:Android,3:IOS" };
+                }
+            }
+            catch (Exception)
+            {
+                return result;
+                throw;
+            }
+
+        }
     }
 }

+ 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;
+        }
+    }
+}

+ 19 - 0
OASystem/OASystem.Tencent/OASystem.Tencent.csproj

@@ -0,0 +1,19 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="System.Drawing.Common" Version="7.0.0" />
+    <PackageReference Include="TencentCloudSDK.Common" Version="3.0.734" />
+    <PackageReference Include="TencentCloudSDK.Ocr" Version="3.0.734" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\OASystem.Domain\OASystem.Domain.csproj" />
+  </ItemGroup>
+
+</Project>

+ 92 - 0
OASystem/OASystem.Tencent/TencentOCRTools.cs

@@ -0,0 +1,92 @@
+using TencentCloud.Common;
+using TencentCloud.Ocr.V20181119.Models;
+using TencentCloud.Ocr.V20181119;
+using OASystem.Domain;
+using OASystem.TencentOCR;
+using OASystem.Domain.Dtos.Tencent;
+using System.Drawing;
+
+namespace OASystem.Tencent
+{
+    /// <summary>
+    /// 腾讯OCR Tools
+    /// </summary>
+    public class TencentOCRTool
+    {
+        /// <summary>
+        /// 初始化 腾讯云账户密钥对 SecretId,SecretKey
+        /// </summary>
+        Credential cred = new Credential
+        {
+            SecretId = "AKIDoQUHLBELagatzoScfdMpMddMnz8apqIc",
+            SecretKey = "hKiGbhkX5NWWXu3zDWwAATVK3e5sWuBB"
+        };
+
+        /// <summary>
+        /// ocr识别
+        /// </summary>
+        /// <param name="picBase64">图片base64</param>
+        /// <param name="ocrEnum">转换类型</param>
+        /// <param name="data">请求数据源</param>
+        /// <returns></returns>
+        public Result GetOCR(TencentOCREnum ocrEnum, object data)
+        {
+            Result result = new Result { Code = -1, Msg = "未知错误", Data = null };
+            OcrClient client = new OcrClient(cred, "ap-guangzhou");
+
+            try
+            {
+                switch (ocrEnum)
+                {
+                    case 0: //身份证识别
+                        IDCardOCRDto iDCardDto = (IDCardOCRDto)data;
+                        IDCardOCRRequest req = new IDCardOCRRequest();
+
+                        if (iDCardDto.CardSide == 0) req.CardSide = "FORNT";
+                        else if (iDCardDto.CardSide == 0) req.CardSide = "BACK";
+
+                        req.ImageBase64 = iDCardDto.picBase64;
+                        IDCardOCRResponse resp = client.IDCardOCRSync(req);
+                        result.Data = resp;
+                        break;
+
+                }
+
+                result.Code = 0;
+                result.Msg = "成功";
+                return result;
+            }
+            catch (Exception ex)
+            {
+                result.Msg = "类型:" + ex.Message;
+                return result;
+            }
+        }
+
+
+        /// <summary>
+        /// 图片转Base64
+        /// </summary>
+        /// <param name="ImageFileName">图片的完整路径</param>
+        /// <returns></returns>
+        public string ImgToBase64(string ImageFileName)
+        {
+            try
+            {
+                Bitmap bmp = new Bitmap(ImageFileName);
+                MemoryStream ms = new MemoryStream();
+                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
+                byte[] arr = new byte[ms.Length];
+                ms.Position = 0;
+                ms.Read(arr, 0, (int)ms.Length);
+                ms.Close();
+                return Convert.ToBase64String(arr);
+            }
+            catch (Exception e)
+            {
+                return e.Message.ToString();
+            }
+        }
+
+    }
+}

+ 92 - 138
OASystem/_Doc/OA2023数据字典.docx

@@ -1432,144 +1432,6 @@ Null
 0否1是
 
 
-8) 新客户资料信息表:Crm_NewClientData(可挪用)
-                                   字段名
-                                 类型长度
-                                 字段属性
-                                 字段约束
-                                 字段描述
-                                    备注
-number
-Int
-Null
-
-序号
-
-lvlId
-Int
-Null
-
-地市州id
-
-client
-varchar(50)
-Null
-
-客户单位
-
-weight
-varchar(20)
-
-
-权重
-
-clientshort
-varchar(50)
-
-
-客户单位简写
-
-contact
-varchar(50)
-
-
-联系人
-
-gender 
-int
-
-
-联系人性别
-0男1女
-passport
-varchar(50)
-
-
-护照
-
-passportDate
-DateTime
-
-
-护照日期
-
-job
-varchar(50)
-
-
-职位
-
-telephone
-varchar(50)
-
-
-联系手机号
-
-phone
-varchar(50)
-
-
-联系座机号
-
-email
-varchar(50)
-
-
- 邮件
-
-location
-varchar(50)
-
-
-所属区域(所在城市)
-
-address
-varchar(80)
-
-
-地址
-
-birthday
-Date
-
-
-生日
-
-otherinfo
-varchar(50)
-
-
-其他信息
-
-wechat
-varchar(50)
-
-
-微信
-
-category
-int
-
-
-分类
-setdataid
-predele
-int
-
-
-预计出团
-
-finlishedDele
-int
-
-
-已出团
-
-
-
-
-
-
 1. 团组模块
 
 
@@ -3065,3 +2927,95 @@ Null
 机场英文名
 
 
+5) 国家_签证费用标准表:Res_CountryFeeCost(挪用)
+                                   字段名
+                                 类型长度
+                                 字段属性
+                                 字段约束
+                                 字段描述
+                                    备注
+VisaContinent
+varchar(50)
+Null
+
+洲名
+
+VisaCountry
+varchar(50)
+Null
+
+国家名
+
+IsVisaExemption
+int
+Null
+
+是否免签免签
+0:是 1:否
+IsVisaOnArrival
+int
+Null
+
+是否落地签
+0:是 1:否
+IsElectronicSignature
+int
+Null
+
+是否电子签
+0:是 1:否
+VisaPrice
+decimal(10, 2)
+Null
+
+签证费用
+
+VisaPriceDesc
+nvarchar(255)
+Null
+
+签证费用描述
+
+VisaType
+varchar(50)
+Null
+
+签证类型
+大公务/小公务/大小公务同时免签
+VisaTime
+varchar(50)
+Null
+
+一般签证时间
+
+IsUrgent
+int
+Null
+
+签证是否加急
+0:加急  1: 不加急
+UrgentTime
+varchar(50)
+Null
+
+加急时间 
+
+UrgentPrice
+decimal(10, 2)
+Null
+
+加急费用
+
+UrgentPriceDesc
+nvarchar(255)
+Null
+
+加急费用描述 
+
+VisaAddress
+nvarchar(255)
+Null
+
+签证地址
+
+