首页

Npoi动态导入

  public mResult Import(HttpPostedFileBase file, string tabName)
        {
            mResult ret = new mResult();
            ret.Code = "200";
            ret.Msg = "操作成功!";
            try
            {
                var strPath = @"~/up/" + DateTime.Now.ToString("yyyyMMdd");
                if (!Directory.Exists(strPath))
                {
                    //需要注意的是,需要对这个物理路径有足够的权限,否则会报错 
                    DirectoryInfo di = Directory.CreateDirectory(strPath);
                }
                var thisFileName = Guid.NewGuid().ToString().Replace("-", "") + "." + file.FileName.Split('.').LastOrDefault();
                var thisFilePath = Server.MapPath(strPath) + thisFileName;
                file.SaveAs(thisFilePath);
                using (var fileStream = System.IO.File.Open(thisFilePath, FileMode.Open))
                {
                    //把xls文件中的数据写入wk中,根据不同的文件格式实例化不同的对象去操作文件
                    IWorkbook wk;
                    string filePathChoice = thisFileName.Substring(thisFileName.LastIndexOf('.') + 1);
                    if (filePathChoice.Equals("xlsx"))
                    {
                        wk = new XSSFWorkbook(fileStream);
                    }
                    else
                    {
                        wk = new HSSFWorkbook(fileStream);
                    }
                    var sheet = wk.GetSheetAt(0); //读取当前表数据,直接去第一个Sheet
                                                  //判断是否有除去标题行的一行数据
                    if (sheet.LastRowNum < 1)
                    {
                        ret.Msg = "无数据";
                    }

                    AssemblyResult assInfo = ah.GetClassInfo("DataCenters.DAL.dll", "DataCenters.DAL." + tabName);

                    List<object> list = new List<object>();
                    // 去掉第一行
                    for (var j = 3; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
                    {
                        var row = sheet.GetRow(j); //读取当前行数据
                        var titles = sheet.GetRow(2);//标题列字段
                        if (row != null)
                        {
                            var obj = Activator.CreateInstance(assInfo.ClassType);
                            for (var k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数
                            {
                                var title = titles.GetCell(k).ToString().ToLower().Trim();//对应字段
                                var cell = row.GetCell(k); //当前表格
                                var field = assInfo.Properties.Any(w => w.ToLower().Trim() == title) ? assInfo.Properties.FirstOrDefault(w => w.ToLower().Trim() == title) : "";
                                var fieldType = assInfo.PropertyType[assInfo.Properties.IndexOf(field)];
                                if (field != "" && cell != null)
                                {
                                    Debug.WriteLine("field", field);
                                    Debug.WriteLine("fieldType", fieldType);

                                    if (fieldType.ToLower().Contains("decimal"))
                                    {
                                        obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDecimal(cell.ToString()));
                                    }
                                    else if (fieldType.ToLower().Contains("int16"))
                                    {
                                        obj.GetType().GetProperty(field).SetValue(obj, Convert.ToInt16(cell.ToString()));
                                    }
                                    else if (fieldType.ToLower().Contains("int32"))
                                    {
                                        obj.GetType().GetProperty(field).SetValue(obj, Convert.ToInt32(cell.ToString()));
                                    }
                                    else if (fieldType.ToLower().Contains("double"))
                                    {
                                        obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDouble(cell.ToString()));
                                    }
                                    else if (fieldType.ToLower().Contains("datetime"))
                                    {
                                        obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDateTime(cell.ToString()));
                                    }
                                    else
                                    {
                                        obj.GetType().GetProperty(field).SetValue(obj, cell.ToString());
                                    }
                                }
                            }
                            list.Add(obj);
                        }
                    }
                    ret.Data = list;
                }
            }
            catch (Exception e)
            {
                ret.Code = "500";
                ret.Msg = e.Message;
                throw;
            }
            return ret;
        }

        public class mResult
        {
            public string Code { get; set; }
            public string Msg { get; set; }
            public object Data { get; set; }
        }

Css流动边框效果

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<div></div>
	</body>
	<style>
		div{
  width: 190px;
  height: 190px;
  background: #00ff00;
  position: relative;
background-image: linear-gradient(to right, transparent, rgba(31, 149, 151, 0.43), transparent);
}
 
div:before,
div:after{
  position: absolute;
  content: "";
  left: -5px;
  right: -5px;
  top: -5px;
  bottom: -5px;
  border: 5px solid #FF33FF;
}
div:before{
  animation: move 5s linear infinite;
}
div:after{
  border-color: #FF33FF;
  animation: move 5s linear infinite normal -2.5s;
}
 
@keyframes move{
  0%,100%{
    clip: rect(0,200px,5px,0);
  }
  25%{
    clip: rect(0,200px,200px,195px);
  }
  50%{
    border-color: #00ff0088;
    clip: rect(195px,200px,200px,0);
  }
  75%{
    clip: rect(0,5px,200px,0px);
  }
}
	</style>
</html>

Css点闪烁

.point,.point::before,.point::after{position: absolute;width: 12px; height: 12px; border-radius: 50%;content: ''; }
        .point::before{animation: scale 2s infinite; }
        .point::after{animation: scale2 2s infinite; }
        @keyframes scale{0%{ transform: scale(1); opacity:.9}100%{ transform: scale(6); opacity: 0;}}
        @keyframes scale2{0%{ transform: scale(1);opacity:.9;}100%{ transform: scale(12);opacity:0;}}
        

        .point,.point::before,.point::after{
        /* 设置颜色 */
        background-color: rgba(241, 34, 30, .9);}

CentOS7 安装oracle客户端

1、本机环境CentOS7 64  

2、下载oracle客户端包

进入主页面:

32位:

https://www.oracle.com/database/technologies/instant-client/linux-x86-32-downloads.html

64位:

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

  下载当前的最新版本18.03,只下载下面两个文件即可

  oracle-instantclient18.3-basic-18.3.0.0.0-1.i386.rpm
  oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.i386.rpm

3、rpm方式安装包

  将上述下载文件放到centos中某个目录下,我的放在/home/ftpuser/下

[root@localhost ftpuser]# pwd
/home/ftpuser

# ls -l 总用量 54076 -rw-r–r–. 1 ftpuser ftpuser 54650380 1月 3 10:09 oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm -rw-r–r–. 1 ftpuser ftpuser 717272 1月 3 10:09 oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.x86_64.rpm

进入目录,使用命令安装:
  rpm -ivh oracle-instantclient18.3-basic-18.3.0.0.0-1.i386.rpm
  rpm -ivh  oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.i386.rpm
rpm简单命令复习
  1.安装软件:执行rpm -ivh rpm包名 
  2.查询软件包的详细信息:执行rpm -qpi rpm包名

4、环境变量配置

  打开用户专属配置文件(个人理解相当于windows系统环境变量的用户变量,只针对当前用户生效):vi ~/.bashrc

  在最后增加如下几行(注意路径是否正确):  

[root@localhost ~]# vi ~/.bashrc

PATH=$PATH:$HOME/bin

export PATH
export ORACLE_VERSION=18.3
export ORACLE_HOME=/usr/lib/oracle/$ORACLE_VERSION/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#export NLS_LANG="Simplified Chinese_china".ZHS16GBK
export PATH=$PATH:$ORACLE_HOME/bin

  按下esc输入 :wq 保存退出

5、配置TNS

  复制oracle服务端的tnsnames.ora文件,放到/usr/lib/oracle/18.3/client64/network/admin目录下。

6、测试

[root@localhost 18.3]# sqlplus test/ok123@PRODUCT_DB

SQL*Plus: Release 18.0.0.0.0 - Production on Mon Apr 8 16:33:32 2019
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Last Successful login time: Mon Apr 08 2019 13:33:20 +08:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

AutoMapHelper帮助类

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

namespace Common
{
    public static class AutoMapHelper
    {

        /// <summary>
        ///  类型映射,默认字段名字一一对应
        /// </summary>
        /// <typeparam name="TDestination"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static TDestination AutoMapTo<TDestination>(this object obj)
        {
            if (obj == null) return default(TDestination);
            var config = new AutoMapper.MapperConfiguration(cfg => cfg.CreateMap(obj.GetType(), typeof(TDestination)));
            return config.CreateMapper().Map<TDestination>(obj);
        }

        /// <summary>
        /// 类型映射,可指定映射字段的配置信息
        /// </summary>
        /// <typeparam name="TSource">源数据:要被转化的实体对象</typeparam>
        /// <typeparam name="TDestination">目标数据:转换后的实体对象</typeparam>
        /// <param name="source">任何引用类型对象</param>
        /// <param name="cfgExp">可为null,则自动一一映射</param>
        /// <returns></returns>
        public static TDestination AutoMapTo<TSource, TDestination>(this TSource source, Action<AutoMapper.IMapperConfigurationExpression> cfgExp)
            where TDestination : class
            where TSource : class
        {
            if (source == null) return default(TDestination);
            var config = new AutoMapper.MapperConfiguration(cfgExp != null ? cfgExp : cfg => cfg.CreateMap<TSource, TDestination>());
            var mapper = config.CreateMapper();
            return mapper.Map<TDestination>(source);
        }



        /// <summary>
        /// 类型映射,默认字段名字一一对应
        /// </summary>
        /// <typeparam name="TSource">源数据:要被转化的实体对象</typeparam>
        /// <typeparam name="TDestination">目标数据:转换后的实体对象</typeparam>
        /// <param name="source">任何引用类型对象</param>
        /// <returns>转化之后的实体</returns>
        public static TDestination AutoMapTo<TSource, TDestination>(this TSource source)
            where TDestination : class
            where TSource : class
        {
            if (source == null) return default(TDestination);
            var config = new AutoMapper.MapperConfiguration(cfg => cfg.CreateMap<TSource, TDestination>());
            var mapper = config.CreateMapper();
            return mapper.Map<TDestination>(source);
        }


        /// <summary>
        /// 集合列表类型映射,默认字段名字一一对应
        /// </summary>
        /// <typeparam name="TDestination">转化之后的实体对象,可以理解为viewmodel</typeparam>
        /// <typeparam name="TSource">要被转化的实体对象,Entity</typeparam>
        /// <param name="source">通过泛型指定的这个扩展方法的类型,理论任何引用类型</param>
        /// <returns>转化之后的实体列表</returns>
        public static IEnumerable<TDestination> AutoMapTo<TSource, TDestination>(this IEnumerable<TSource> source)
            where TDestination : class
            where TSource : class
        {
            if (source == null) return new List<TDestination>();
            var config = new AutoMapper.MapperConfiguration(cfg => cfg.CreateMap<TSource, TDestination>());
            var mapper = config.CreateMapper();
            return mapper.Map<List<TDestination>>(source);
        }



    }
}