package main

import (
	"flag"
	"fmt"
	"github.com/ichunt2019/logger"
	"go-queue-server/dal/db"
	"go-queue-server/util"
	"go-queue-server/util/ding"
	"io/ioutil"
	"net/http"
	"time"
	"go-queue-server/dal/user/InvoiceCompany"
	"github.com/tidwall/gjson"
)

func initDb(dns string) (err error) {
	err = db.InitCrmDB(dns)
	if err != nil {
		return
	}

	return
}

var ConfigDir string
var LogDir string

// 解析命令行参数
func initArgs() {
	// worker -config ./worker.json
	// worker -h
	flag.StringVar(&ConfigDir, "configDir", "", "配置文件")
	flag.StringVar(&LogDir, "logDir", "", "日志目录")
	flag.Parse()
}

// 从风控系统拉取公司信息
func main() {
	initArgs()

	//初始化配置文件
	util.Init(ConfigDir)

	logConfig := make(map[string]string)
	logConfig["log_path"] = LogDir+"user/company"
	logConfig["log_chan_size"] = "1000"
	logger.InitLogger("file",logConfig)
	logger.Init()

	//初始化db
	initDb(util.Configs.Liexincrm_databases.Dns)

	updateData()

	fmt.Println("任务执行成功")
}

// 修改DB
func updateData() (err error) {
	// 获取未评分的公司
	row, err := db.CrmDB.Queryx("select * from lie_invoice_company where total_credit_score = 0")

	if err != nil {
		logger.Info("获取未评分公司失败,DB错误原因: ", err.Error())
		return
	}

	for row.Next() {
		var company InvoiceCompany.Company
		row.StructScan(&company)

		// 拉取风控公司信息
		url := util.Configs.Fengkong_domain.GoUrl + "/kaopu-server/http/member/company_info/" + company.ComName

		resp, err := http.Get(url)

		if err != nil {
			logger.Info("请求风控接口失败,错误原因: ", err.Error())
			return err
		}

		defer resp.Body.Close()

		body, err := ioutil.ReadAll(resp.Body)

		// erp_com_sn := gjson.Get(string(body), "com_credit.erp_company_code").String() // ERP编码
		com_addr := gjson.Get(string(body), "com_basic_info.com_address").String() // 公司地址
		establishment_time := gjson.Get(string(body), "com_basic_info.establishment_time").Int() // 成立时间
		registered_capital := gjson.Get(string(body), "com_basic_info.registered_capital").Float() // 注册资本
		com_organization := gjson.Get(string(body), "com_basic_info.com_organization").String() // 组织结构代码
		legal_representative := gjson.Get(string(body), "com_basic_info.legal_representative").String() // 法定代表人
		five_legal_change := gjson.Get(string(body), "com_basic_info.five_legal_change").Int() // 5年内法人变更次数
		two_years_no_lawsuit := gjson.Get(string(body), "com_basic_info.two_years_no_lawsuit").String() // 近两年内有无诉讼
		total_credit_score := gjson.Get(string(body), "com_credit.total_credit_score").Float() // 信用评分
		ichunt_hunting_core := gjson.Get(string(body), "com_credit.ichunt_hunting_core").Int() // 评分分级
		blacklist_hit := gjson.Get(string(body), "com_credit.blacklist_hit").String() // 黑名单命中
		risk_type := gjson.Get(string(body), "com_credit.risk_type").Int() // 风险分类
		curr_time := time.Now().Unix()

		// 更新发票公司表
		_, err = db.CrmDB.Exec("update lie_invoice_company set com_addr = ?, establishment_time = ?, registered_capital = ?, com_organization = ?," +
			"legal_representative = ?, five_legal_change = ?, two_years_no_lawsuit = ?, total_credit_score = ?, ichunt_hunting_core = ?, blacklist_hit = ?, " +
			"risk_type = ?, update_time = ? where com_name = ?", com_addr, establishment_time, registered_capital, com_organization, legal_representative,
			five_legal_change, two_years_no_lawsuit, total_credit_score, ichunt_hunting_core, blacklist_hit, risk_type, curr_time, company.ComName)

		var mobile []string = make([]string, 0)
		var isAtAll bool = false

		if err != nil {
			ding.Send(util.Configs.Ding_msg.FkCompany, "任务告警", "更新发票公司失败,错误原因: "+err.Error()+",公司名称:"+company.ComName, mobile, isAtAll)
			logger.Info("更新发票公司失败,错误原因: "+err.Error()+",公司名称:"+company.ComName)
			return err
		}

		// 已评分的推送钉钉通知
		if total_credit_score > 0 {
			ding.Send(util.Configs.Ding_msg.FkCompany, "任务告警", "获取风控公司信息成功,公司名称:"+company.ComName, mobile, isAtAll)
		}

	}

	row.Close()
	return
}