精华内容
下载资源
问答
  • 爬取企业信息-企业信用信息查询系统-天眼查爬虫

    万次阅读 多人点赞 2018-02-27 17:31:17
    如果不会用git可以在这里下载 代码和数据 注意,上面的项目可以爬取天眼查全部企业数据和 行业TOP100的企业信息,clone下来按wiki指导就能正常运行,由于会定时更新,保证可用。 其他想要商业数据可能要抱歉了,...

    时隔2年多,偶然看到自己的这篇文章,看到下面好多求数据的同学,实在抱歉,一方面之前数据已经丢失,一方面个人博客许久未关注,故没有及时答复。

    现在重新发送数据给各位同学,仅作学习使用,需要数据做美赛等数学建模的可以加Q群231436610。

    想要完整代码 具体看我的项目 https://gitee.com/yzlit/tianyancha 天眼查爬虫程序,如果你需要更多数据,请帮我在Github点个star就行,可以免费发送行业TOP100企业信息数据和超过3万条的企业数据。

    如果不会用git可以在这里下载 代码和数据

    注意,上面的项目可以爬取天眼查全部企业数据和 行业TOP100的企业信息,clone下来按wiki指导就能正常运行,由于会定时更新,保证可用。

    其他想要商业数据可能要抱歉了,一是数据量肯定达不到你们的要求,另一个本人只是给学习做数据分析的同学使用,。

    好,话不多说,直接上代码.

    爬取效果如图

    先看普通的请求代码,这里应该是爬虫都会用的通用模块,

    # -*- coding: utf-8 -*-
    import requests
    import time
    
    cursor = 0
    get_proxy_url = "http://这里是获取代理IP的网址,具体改refresh_proxy_ip()方法实现刷新代理IP"
    proxy_id = ""
    
    
    # 请求url的html内容
    def get_html(url):
        time.sleep(3)
        print(proxy_id)
        # 代理 IP ,具体刷新获取代理IP需要自己实现下面的refresh_proxy_ip() 函数
        proxy = {
            'http': 'http://'+proxy_id,
            'https': 'https://'+proxy_id
        }
        headers = {
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
            "Accept-Encoding": "gzip, deflate, br",
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Cache-Control": "max-age=0",
            "Connection": "keep-alive",
            "Host": "www.tianyancha.com",
            "Sec-Fetch-Dest": "document",
            "Sec-Fetch-Mode": "navigate",
            "Sec-Fetch-Site": "none",
            "Sec-Fetch-User": "?1",
            "Upgrade-Insecure-Requests": "1",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
        }
        try:
            # response = requests.get(url, headers=headers, proxies=proxy)
            response = requests.get(url,headers=headers, proxies=proxy)
        except BaseException:
            print("异常发生")
            # 这里没有对异常情况作具体处理,只是直接换代理IP 重新请求 就完事昂
            refresh_proxy_ip()
            return get_html(url)
    
        if response.status_code is not 200:
            print("不正常")
            refresh_proxy_ip()
            return get_html(url)
        else:
            return response.text
    
    
    def refresh_proxy_ip():
        global proxy_id
        time.sleep(1)
        proxy_id = requests.get(get_proxy_url).text.replace(" ", "")
        print('代理ip请求异常,更换代理IP:http://' + proxy_id + "/")
    

    然后才是对公司url的html内容进行解析,这个没有技巧,一个一个看html结构,有时候天眼查也会反爬做更新,需要及时修改,2020-09-06生效代码如下

    # -*- coding: utf-8 -*-
    from bs4 import BeautifulSoup
    from mysql import *
    from get_html import *
    
    
    def get_info(url):
        html = get_html(url, 1)
        soup = BeautifulSoup(html, 'html.parser')
        # print(html)
    
        # # 企业logo
        # logdiv = soup.find('div', class_="logo -w100")
        # imgsrc = ""
        # if logdiv is not None:
        #     img = logdiv.find('img', class_="img")
        #     if img is not None:
        #         imgsrc = img.get('data-src')
        #         # print(html)
        # else:
        #     print("此页查找不到公司log logo -w100:", url)
    
        # 企业简介
        div = soup.find('div', id="nav-main-stockNum")
        if div is None:
            print("此页查找不到公司内容nav-main-stockNum:", url)
            # print(html)
            # refresh_proxy_ip()
            # return get_info(url)
        else:
            table = div.find('table', class_="table -striped-col")
            if table is None:
                print("此页查找不到公司内容 table -striped-col:", url)
                # refresh_proxy_ip()
                # return get_info(url)
            else:
                tds = table.find_all('td')
                if len(tds) <= 31:
                    print("估计界面有问题:len(tds) <= 31", url)
                    return True
                compCh = tds[1].get_text()  # 公司全称
                compEn = tds[3].get_text()  # 英文名称
                sscym = tds[5].get_text()  # 上市曾用名
                gsdj = tds[7].get_text()  # 工商登记
                zczb = tds[9].get_text()  # 注册资本
                sshy = tds[11].get_text()  # 所属行业
                dsz = tds[13].get_text()  # 董事长
                dm = tds[15].get_text()  # 董秘
                fddbr = tds[17].get_text()  # 法定代表人
                zjl = tds[19].get_text()  # 总经理
                ygrs = tds[21].get_text()  # 员工人数
                glryrs = tds[23].get_text()  # 管理人员人数
                kggd = tds[25].get_text().replace(" ", "")  # 控股股东
                sjkzr = tds[27].get_text().replace(" ", "")  # 实际控制人
                zzkzr = tds[29].get_text().replace(" ", "")  # 最终控制人
                zyyw = tds[31].get_text().replace(" ", "")  # 主营业务'
                desc = (compCh, compEn, sscym, gsdj, zczb, sshy, dsz, dm, fddbr, zjl, ygrs, glryrs, kggd, sjkzr, zzkzr, zyyw, url)
                print(desc)
                update_company_qyjj(desc)
    
        # 证券信息
        div = soup.find('div', id="nav-main-secBasicInfoCount")
        if div is None or len(div) is 0:
            print("此页查找不到公司内容nav-main-secBasicInfoCount:", url)
            # print(html)
            # refresh_proxy_ip()
            # return get_info(url)
        else:
            table = div.find('table', class_="table -striped-col")
            if table is None or len(div) is 0:
                print("此页查找不到公司内容table -striped-col:", url)
                # print(html)
            else:
                tds2 = table.find_all('td')
                if len(tds) <= 13:
                    print("估计界面有问题:len(tds) <= 13", url)
                    return True
                agdm = tds2[1].get_text()  # A股代码
                agjc = tds2[3].get_text()  # A股简称
                bgdm = tds2[5].get_text()  # B股代码
                bgjc = tds2[7].get_text()  # B股简称
                hgdm = tds2[9].get_text()  # H股代码
                hgjc = tds2[11].get_text()  # H股简称
                zqlb = tds2[13].get_text()  # 证券类别
                sec_info = (agdm, agjc, bgdm, bgjc, hgdm, hgjc, zqlb, url)
                print(sec_info)
                update_company_zqxx(sec_info)
    
        # 联系信息
        div = soup.find('div', id="_container_corpContactInfo")
        if div is None or len(div) is 0:
            print("此页查找不到公司内容 _container_corpContactInfo:", url)
            # print(html)
            # refresh_proxy_ip()
            # return get_info(url)
        else:
            table = div.find('table', class_="table -striped-col -breakall")
            if table is None or len(table) is 0:
                print("此页查找不到公司内容 table -striped-col -breakall:", url)
                # print(html)
                # refresh_proxy_ip()
                # return get_info(url)
            else:
                tds = table.find_all('td')
                if len(tds) <= 15:
                    print("估计界面有问题:len(tds) <= 15", url)
                    return True
                lxdh = tds[1].get_text()  # 联系电话
                dzyx = tds[3].get_text().replace(" ", "")  # 电子邮箱
                cz = tds[5].get_text()  # 传真
                gswz = tds[7].get_text()  # 公司网址
                qy = tds[9].get_text()  # 区域
                yzbm = tds[11].get_text()  # 邮政编码
                bgdz = tds[13].get_text().replace(" ", "")  # 办公地址
                zcdz = tds[15].get_text().replace(" ", "")  # 注册地址
                contact_info = (lxdh, dzyx, cz, gswz, qy, yzbm, bgdz, zcdz, url)
                print(contact_info)
                update_company_lxxx(contact_info)
    
    
        # 公司背景
        div = soup.find('div', id="_container_baseInfo")
        if div is None:
            print("此页查找不到公司内容 _container_baseInfo:", url, "注意这个必须要查到哦哦哦哦哦哦哦!!!!!!!!!!!")
            # print(html)
            refresh_proxy_ip()
            return get_info(url)
        else:
            compChdiv  = soup.find('div', class_="header")
            if compChdiv is None:
                print("此页查找不到公司全称呼  class_=header:", url, "注意这个必须要查到哦哦哦哦哦哦哦!!!!但先不刷新IP!")
                compCh= ""
            else:
                compCh = compChdiv.find('h1', class_="name").get_text()
                print(compCh)
            frdiv=div.find('div', class_="humancompany")
            if frdiv is None:
                print("此页查找不到公司法人 humancompany:", url, "注意这个必须要查到哦哦哦哦哦哦哦!!!!!!!!!!!")
                # print(html)
                refresh_proxy_ip()
                return get_info(url)
            table = div.find('table', class_="table -striped-col -border-top-none -breakall")
            if table is None:
                print("此页查找不到公司内容 table -striped-col -border-top-none -breakall:", url, "注意这个必须要查到哦哦哦哦哦哦哦!!!!!!!!!!!")
                # print(html)
                refresh_proxy_ip()
                return get_info(url)
            else:
                tds = table.find_all('td')
                fddbrr = frdiv.find('a', class_="link-click").get_text()  # 法定代表人
                if len(tds) <= 40:
                    print("估计界面有问题:len(tds) <= 40", url)
                    exit(1)
                zczb1 = tds[1].get_text()  # 注册资本
                sjzb1 = tds[3].get_text()  # 实缴资本
                clrq1 = tds[6].get_text()  # 成立日期
                jyzt1 = tds[8].get_text()  # 经营状态
                tyshxxdm1 = tds[10].get_text()  # 统一社会信用代码
                gszc1 = tds[12].get_text()  # 工商注册号
                nsrsbh1 = tds[14].get_text()  # 纳税人识别号
                zzjgdm1 = tds[16].get_text()  # 组织机构代码
                gslx1 = tds[18].get_text().replace('\"', "")  # 公司类型
                hy1 = tds[20].get_text()  # 行业
                hzrq1 = tds[22].get_text()  # 核准日期
                djjg1 = tds[24].get_text()  # 登记机关
                yyqx1 = tds[26].get_text()  # 营业期限
                nsrzz1 = tds[28].get_text()  # 纳税人资质
                rygm1 = tds[30].get_text()  # 人员规模
                cbrs1 = tds[32].get_text()  # 参保人数
                cym1 = tds[34].get_text()   # 曾用名
                ywmc1 = tds[36].get_text()  # 英文名称
                zcdz1 = tds[38].get_text()  # 注册地址
                jyfw1 = tds[40].get_text()  # 经营范围  需要很大的空间 2000
                data = (compCh, fddbrr, zczb1, sjzb1, clrq1, jyzt1, tyshxxdm1, gszc1, nsrsbh1, zzjgdm1, gslx1, hy1, hzrq1, djjg1, yyqx1, nsrzz1, rygm1, cbrs1, cym1, ywmc1, zcdz1, jyfw1, True, url)
                print(data)
                update_company_qybj(data)
        return True
    
    

     

    代码注释已经打的比较详细,可以直接看。

    上面的代码对异常情况的处理并没有太细致,爬取结果还需要数据预处理,尤其是天眼查煞笔的数据加密,

    上面加密的数据有,注册资本,注册时间,营业期限,加密方法贼原始,

    我遇到的加密是,

    数字加密方式
    
    密文    明文
    
    7    4
    5    8
    4    .
    3    9
    0    1
    .    5
    9    2
    6    0
    1    3
    8    6
    2    7

    就这么简单,哈哈哈,发现这个时没笑死我。这个解码的操作较为简单,小伙伴自己去操练去吧。

    有人说,为啥不去爬国家企业信用信息公示系统,原因只有一个,我实在懒得去搞什么滑动验证码,文字点击验证码,看着就烦,(注定无法成为爬虫工程师)需要的伙伴可以看这位老兄的博客,他的说已经失效了,可以借鉴点经验,【爬虫】关于企业信用信息公示系统-加速乐最新反爬虫机制

    另外,如果有小伙伴实在不想自己爬数据的,只想要数据的,可以私信或者找我要,这次消息我都会收到,

    没错我还真的想过去买点数据应付一下建模,不过看到价格,基本就放弃了

     

    关于如何爬取天眼查90%企业爬虫思路:

    就是根据天眼查的条件不断细化,如下细化到行业—》行业子类—》—》—》区、县—》分页,基本数据量也5页左右100个公司左右,当然你也可以更细化

    如图上条件,已经剩6页,而天眼查不登录请款下只能看5页。

    首先是行业,行业有96个:url都是类似:https://www.tianyancha.com/search/oc06  也就是oc+两位数字。

    接下来是省:类似吉林省 jl:https://www.tianyancha.com/search/oc06?base=jl 
    接下来是市:吉林省四平市: https://www.tianyancha.com/search/oc06?base=siping
    接下来是区:吉林省四平市铁西区https://www.tianyancha.com/search/oc06?base=siping&areaCode=220302

    接下来是分页:比如第四页p4:https://www.tianyancha.com/search/oc01/p4?base=guangzhou&areaCode=440106

    接下来就是每一页的公司url:一般一页有20个公司:https://www.tianyancha.com/company/2782669177

    最后就是爬取每一个公司的信息并保存起来了:

    把上面每一步爬到先保存到数据库作为准备爬取的页面,即可:

    如我上面项目提到的main.py,以下方法你可以用多进程按省1:市区5:分页:25-》公司50来规划分布式机器爬虫。 当然你得够有钱,买得起这么多服务器和代理IP池。

    if __name__ == '__main__':
        # 一步 一步  爬取所有天眼查所有公司,极其变态
        # 把数据库表建好,然后跑这个程序,下面五个可以分五条线程 按先后顺序启动 即可
        get_city_to_mysql()     # 爬取行业-》省份  url
        get_qu_to_mysql()       # 爬取行业-》省份-》市  -》区  url
        get_page_to_mysql()     # 爬取行业-》省份-》市 -》区-》分页  url
        get_company_to_mysql()  # 爬取行业-》省份-》市 -》区-》分页->公司列表  url
        get_company_info_to_mysql()   # 爬取公司信息  url

     

    展开全文
  • 因项目需要,系统中需要添加根据企业名称或统一信用代码查询企业信息的功能,所以整合了企查查的查询接口 接口文档地址 Java请求示例: /** * 版权申明: 苏州朗动科技有限公司<br> * 项目描述: 企查查-接口...

    因项目需要,系统中需要添加根据企业名称或统一信用代码查询企业信息的功能,所以整合了企查查的查询接口

    接口文档地址

    Java请求示例:

    /**
     * 版权申明: 苏州朗动科技有限公司<br>
     * 项目描述: 企查查-接口平台<br>
     * 该接口调用demo仅供学习参考
     */
    package org.ld.httpGetDemo;
    
    import static java.lang.System.out;
    
    import java.io.IOException;
    import java.util.regex.Pattern;
    
    import org.apache.commons.codec.digest.DigestUtils;
    import org.apache.http.client.methods.HttpHead;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    /**
     * 
     * 描述 http请求处理模块<br>
     * 
     * @author szld<br>
     * @version 1.0 <br>
     *          日期:2019年7月31日 下午2:23:41
     */
    public class MainApp {
    	// 请登录http://yjapi.com/DataCenter/MyData
    	// 查看我的秘钥 我的Key
    	private static final String appkey = "我的接口:我的Key";
    	private static final String seckey = "我的接口:我的秘钥";
    
    	public static void main(String[] args) {
    		String reqInterNme = "http://api.qichacha.com/ECIV4/Search";
    		String paramStr = "keyword=新疆庆华能源集团有限公司";
    		String status = "";
    		try {
    			// auth header setting
    			HttpHead reqHeader = new HttpHead();
    			String[] autherHeader = RandomAuthentHeader();
    			reqHeader.setHeader("Token", autherHeader[0]);
    			reqHeader.setHeader("Timespan", autherHeader[1]);
    			final String reqUri = reqInterNme.concat("?key=").concat(appkey).concat("&").concat(paramStr);
    			String tokenJson = HttpHelper.httpGet(reqUri, reqHeader.getAllHeaders());
    			out.println(String.format("==========================>this is response:{%s}", tokenJson));
    
    			// parse status from json
    			status = FormartJson(tokenJson, "Status");
    			out.println(String.format("==========================>Status:{%s}", status));
    			if (!HttpCodeRegex.isAbnornalRequest(status)) {
    				PrettyPrintJson(tokenJson);
    			}
    		} catch (Exception e1) {
    			e1.printStackTrace();
    		}
    	}
    
    	// 获取返回码 Res Code
    	static class HttpCodeRegex {
    		private static final String ABNORMAL_REGIX = "(101)|(102)";
    		private static final Pattern pattern = Pattern.compile(ABNORMAL_REGIX);
    		protected static boolean isAbnornalRequest(final String status) {
    			return pattern.matcher(status).matches();
    		}
    	}
    
    	// 获取Auth Code
    	protected static final String[] RandomAuthentHeader() {
    		String timeSpan = String.valueOf(System.currentTimeMillis() / 1000);
    		String[] authentHeaders = new String[] { DigestUtils.md5Hex(appkey.concat(timeSpan).concat(seckey)).toUpperCase(), timeSpan };
    		return authentHeaders;
    	}
    
    	// 解析JSON
    	protected static String FormartJson(String jsonString, String key) throws JSONException {
    		JSONObject jObject = new JSONObject(jsonString);
    		return (String) jObject.get(key);
    	}
    
    	// pretty print 返回值
    	protected static void PrettyPrintJson(String jsonString) throws JSONException {
    		try {
    			ObjectMapper mapper = new ObjectMapper();
    			Object obj = mapper.readValue(jsonString, Object.class);
    			String indented = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
    			out.println(indented);
    		} catch (JsonProcessingException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

    我将代码稍微改造了一下,仅供参考,如有错误,劳您指出:

    @Value("${qichacha.key}")
    private String key;
    @Value("${qichacha.secret}")
    private String secret;
    
    //搜索关键字(公司名、注册号、社会统一信用代码或KeyNo)注:社会组织、香港企业仅支持通过企业名称和KeyNo查询
    @Log("企业信息列表")
    @ApiOperation(value = "企业信息列表")
    @GetMapping(value = "list.do" , produces = "application/json;charset=UTF-8")
    public  R pageList(@RequestParam(value = "keyword")String keyword ,HttpServletRequest request) {
    		List<EnterpriseInfoDO> resultList = new ArrayList<>();
    		String reqInterNme = "http://api.qichacha.com/ECIV4/Search";
    		String paramStr = "keyword="+keyword;
    		try {
    			// auth header setting
    			HttpHead reqHeader = new HttpHead();
    			String[] autherHeader = QiChaChaUtil.RandomAuthentHeader(key,secret);
    			reqHeader.setHeader("Token", autherHeader[0]);
    			reqHeader.setHeader("Timespan", autherHeader[1]);
    			final String reqUri = reqInterNme.concat("?key=").concat(key).concat("&").concat(paramStr).concat("&pageSize=20");
    			String tokenJson = HttpHelper.httpGet(reqUri, reqHeader.getAllHeaders());
    			JSONObject jsonObject = JSON.parseObject(tokenJson);
    			return R.ok().put("result",resultList);
    		} catch (Exception e1) {
    			e1.printStackTrace();
    			return R.error("查询企业信息失败");
    		}
    	}
    }
    

    企查查工具类

    import static java.lang.System.out;
    
    import java.io.IOException;
    import java.util.regex.Pattern;
    
    import org.apache.commons.codec.digest.DigestUtils;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class QiChaChaUtil {
    
        // 获取返回码 Res Code
        public static class HttpCodeRegex {
            private static final String ABNORMAL_REGIX = "(101)|(102)";
            private static final Pattern pattern = Pattern.compile(ABNORMAL_REGIX);
            protected static boolean isAbnornalRequest(final String status) {
                return pattern.matcher(status).matches();
            }
        }
    
        // 获取Auth Code
        public static final String[] RandomAuthentHeader(String appkey,String seckey) {
            String timeSpan = String.valueOf(System.currentTimeMillis() / 1000);
            String[] authentHeaders = new String[] { DigestUtils.md5Hex(appkey.concat(timeSpan).concat(seckey)).toUpperCase(), timeSpan };
            return authentHeaders;
        }
    
        // 解析JSON
        public static String FormartJson(String jsonString, String key) throws JSONException {
            JSONObject jObject = new JSONObject(jsonString);
            return (String) jObject.get(key);
        }
    
        // pretty print 返回值
        public static void PrettyPrintJson(String jsonString) throws JSONException {
            try {
                ObjectMapper mapper = new ObjectMapper();
                Object obj = mapper.readValue(jsonString, Object.class);
                String indented = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
                out.println(indented);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    application.yml
    在这里插入图片描述
    key和密钥登录企查查
    在这里插入图片描述

    建议把查询出的数据持久化到数据库,如有相同查询 直接从数据库返回数据。

    展开全文
  • 一、企业工商信息查询API的使用场景1、银行及金融机构对企业进行信贷评估2、媒体财经信息平台,提升金融财经信息平台的业务能力及时效性3、政府机构,约束社会失信企业,构建社会信用体系4、一般企业企业生态风险...

    一、企业工商信息查询API的使用场景

    1、银行及金融机构对企业进行信贷评估

    2、媒体财经信息平台,提升金融财经信息平台的业务能力及时效性

    3、政府机构,约束社会失信企业,构建社会信用体系

    4、一般企业,企业生态风险控制,建立伙伴企业档案

    另外,信托企业、征信公司、咨询公司和律所都对企业工商信息数据有大量的需求。

    二、工商数据的内容

    拿数据维度比较全面的用友APILink的这个产品来说,就包含了工商数据包括了工商基本信息、股东信息、工商变更信息、主要任职人员、企业分支机构、动产抵押、股权出质、行政处罚、企业年报等很多信息。

    三、第三方软件/API的数据来源

    1、官网公示

    其唯一可信的来源,是[全国企业信用信息公示系统],第三方软件通过网络爬虫抓取了全国企业信用信息公示系统的绝大部分公司工商数据。

    2、爬取所得

    爬取信息属合规性质,工商局有义务公开企业信用信息。因为工商局不提供任何数据接口,第三方数据库信息为爬取所得。

    四、第三方数据库信息抓取方式

    1、通过爬去全国各省市企业信用信息公示系统获得部分公司的工商数据

    2、用户查询某公司信息时,第三方数据库将判断其是否存在数据库(不存在将重新抓取,数秒时间)以及是否长时间未更新(重新定向抓取,数秒时间),如不需更新则直接从数据库中提取(毫秒时间)

    当然,信息公开和信息缓存是这类软件的立足点。

    天朝的数据利用路还很长,但已经在不停的向前走,以后题主会发现越来越多像用友APILink一样很神奇的数据平台。

    展开全文
  • 集团企业数据信息系统建设方案

    千次阅读 2016-01-04 09:39:15
    FineReport数据信息系统的总体流程为:整合和获取数据,将数据应用于报表的开发,将开发完的报表进行逻辑展示处理和部署,最后呈现给使用者使用。 开发报表的过程中,必须结合企业流程和企业内部的系统数据,进行...

    集团企业数据信息系统建设方案

    FineReport数据信息系统的总体流程为:整合和获取数据,将数据应用于报表的开发,将开发完的报表进行逻辑展示处理和部署,最后呈现给使用者使用。

    开发报表的过程中,必须结合企业流程和企业内部的系统数据,进行统一搭建,最终要求开发出一个结合了各个系统数据的报表决策平台。开发过程中坚持“契合需求,方便高效”的原则,为企业员工、管理者以及决策者提供一个实用、方便、高效的工具。

        本章将按照建设目标,从业务展示和BI分析两个方面对数据信息系统进行举例阐述。所用截图均为FineReport客户案例,仅供参考。

         2.1业务展示

    业务展示类报表主要面向集团各部门的员工以及管理者,可以有效减轻集团员工及管理者在信息录入、处理上的工作量,优化并流畅各部门的工作。

        2.1.1 店铺管理类

           店铺的数据作为所有信息的基础,数据的录入、分析、管理非常重要。

         2.1.1.1 店铺数据的录入

         目前,大部分连锁行业的店铺数据录入都在企业自己的系统中录入,不同的系统需要多次录入,有的还需要在EXCEL中录入以方便财务、人事等不同部门的使用。这不仅给店铺员工增加了工作量,多次录入数据还容易出错,同时也给各部门的数据处理人员带来很大麻烦,浪费有效的人力物力资源。

         FineReport支持多源填报,多源展示功能。即员工只需要在事先制作的一张表单中填入需要统计的数据,系统将自动录入到各个对应的数据库。当某个部门比如财务部需要制作某类报表时,可以抽取任意数据库的数据。

    例:



      

    以上业务表单中包含:

    付款编号

    付款时间

    客户名称

    会员ID

    付款数额

    店长

    门店

    付款项目

    ……

    这些数据项目可以用在“门店销售额统计”“会员消费统计”“店长绩效统计”“产品销售统计”等等不同部门不同维度的统计报表中,达到一次填报,任取任用的效果。

        2.1.1.2自动生成店铺销售月报

         各个店铺的销售月报是最常用的报表,销售、财务部门都会需要用它来进行分析统计。但是目前大部分企业需要相关人员每月月底进行月报的制作,而且各个店铺、百货的统计更是无比繁琐,浪费大量人力财力。

        FineReport包含定时器功能。可以按设定的周期(每天、每周、每月)自动从数据库相关项取出数据,自动生成企业需要的报表,并且自动汇总到指定文件夹甚至按周期发送邮件到指定邮箱。只需一次制作,自动取数,自动填报展示。




      

    例:

    以上业务表单中包含:

    店铺

    销售额

    具体产品销售额

    排名

    占比

    环比

    ……

        2.1.1.3 设定参数选择自己想看的报表

        财务部门、销售部门,采购部门每月可能需要用到大量类似2.1.1.2所述的分析报表,当需要对自己所关心维度的数据进行统计时,可以设定参数。

    可选参数举例:

    地区

    城市

    具体店铺

    具体仓库

    时间

    商品类型

    具体商品

    供应商

    ……




     例:

    这是一张供应商统计表,包含:

    供应商名称

    负责人

    联系方式

    产品名称

    批次

    合格率

    ……

    表中可以设置预警系统,当合格率小于某个指(比如90%)时自动显红。

        2.1.1.4 相关报表的关联

        当需要对某个维度的数据进行深入分析统计时,比如需要对某个店铺的销售、考勤、仓储、客户等进行统计,以考察这个店铺的综合状况时,可以设置报表的链接,钻取店铺这个数据。

    例:




      

    还是以2.1.1.2的销售月报为例,我们现在需要考察各个店铺的收入明细、员工考勤、咨询记录表三个表格,只需要对店铺设置链接,就可以钻取“收入明细表”“员工考勤表”“咨询记录表”。这样就可以全面、方便高效地考察具体店铺的营业状况。

     

    2.1.2 财务类

    在企业内部的管理及业务营运过程中,除了最基本的进、销、存三个基元,财务主题更是最直接反应企业的营运状况。随着企业的不断发展,其传统的 Excel 制作财务报表方式已经进入瓶颈,表现在如下几点:

    1) Excel 直接操作数据的方式受人为因素影响过大

    财务数据反映的是企业最基本的财务运营状态,一个小的数据出错往往对企业照成不可估量的损失。

    2) 耗费大量人力财力和时间

    由于 Excel 操作方式零散、复杂的特点,使得往往简单的计算要耗费掉财务人员无数的时间和精力。

    3) 重复工作量大 

    企业的发展要求财务人员每个周期内需要出来不同指标的数据,随着企业的不断发展, 该周期不断被缩小,造成财务人员每天在耗费大量的精力去做重复的工作。

    FineReport 采用系统计算的方式,将财务报表的各项指标通过逻辑算法纳入系统中,减少财务人员的重复工作量,避免出现人工的数据错误,从最大程度上,减少财务人员的负担,增加企业财务数据处理效率。

    财务主题包含企业营运的各个方面,渗透在本文档所写的所有主题中,因此本节仅描述一些财务方面特有的几个模板例子,展示一些常用的财务报表。

    1) 增值税明细账

    将增值税的各项指标展示在web报表页面,并通过设定好的算法由系统计算出增值税明细。



      

    2) 总分类账

    通过控件参数的形式,从数据库中调出某月份的总分类账,减少财务人员的重复工作量,所见即所得。



      

     

    3) 明细分类账

    在总分类账的基础上,细化分类账每日内容,以 web形式展现出来,提高使用效率。

     



      

     

    4) 科目余额报表

    以月份和门店或销售点为基准,输出每月科目余额汇总,并由系统自动展示上月情况,方便数据对比。



      

     

    5) 付款凭证

    以付款凭证号为条件,由系统直接调出数据库中所存数据,并按照标准格式输出,方便财务人员随时调用,并可一键输出  Excel,word,PDF 等办公格式。



      

     

    6) 记帐凭证

    通过输入门店或销售点号、月份和凭证总号,调出记账凭证,减轻财务人员不断的操作大量数据的工作负担。



      

     

     

    2.1.3 人事类

    随着企业人员的不断扩大,如何合理搭建完善的人事制度、调整人力资源结构、规划企业员工职业发展等问题对企业的长远发展将产生巨大的影响。

    利用FineReport强大功能,可以轻松制作多项目、交互的人事报表。

         2.1.3.1 基本信息表:

    FineReport操作界面:

     




     Web浏览器展示界面:

     

     
     

     

     

     

    使用FineReport,工作人员只需轻松拖拽,无需任何代码,就可以制作一个包含十几项复杂数据的报表。节省大量人力财力。

     

     

         2.1.3.2 绩效薪资考核表

    企业根据自己的考核标准,对相关标准进行定义,FineReport可以自动进行计算,对员工以及管理人员的绩效进行考核。

    同时,企业可以设定权限。员工只能看到自己权限范围内的表单,或者只能看到某个表单的某一部分(FineReport的权限粒度可以具体到单元格)。




     例:

    以上为分公司的绩效考核,考核层面有财务、客户、内部运营、学习成长,扣分。

    可以设置权限使具体分公司只对应于自己公司的内容。

     

     

    2.1.4 客户类

    ……

          2.2 BI分析

    BI(business intelligence)即商业智能,可以说是大型企业后期发展不可或缺的一种工具。它能够将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策。本节仅从商品、利润两个角度对BI做一些简单的阐述。

    2.2.1 商品分析

    对于商贸企业来说,如何优化自己的商品结构、根据综合价值进行淘汰和推进等策略,是企业突破自身开拓市场的必要手段。根据 SWOT 波斯顿矩阵分析法,商品在其不同的生命周期内,分为问号、明星、现金牛、瘦狗四个范围。企业可将产品按各自的销售增长率和市场占有率归入不同象限,使企业现有产品组合一目了然,同时便于对处于不同象限的产品作出不同的发展决策。其目的在于通过产品所处不同象限的划分,使企业采取不同决策,以 保证其不断地淘汰无发展前景的产品,保持“问号”、“明星”、“现金牛”产品的合理组合,实现产品及资源分配结构的良性循环。

    商品分析可以从 SWOT 分析法出发,并联动展示各个大类下不同商品的销售结构,及单价和销售额间的关系,包括如下几个维度:

    1) 对大类产品的 SWOT 分析展示

    2) 大类下各产品的销售额占比

    3) 价格区间对应的销售额

    4) 价格区间与销售额的趋势展示

    利用该分析报表,可将商品的生命周期,及其与销售额的关系一手掌握,告别传统表格及静态页面等初级分析手段。

    模拟效果如下图:




      

     

    A)高层决策者以左上角 SWOT 分析图(气泡图)为主线,关注于企业重点经营商 品的合理配置,调整决策以便保证商品“问号”、“明星”、“现金牛”的合理组 合;并通过在线点击产品大类,联动右侧组合饼图,展示出大类下各小类产品 的销售占比,更好的分析某大类商品价值结构。

    B)企业管理者则更关注于下面两个图表,通过左下角价格区间及销售额关系柱形 图,可得出某个产品大类在不同价格区间的销售额对比,并通过点击某个价格 区间,可联动右下角折线图,展示具体不同价格与销售额的趋势关系。管理者 通过所掌握的信息,进行更好的商品定价与资源分配。

    2.2.2 利润分析

    对于企业决策者而言,掌握正确的业务数据和业务分析仅是做出决策的必要条件,而掌握企业的利润数据则是做出卓越决策的充分条件。

    如何判断企业的利润来源于哪、企业的利润结构是否合理、企业的经费都耗在了哪里、收入和支出是否合理,这些都是制作企业利润分析报表所应该考虑的。

    因此,利润分析报表可以包含如下几个方面:

    1) 主营业务收入

    2) 其他业务收入

    3) 管理费支出

    4) 财务费支出

    5) 投资净收益

    6) 产品收益

    7) 营业外收支净额

    8) 企业总利润

    9) 环比 

    其中企业的营业利润=主营业务收入+其他业务收入—管理费—财务费。企业的总利润=营业利润+投资净收益+营业外收入。可供选择的条件为:年份。

    其模拟效果如下:


    展开全文
  • 企业系统规划法(Business System Planning,BSP)是IBM在20世纪70年代提出的,旨在帮助企业制定信息系统的规划,以满足企业近期和长期的信息需求,它较早运用面向过程的管理思想,是现阶段影响最广的方法。...
  • 企业管理信息系统是一项复杂的系统工程,在项目搭建过程中,软件工具的选型、系统实施和管理是一个极其关键也是最容易出错的环节,选型和实施的成败最终决定着系统效益的充分发挥。在整个项目规划实施过程中,应该...
  • 谈谈企业信息系统数据库设计是使用id主键还是uuid逻辑主键或业务主键
  • 对于一家企业来说,其能源消耗是其企业管理中一个重要组成部分,对于企业的正规化管理和健康成长都至关重要。...本文设计设置三种级别的员工用户,分别是游客用户、普通用户和管理员用户,分别可以对用能信息进行查阅
  • 能源企业信息系统中的典型客户管理数据分析模块展示
  • 手把手教你用Java设计并实现一个城市公交查询系统

    千次阅读 多人点赞 2020-12-19 10:11:33
    为了使得我国公交乘客出行及查询有关信息更方便,本文运用JAVA语言技术,Jsp技术,Mysql数据库开发了B/S结构的城市公交查询系统。 该系统顺应了时代发展且具有以下优点:首先,方便乘客的出行,乘客不用询问站牌工作...
  • 首先介绍企业信息化的概念、目的、规划、方法,然后再介绍 ERP、CRM、PDM(Product Data Management,产品数据管理)、企业门户、EAI、SCM 等内容,最后介绍电子商务的类型和标准。 1 企业信息化概述  企业...
  • 2.管理员能够根据企业的实际来实时的改变系统中机构组织,主要的改变包括:当有新部门成立时,要将新部门加入到系统中,当有部门发生变更时,如更名,上级部门改变了等,要将变更的信息系统中及时更新,当有部门被...
  • 主要定位于“企业信息管理”领域,可用作企业信息管理类系统、网站后台管理类系统等。JeeSite是非常强调开发的高效性、健壮性和安全性的。 JeeSite是轻量级的,简单易学,本框架以Spring Framework为核心、Spring ...
  • Java企业人事管理系统源码

    热门讨论 2010-12-03 23:17:54
    (3)单击“系统维护”/“企业架构”菜单项,对企业架构信息进行添加、修改和删除操作。 (4)单击“用户管理”/“新增用户”菜单项,对管理员信息进行添加、删除和冻结/解冻操作。 (5)单击“待遇管理”/“账套...
  • 信息化管理系统企业的应用

    千次阅读 2013-08-09 14:50:21
    思多雅注:信息化管理系统企业的应用是个比较大的题目,涉及的范畴广,而具体到每个企业的实际情况又有所不同,笔者尝试以国内企业发展的共性,小论信息化对企业抵御金融的作用,以抛砖引玉,共同探讨。
  • 人事管理信息系统

    千次阅读 2016-04-12 10:23:57
    管理系统能够实现管理信息系统化是一个企事业单位不可缺少的部分,它的内容对于企业的决策者和管理者来说都至关重要,所以人事信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。 中文名 人事信息管理...
  • 机械企业信息管理系统项目分析报告一、 引言 业内专家指出,从整个行业发展的大环境来看,机械制造行业的产品更新发展速度较为稳定,然而随着行业的竞争加剧,机械企业逐渐由大批量的生产规模向单位的、小批量的...
  • 企业员工考勤管理子系统

    千次阅读 2017-11-16 12:30:55
    企业员工考勤管理子系统企业员工考勤管理子系统
  •   第一节主要介绍基本概念,所以是信息系统信息化。   对于任何事物来说,创建都是第一步。所以第二节是信息系统开发技术。   对于系统来说,集成非常重要。所以第三节是信息系统的集成技术。   由于信息...
  • 学生信息管理系统论文

    热门讨论 2009-03-10 21:16:00
    学生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段 1.2在国内外发展概况及存在问题 一直以来人们...
  • 推荐系统企业中常用的技术,所以系统的掌握推荐系统的知识是很有必要的。本专栏主要讲述手机APP下载的项目。 常用的推荐方法有两个,分别是基于物品的推荐和基于用户的推荐。 基于用户的推荐原理是:跟你喜好...
  • 信息系统分析与设计课程心得

    万次阅读 2017-02-28 13:41:39
    信息系统分析与设计课程心得此博客为信息系统分析与设计课程的学习心得记录。一、绪论1概念1.1信息要了解信息系统,首先要了解信息的概念。信息是我们理解世界的重要概念,我对它的定义是:信息是对客观事物及其相互...
  • 基于Java+springmvc+mysql+jquery实现企业员工管理系统

    千次阅读 多人点赞 2021-08-01 12:47:39
    目录 研究背景 系统功能概述 主要功能: ...企业员工信息管理系统 一、绪论 2 1.1 研究背景 2 1.2目的和意义 3 1.2研究的目标与内容 3 1.3项目的可行性研究设计 3 1.4技术可行性 3 spring 4 Sp...
  • 如何在央行查询企业征信报告?

    千次阅读 2019-08-02 14:55:07
    企业有效证件(营业执照、事业单位法人证书、社会团体法人登记证书等登记管理部门颁发的合法证照)中的各项基本信息须与机构信用代码证系统中录入数据保持一致,如有变更,请及时到您的基本户开户银行做好机构信用...
  • 企业知识库管理系统

    千次阅读 2018-03-09 22:10:50
    在我看来,本系统就是两个核心点第一访问信息快速准确,第二安全科学合理的权限管理,其他还有知识分类,知识上传,下载等等。 本系统采取的后端的技术(本人负责后端):( 一、系统架构 SSM 三大框架。 通过...
  • 计算机硬件系统基本组成

    千次阅读 2020-03-28 18:37:54
    1. 计算机硬件系统基本组成 下图是一种计算机硬件系统的简化结构模型示意图,其中包含CPU、存储器、输入/输出(IO)设备和接口等功能部件,各部件之间通过系统总线相连接。 (1) CPU CPU 是计算机硬件系统的核心部件...
  • 企业怎样选择服务器和操作系统

    千次阅读 2018-08-01 19:31:05
    本文为您介绍小企业怎样选择服务器和操作系统,以便为您的业务做出正确的决定。 一、您需要哪种类型的服务器? 小企业服务器可以分为两种基本类型:独立服务器和云服务器。两者都提供完整的、独立的服务器环境,...
  • 企业ERP系统开发总结及建议

    万次阅读 多人点赞 2012-12-25 09:33:09
    企业ERP系统开发总结及建议作者:成晓旭 对于像我们这种规模的大型公司,自己建设、实施和维护满足公司特定管理要求的管理信息系统,是目前部分大型公司建设企业ERP的常见思路。比如:XXXX、XXXX、XXXX、XXXX等等...
  • 1.厂商资料 记录供应商、厂家的基本信息,如:厂商名称、地址、所属地区、电话、执照号码、税务登记号码、开户银行等等。以地区为目录对厂商信息进行管理与维护,界面更加直观、紧凑又富有条理。提供智能编号、过滤...
  • 管理信息系统复习总结(保姆级)

    万次阅读 多人点赞 2021-01-01 14:19:37
    信息系统如何改变企业:①新兴移动数字平台 ②利用信息系统来改善客户体验,相应客户需求,降低库存 ③在线报纸的读者人数在不断增长 ④电子商务和互联网广告在不断发展 ⑤新的联邦安全和会计法实施 全球化挑战和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 523,486
精华内容 209,394
关键字:

企业基本信息查询系统