/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 202403/02 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.IServices; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.ViewModels.Api; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Helper; using Flurl.Http; using Newtonsoft.Json; using SqlSugar.Extensions; namespace CoreCms.Net.Services { /// /// 物流公司表 接口实现 /// public class CoreCmsLogisticsServices : BaseServices, ICoreCmsLogisticsServices { private readonly ICoreCmsLogisticsRepository _dal; private readonly ICoreCmsSettingServices _settingServices; private readonly IUnitOfWork _unitOfWork; public CoreCmsLogisticsServices(IUnitOfWork unitOfWork, ICoreCmsLogisticsRepository dal, ICoreCmsSettingServices settingServices) { this._dal = dal; _settingServices = settingServices; base.BaseDal = dal; _unitOfWork = unitOfWork; } /// /// 根据物流编码取物流名称等信息 /// /// 物流编码 /// public async Task GetLogiInfo(string logiCode) { var jm = new WebApiCallBack(); var model = await _dal.QueryByClauseAsync(p => p.logiCode == logiCode); jm.status = model != null; jm.data = model; jm.msg = jm.status ? GlobalConstVars.GetDataSuccess : GlobalConstVars.GetDataFailure; return jm; } /// /// 通过接口更新所有快递公司信息 /// public async Task DoUpdateCompany() { var jm = new AdminUiCallBack(); var allConfigs = await _settingServices.GetConfigDictionaries(); var showApiLogisticsVersion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShowApiLogisticsVersion).ObjToInt(1); var showApiAppid = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShowApiAppid); var showApiSecret = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShowApiSecret); var shopMobile = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopMobile); var showApiTimesTamp = DateTime.Now.ToString("yyyyMMddHHmmss"); var maxSize = 1500; var signStr = "maxSize" + maxSize + "showapi_appid" + showApiAppid + "showapi_timestamp" + showApiTimesTamp + showApiSecret; var md5Sign = CommonHelper.Md5For32(signStr).ToLower(); string url; if (showApiLogisticsVersion == 1) { url = "https://route.showapi.com/64-20?expName=&maxSize=1500&page=&showapi_appid=" + showApiAppid + "&showapi_timestamp=" + showApiTimesTamp + "&showapi_sign=" + md5Sign; var result = await url.PostAsync().ReceiveJson(); if (result.showapi_res_code == 0) { if (result.showapi_res_body != null && result.showapi_res_body.ret_code == 0 && result.showapi_res_body.expressList != null && result.showapi_res_body.expressList.Count > 0) { var list = new List(); var systemLogistics = SystemSettingDictionary.GetSystemLogistics(); systemLogistics.ForEach(p => { var logistics = new CoreCmsLogistics(); logistics.logiCode = p.sKey; logistics.logiName = p.sDescription; logistics.imgUrl = ""; logistics.phone = shopMobile; logistics.url = ""; logistics.sort = -1; logistics.isDelete = false; list.Add(logistics); }); var count = 0; result.showapi_res_body.expressList.ForEach(p => { var logistics = new CoreCmsLogistics(); logistics.logiCode = p.simpleName; logistics.logiName = p.expName; logistics.imgUrl = p.imgUrl; logistics.phone = p.phone; logistics.url = p.url; logistics.sort = count * 5; logistics.isDelete = false; list.Add(logistics); count++; }); await _dal.DeleteAsync(p => p.id > 0); var bl = await _dal.InsertAsync(list) > 0; jm.code = bl ? 0 : 1; jm.msg = bl ? "数据刷新成功" : "数据刷新失败"; } else { jm.msg = "接口获取数据失败"; } } else { jm.msg = result.showapi_res_error; } } else { url = "https://route.showapi.com/2650-5?expName=&maxSize=1500&page=&showapi_appid=" + showApiAppid + "&showapi_timestamp=" + showApiTimesTamp + "&showapi_sign=" + md5Sign; var result = await url.PostAsync().ReceiveJson(); if (result.showapi_res_code == 0) { if (result.showapi_res_body != null && result.showapi_res_body.ret_code == 0 && result.showapi_res_body.express_list != null && result.showapi_res_body.express_list.Count > 0) { var list = new List(); var systemLogistics = SystemSettingDictionary.GetSystemLogistics(); systemLogistics.ForEach(p => { var logistics = new CoreCmsLogistics(); logistics.logiCode = p.sKey; logistics.logiName = p.sDescription; logistics.imgUrl = ""; logistics.phone = shopMobile; logistics.url = ""; logistics.sort = -1; logistics.isDelete = false; list.Add(logistics); }); var count = 0; result.showapi_res_body.express_list.ForEach(p => { var logistics = new CoreCmsLogistics(); logistics.logiCode = p.com; logistics.logiName = p.exp_name; logistics.imgUrl = p.img_url; logistics.phone = p.phone; logistics.url = p.url; logistics.sort = count * 5; logistics.isDelete = false; list.Add(logistics); count++; }); await _dal.DeleteAsync(p => p.id > 0); var bl = await _dal.InsertAsync(list) > 0; jm.code = bl ? 0 : 1; jm.msg = bl ? "数据刷新成功" : "数据刷新失败"; } else { jm.msg = "接口获取数据失败"; } } else { jm.msg = result.showapi_res_error; } } return jm; } /// /// 通过接口获取快递信息 /// /// 来源 /// 编号 /// 手机号码 /// public async Task ExpressPoll(string com, string number, string phone) { var jm = new WebApiCallBack(); if (string.IsNullOrEmpty(com)) { jm.msg = "请提交来源"; return jm; } else if (string.IsNullOrEmpty(number)) { jm.msg = "请提交编号"; return jm; } else if (string.IsNullOrEmpty(phone)) { jm.msg = "请提交手机号码"; return jm; } var allConfigs = await _settingServices.GetConfigDictionaries(); var showApiLogisticsVersion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShowApiLogisticsVersion).ObjToInt(1); var showApiAppid = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShowApiAppid); var showApiSecret = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShowApiSecret); var showApiTimesTamp = DateTime.Now.ToString("yyyyMMddHHmmss"); var signStr = "com" + com + "nu" + number + "phone" + phone + "showapi_appid" + showApiAppid + "showapi_timestamp" + showApiTimesTamp + showApiSecret; var md5Sign = CommonHelper.Md5For32(signStr).ToLower(); string url; if (showApiLogisticsVersion == 1) { url = "https://route.showapi.com/64-19?com=" + com + "&nu=" + number + "&phone=" + phone + "&showapi_appid=" + showApiAppid + "&showapi_timestamp=" + showApiTimesTamp + "&showapi_sign=" + md5Sign; var result = await url.PostAsync().ReceiveJson(); if (result.showapi_res_code != 0) { jm.status = false; jm.msg = result.showapi_res_error; } else { jm = GetLogiInfo(1, result.showapi_res_code, result.showapi_res_body); } } else { url = "https://route.showapi.com/2650-3?com=" + com + "&nu=" + number + "&phone=" + phone + "&showapi_appid=" + showApiAppid + "&showapi_timestamp=" + showApiTimesTamp + "&showapi_sign=" + md5Sign; var result = await url.PostAsync().ReceiveJson(); if (result.showapi_res_code != 0) { jm.status = false; jm.msg = result.showapi_res_error; } else { jm = GetLogiInfo(1, result.showapi_res_code, result.showapi_res_body); } } return jm; } //根据状态反馈提示信息 private WebApiCallBack GetLogiInfo(int version, int retCode, object showapiResBody) { var jm = new WebApiCallBack(); if (retCode == 0) { jm.status = true; jm.msg = "查询成功"; jm.data = showapiResBody; } else if (retCode == 1) { jm.status = false; jm.msg = "输入参数错误"; jm.data = showapiResBody; } else if (retCode == 2) { jm.status = false; jm.msg = "查不到物流信息"; jm.data = showapiResBody; } else if (retCode == 3) { jm.status = false; jm.msg = "单号不符合规则"; jm.data = showapiResBody; } else if (retCode == 4) { jm.status = false; jm.msg = "快递公司编码不符合规则"; jm.data = showapiResBody; } else if (retCode == 5) { jm.status = false; jm.msg = "快递查询渠道异常"; jm.data = showapiResBody; } else if (retCode == 6) { jm.status = false; jm.msg = " auto时未查到单号对应的快递公司,请指定快递公司编码"; jm.data = showapiResBody; } else if (retCode == 7) { jm.status = false; jm.msg = "单号与手机号不匹配"; jm.data = showapiResBody; } else if (version == 2) { jm.status = true; switch (retCode) { //101 揽件 //102 在途中 //103 派送中 //104 已签收(完结状态) //105 用户拒签 //106 疑难件 //107 无效单(完结状态) //108 超时单 //109 签收失败 //110 退回 //111 转投 //112 待签 //113 邮件回收 case 101: jm.msg = "揽件"; break; case 102: jm.msg = "在途中"; break; case 103: jm.msg = "派送中"; break; case 104: jm.msg = "已签收(完结状态)"; break; case 105: jm.msg = "用户拒签"; break; case 106: jm.msg = "疑难件"; break; case 107: jm.msg = "无效单(完结状态)"; break; case 108: jm.msg = "超时单"; break; case 109: jm.msg = "签收失败"; break; case 110: jm.msg = "退回"; break; case 111: jm.msg = "转投"; break; case 112: jm.msg = "待签"; break; case 113: jm.msg = "邮件回收"; break; default: jm.status = false; jm.msg = "未知状态"; break; } jm.data = showapiResBody; } else { jm.status = false; jm.msg = "接口调用失败"; jm.data = showapiResBody; } return jm; } } }