开发小技巧(日常记录)

 日常的开发笔记----定期随手更新

C#开发:

TimestampHelper时间戳转换工具

using System;
using System.Collections.Generic;
using System.Text;

namespace IC.HT.Model.Lab.Json
{
    /// <summary>
    /// 日期类型转换工具
    /// </summary>
    public class TimestampHelper
    {
        /// <summary>
        /// Unix时间戳转为C#格式时间
        /// </summary>
        /// <param name="timeStamp">Unix时间戳格式,例如:1482115779, 或long类型</param>
        /// <returns>C#格式时间</returns>
        public static DateTime GetDateTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        }

        /// <summary>
        /// 时间戳转为C#格式时间
        /// </summary>
        /// <param name="timeStamp">Unix时间戳格式</param>
        /// <returns>C#格式时间</returns>
        public static DateTime GetDateTime(long timeStamp)
        {
            DateTime time = new DateTime();
            try
            {
                DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                long lTime = long.Parse(timeStamp + "0000000");
                TimeSpan toNow = new TimeSpan(lTime);
                time = dtStart.Add(toNow);
            }
            catch
            {
                time = DateTime.Now.AddDays(-30);
            }
            return time;
        }

        /// <summary>
        /// DateTime时间格式转换为Unix时间戳格式
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static long ToLong(System.DateTime time)
        {
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
            return (long)(time - startTime).TotalSeconds;
        }

        /// <summary>
        /// 获取时间戳
        /// </summary>
        /// <returns></returns>
        public static string GetTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }

    }
}

利用反射获取自定义标签,根据自定义标签判断计算

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;

namespace Interface.Core.Models.RpnModel.FM
{
    public class ItemModel 
    {
        [EnitityMapping(ColumnName = "门店编码")]
        public string Code { get; set; }

        [EnitityMapping(ColumnName = "日期")]
        public DateTime CurDate { get; set; }

        [EnitityMapping(ColumnName = "店内")]
        public int InStore { get; set; }

        [EnitityMapping(ColumnName = "星**")]
        public int MOD { get; set; }

        [EnitityMapping(ColumnName = "o*")]
        public int MOP { get; set; }

        [EnitityMapping(ColumnName = "吧台小食", ColumuType = "Item")]
        public int BarFood { get; set; }

        [EnitityMapping(ColumnName = "**咖啡", ColumuType = "Item")]
        public int BlackEagle { get; set; }

        [EnitityMapping(ColumnName = "**饮料", ColumuType = "Item")]
        public int Blended { get; set; }

        [EnitityMapping(ColumnName = "**咖啡", ColumuType = "Item")]
        public int BrewedMethod { get; set; }

        [EnitityMapping(ColumnName = "茶", ColumuType = "Item")]
        public int BrewedTea { get; set; }

        [EnitityMapping(ColumnName = "**咖啡", ColumuType = "Item")]
        public int Espresso { get; set; }

        [EnitityMapping(ColumnName = "糕点", ColumuType = "Item")]
        public int Food { get; set; }

        [EnitityMapping(ColumnName = "零售商品", ColumuType = "Item")]
        public int Merchandise { get; set; }

        [EnitityMapping(ColumnName = "**特调", ColumuType = "Item")]
        public int Mixology { get; set; }

        [EnitityMapping(ColumnName = "加类", ColumuType = "Item")]
        public int Modifier { get; set; }

        [EnitityMapping(ColumnName = "其他零售商品", ColumuType = "Item")]
        public int OtherRetail { get; set; }

        [EnitityMapping(ColumnName = "包装食品", ColumuType = "Item")]
        public int PackagedFood { get; set; }

        [EnitityMapping(ColumnName = "其他饮料", ColumuType = "Item")]
        public int RTD { get; set; }

        [EnitityMapping(ColumnName = "加热食品", ColumuType = "Item")]
        public int WarmFood { get; set; }

        [EnitityMapping(ColumnName = "**咖啡豆", ColumuType = "Item")]
        public int WholeBean { get; set; }

        #region 参考字段
        /// <summary>
        /// ADT 
        /// </summary>
        public int ADT => InStore + MOD + MOP;

        / <summary>
        / IPT 全天Item总和/全天adt
        / </summary>
        //public double IPT => Math.Round((double)(BarFood + BlackEagle + Blended + BrewedMethod + BrewedTea + Espresso + Food + Merchandise + Mixology + Modifier + OtherRetail + PackagedFood + RTD + WarmFood + WholeBean) / (double)this.ADT, 8, MidpointRounding.AwayFromZero);

        /// <summary>
        /// IPT 全天Item总和/全天adt (别问我问什么不用上面的代码,因为闲)
        /// </summary>
        public double IPT
        {
            get
            {
                Type objType = this.GetType();
                int itemTotal = 0;
                foreach (PropertyInfo propInfo in objType.GetProperties())
                {
                    object[] objAttrs = propInfo.GetCustomAttributes(typeof(EnitityMappingAttribute), true);
                    if (objAttrs.Length > 0)
                    {
                        EnitityMappingAttribute attr = objAttrs[0] as EnitityMappingAttribute;
                        if (attr != null && attr.ColumuType == "Item")
                        {
                            itemTotal += (int)propInfo.GetValue(this, null);
                        }
                    }
                }
                return Math.Round((double)(itemTotal) / (double)this.ADT, 8, MidpointRounding.AwayFromZero);
            }
        }
        #endregion
    }

    /// <summary>
    /// 自定义特性 属性或者类可用  支持继承
    /// </summary>
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Class, Inherited = true)]
    public class EnitityMappingAttribute : Attribute
    {
        private string tableName;
        /// <summary>
        /// 实体实际对应的表名
        /// </summary>
        public string TableName
        {
            get { return tableName; }
            set { tableName = value; }
        }

        private string columnName;
        /// <summary>
        /// 中文列名
        /// </summary>
        public string ColumnName
        {
            get { return columnName; }
            set { columnName = value; }
        }

        private string columuType;

        /// <summary>
        /// 列类型
        /// </summary>
        public string ColumuType
        {
            get { return columuType; }
            set { columuType = value; }
        }
    }
}

各类时间字符串转换:

    if (string.IsNullOrEmpty(id)) throw new ArgumentNullException(nameof(id));
            DateTime res;
            if (DateTime.TryParseExact(id, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out res))

压缩文件


                            #region 压缩图片
                            try
                            {
                                //图片原路径
                                Mat mat = Cv2.ImRead(imgF.FullName, ImreadModes.Color);

                                //图片新路径
                                var newImg = imgF.FullName.Replace(".JPG", "_ed.JPG");
                                Cv2.ImWrite(newImg, mat, new ImageEncodingParam(ImwriteFlags.JpegQuality, 10));//100代表图片质量 范围是0-100 默认95

                                FileStream file = System.IO.File.Open(newImg, FileMode.Open); //打开修改好的图片
                                byte[] buffer = new byte[file.Length];//创建图片缓存
                                file.Read(buffer, 0, (int)file.Length);//将图片读入缓存
                                buffer[0x0D] = 1; //设置图片单位密度
                                                  //设置水平分辨率 0x258转10进制是 600
                                buffer[0x0E] = 0x2;
                                buffer[0x0F] = 0X58;
                                //设置垂直分辨率
                                buffer[0x10] = 0x2;
                                buffer[0x11] = 0x58;
                                //缓存重新指向图片
                                file.Seek(0, SeekOrigin.Begin);
                                //写入图片
                                file.Write(buffer, 0, (int)file.Length);

                                file.Close();
                            }
                            catch (Exception ex)
                            {
                                break;
                            }


                            #endregion

获取JPG 文件的详细信息

        /// <summary>
        /// 获取图片中的GPS坐标点
        /// </summary>
        /// <param name="p_图片路径">图片路径</param>
        /// <param name="p_图片路径">0x0002:经纬度,0x006:拍摄高度</param>
        /// <returns>返回坐标【纬度+经度】用"+"分割 取数组中第0和1个位置的值</returns>
        public static String fnGPS经纬高(String p_图片路径, int id_下标)
        {
            String s_GPS经纬高 = "";
            //载入图片
            Image objImage = Image.FromFile(p_图片路径);
            //取得所有的属性(以PropertyId做排序)
            var propertyItems = objImage.PropertyItems.OrderBy(x => x.Id);
            //暂定纬度N(北纬)
            char chrGPSLatitudeRef = 'N';
            //暂定经度为E(东经)
            char chrGPSLongitudeRef = 'E';
            foreach (PropertyItem objItem in propertyItems)
            {
                //只取Id范围为0x0000到0x001e
                if (objItem.Id >= 0x0000 && objItem.Id <= 0x001e)
                {
                    //对下标赋值
                    objItem.Id = id_下标;
                    switch (objItem.Id)
                    {
                        case 0x0000:
                            var query = from tmpb in objItem.Value select tmpb.ToString();
                            string sreVersion = string.Join(".", query.ToArray());
                            break;
                        case 0x0001:
                            chrGPSLatitudeRef = BitConverter.ToChar(objItem.Value, 0);
                            break;
                        case 0x0002:
                            if (objItem.Value.Length == 24)
                            {
                                //degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)
                                double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
                                //minutes(将byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)
                                double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
                                //seconds(将byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的uint)
                                double s = BitConverter.ToUInt32(objItem.Value, 16) * 1.0d / BitConverter.ToUInt32(objItem.Value, 20);
                                //计算经纬度数值, 如果是南纬, 要乘上(-1)
                                double dblGPSLatitude = (((s / 60 + m) / 60) + d) * (chrGPSLatitudeRef.Equals('N') ? 1 : -1);
                                string strLatitude = string.Format("{0:#} deg {1:#}' {2:#.00}\" {3}", d
                                , m, s, chrGPSLatitudeRef);
                                //纬度+经度
                                s_GPS经纬高 += dblGPSLatitude + "+";
                            }
                            break;
                        case 0x0003:
                            //透过BitConverter, 将Value转成Char('E' / 'W')
                            //此值在后续的Longitude计算上会用到
                            chrGPSLongitudeRef = BitConverter.ToChar(objItem.Value, 0);
                            break;
                        case 0x0004:
                            if (objItem.Value.Length == 24)
                            {
                                //degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)
                                double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
                                //minutes(将byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)
                                double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
                                //seconds(将byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的uint)
                                double s = BitConverter.ToUInt32(objItem.Value, 16) * 1.0d / BitConverter.ToUInt32(objItem.Value, 20);
                                //计算精度的数值, 如果是西经, 要乘上(-1)
                                double dblGPSLongitude = (((s / 60 + m) / 60) + d) * (chrGPSLongitudeRef.Equals('E') ? 1 : -1);
                            }
                            break;
                        case 0x0005:
                            string strAltitude = BitConverter.ToBoolean(objItem.Value, 0) ? "0" : "1";
                            break;
                        case 0x0006:
                            if (objItem.Value.Length == 8)
                            {
                                //将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint
                                double dblAltitude = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);

                                //纬度+经度+拍摄高度
                                s_GPS经纬高 += dblAltitude.ToString();
                            }
                            break;
                    }
                }
            }
            return s_GPS经纬高;
        }

下载文件:

 public class Web
    {
        public static bool Download(string url, string destDir, string destFileName)
        {
            if (destFileName == null)
                destFileName = url.Split(Path.DirectorySeparatorChar).Last();

            Directory.CreateDirectory(destDir);

            string relativeFilePath = Path.Combine(destDir, destFileName);

            if (File.Exists(relativeFilePath))
            {
                return false;
            }

            using (WebClient webClient = new WebClient())
            {
                webClient.DownloadFile(url, relativeFilePath); 
                return true;
            }
        }

        public static bool Download(string url, string relativeFilePath)
        {
            if (File.Exists(relativeFilePath))
            {
                return false;
            }

            using (WebClient webClient = new WebClient())
            {
                webClient.DownloadFile(url, relativeFilePath);
                return true;
            }
        }

        /// <summary>
       /// 删除非空文件夹
       /// </summary>
       /// <param name="path">要删除的文件夹目录</param>
        void DeleteDirectory(string path)
        {
            DirectoryInfo dir = new DirectoryInfo(path); 
            if (dir.Exists)
            {
                DirectoryInfo[] childs = dir.GetDirectories();
                foreach (DirectoryInfo child in childs)
                {
                    child.Delete(true);
                }
                dir.Delete(true);
            }
        }
 
   /// 3 递归方法:(这是删除文件的方法)
private staticv oid DeleteDirectory(File tmpFile) {
        if (!tmpFile.exists()) {
             System.out.println("file is not exist!");
            return;
         }
        if (tmpFile.isDirectory()) {
             File[] fileList = tmpFile.listFiles();
            for (int i =0; i < fileList.length; i++) {
                if (fileList[i].isDirectory()) {
                     DeleteDirectorys(fileList[i]);s
                 }  
           }
     }
}
    }

获取工作区链路径

  1. string str1 =Process.GetCurrentProcess().MainModule.FileName;    //可获得当前执行的exe的文件名。  

  2. string str2=Environment.CurrentDirectory;          //获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。

  3. //备注 按照定义,如果该进程在本地或网络驱动器的根目录中启动,则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:/”)。

  4. 如果该进程在子目录中启动,则此属性的值为不带尾部反斜杠的驱动器和子目录路径(如“C:/mySubDirectory”)。

  5. string str3=Directory.GetCurrentDirectory();                      //获取应用程序的当前工作目录。 ---------常用-----

  6. string str4=AppDomain.CurrentDomain.BaseDirectory;    //获取基目录,它由程序集冲突解决程序用来探测程序集。

  7. string str5=Application.StartupPath;                  

  8. //获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。(如:D:/project/集团客户短信服务端/bin/Debug)

  9. string str6=Application.ExecutablePath;         //获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。

  10. string str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;  //获取或设置包含该应用程序的目录的名称。

获取分组后的第一条数据

                    var onlyCarList = saigeCar.GroupBy(gg => gg.CarNo).Select(groups => new { FirstOrDefault = groups.FirstOrDefault() });
 

获取JSON文件

 /// <summary>
        /// 读取JSON文件
        /// </summary>
        /// <param name="key">JSON文件中的key值</param>
        /// <returns>JSON文件中的value值</returns>
        public static string Readjson(string key, string jsonUrl)
        {
            string jsonfile = $@"D:\A_WeaversysHard\IntelligentCommunity\IC.HT\IC.HT.Web\wwwroot\json\{jsonUrl}.json";//JSON文件路径

            using (System.IO.StreamReader file = System.IO.File.OpenText(jsonfile))
            {
                using (JsonTextReader reader = new JsonTextReader(file))
                {
                    JObject o = (JObject)JToken.ReadFrom(reader);

                    var value = o[key].ToString();
                    return value;
                }
            }
        }

new list(无下标)

string[] props = { "committeeId", "organName", "OrganId", "FaceType" }; 

获取时间

//获取当前月份的第一天
var sDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

//获取当前月份的最后一天最后59秒
var eDate = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date.AddMonths(1).AddSeconds(-1); ;

 automapper多类映射规则:

     return new MapperConfiguration(cfg =>
                        {
                            cfg.CreateMap<TIotSensingDevice, TIotSensingDeviceDto>();
                            cfg.CreateMap<TJingxunyunDataNumber, TJingxunyunDataNumberDto>();
                            cfg.CreateMap<TJingxunyunEquipmentDataType, TJingxunyunEquipmentDataTypeDto>();
                            cfg.CreateMap<TJinxunyunEquipment, TJinxunyunEquipmentDto>();

                            cfg.CreateMap<EquipDataNumber, EquipDataNumberDto>()
                            .ForMember(s => s.jingxunyunDataNumberDto, opt => { opt.MapFrom(s => s.jingxunyunDataNumber); })
                            .ForMember(s => s.iotSensingDeviceDto, opt => { opt.MapFrom(s => s.iotSensingDevice); })
                            .ForMember(s => s.jingxunyunEquipmentDataTypeDto, opt => { opt.MapFrom(s => s.jingxunyunEquipmentDataType); })
                            .ForMember(s => s.jinxunyunEquipmentDto, opt => { opt.MapFrom(s => s.jinxunyunEquipment); });
                        });

表达式JOIN

var list = _context.StPrepareEquip.Join(_context.StStoreHouse, s => s.StoreHouseId, sh => sh.StoreHouseId, (s, sh) => new StPrepareEquipDto
                {
                    PrepareEquipId = s.PrepareEquipId,
                    StoreHouseId = s.StoreHouseId,
                    EquipType = s.EquipType,
                    EquipModel = s.EquipModel,
                    EquipSupplier = s.EquipSupplier,
                    SupplierId = s.SupplierId,
                    Quantity = s.Quantity,
                    BuyDate = s.BuyDate.Value,
                    OutRepairDate = s.OutRepairDate.Value.ToString("yyyy-MM-dd"),
                    ReportDate = s.ReportDate,
                    IsDeleted = s.IsDeleted,
                    Store = sh.Store,
                    OrganId = sh.OrganId
                }).Where();

前台JS:

获取经纬度数组(多边形)的中心点:

function getCenter(pointArray) {
        var sortedLongitudeArray = pointArray.map(item => item.lng).sort();//首先对经度进行排序,红色部分是array中经度的名称
        var sortedLatitudeArray = pointArray.map(item => item.lat).sort();//对纬度进行排序,红色部分是array中纬度的名称
        var centerLongitude = ((parseFloat(sortedLongitudeArray[0]) + parseFloat(sortedLongitudeArray[sortedLongitudeArray.length - 1])) / 2).toFixed(4);
        const centerLatitude = ((parseFloat(sortedLatitudeArray[0]) + parseFloat(sortedLatitudeArray[sortedLatitudeArray.length - 1])) / 2).toFixed(4);
        return [centerLongitude, centerLatitude];
    }

获取经纬度(折线)的中心点

   function calculateCenter(lnglatarr) {
                        var total = lnglatarr.length;
                        var X = 0, Y = 0, Z = 0;
                        $.each(lnglatarr, function (index, lnglat) {
                            var lng = lnglat.lng * Math.PI / 180;
                            var lat = lnglat.lat * Math.PI / 180;
                            var x, y, z;
                            x = Math.cos(lat) * Math.cos(lng);
                            y = Math.cos(lat) * Math.sin(lng);
                            z = Math.sin(lat);
                            X += x;
                            Y += y;
                            Z += z;
                        });

                        X = X / total;
                        Y = Y / total;
                        Z = Z / total;

                        var Lng = Math.atan2(Y, X);
                        var Hyp = Math.sqrt(X * X + Y * Y);
                        var Lat = Math.atan2(Z, Hyp);

                        return new AMap.LngLat(Lng * 180 / Math.PI, Lat * 180 / Math.PI);
                    };

将js中的数据保存为JSON格式。

具体实现如下:

var content = JSON.stringify(Interpretation);
var eleLink = document.createElement('a');
eleLink.download = "InterpretationLithology.json";
eleLink.style.display = 'none';
// 字符内容转变成blob地址
var blob = new Blob([content]);
eleLink.href = URL.createObjectURL(blob);
// 触发点击
document.body.appendChild(eleLink);
eleLink.click();
// 然后移除
document.body.removeChild(eleLink);

更好用的视频插件:

萤石云

获取时间:

(new Date()).Format('yyyy-MM-dd hh:mm:ss.S') 

 JS  Format格式:

 Date.prototype.Format = function (fmt) { //author: meizz
    var o = {
      "M+": this.getMonth() + 1, //月份
      "d+": this.getDate(), //日
      "h+": this.getHours(), //小时
      "m+": this.getMinutes(), //分
      "s+": this.getSeconds(), //秒
      "q+": Math.floor((this.getMonth() + 3) / 3), //季度
      "S": this.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
      if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
  };

滑动轨道 :

        body::-webkit-scrollbar, .CuringStrength::-webkit-scrollbar { /*滑轨优化JS*/
            width: 8px; /*高å½åˆ†åˆ«å¯¹åº”横竖滚动æ¡çš„尺寸*/
            height: 8px;
            scrollbar-arrow-color: red;
        }

        body::-webkit-scrollbar-thumb, .CuringStrength::-webkit-scrollbar-thumb { /*滚动æ¡é‡Œé¢å°æ–¹å—*/
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
            background: rgba(0,0,0,0.2);
            scrollbar-arrow-color: red;
        }

        body::-webkit-scrollbar-track, .CuringStrength::-webkit-scrollbar-track { /*滚动æ¡é‡Œé¢è½¨é“*/
            -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
            border-radius: 0;
            background: rgba(0,0,0,0.1);
        }

SQL SERVER

多列合并为一列(行转列):

Select STUFF((select ' '+ Value from [EPAUnit].[dbo].[Gg_02_DictionaryInfo]    where IsDeleted =0 group by Value FOR XML PATH('')),1,1,'') 

在清洗数据的时候,经常会遇到去重的需求,特地在这里记录一下。

查询重复的数据

select * , row_number() over (partition by 字段 order by  字段) as rowid from 表名
where  字段 in (select  字段 from 表名
group by  字段 having count(字段)>1)

查询MySQL 也适用

删除重复的数据,保留一条

delete t from (select * , row_number() over (partition by 字段 order by  字段) as rowid from 表名
where  字段 in (select  字段 from 表名
group by  字段 having count(字段)>1)) t where t.rowid != 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值