Commit c76d9984 by Joneq

合并dev

parents 4a24c80c d3873971
......@@ -13,4 +13,8 @@ Homestead.json
/storage/debugbar
.DS_Store?
.DS_Store
/configs
\ No newline at end of file
/configs
cmd/cmd.exe
cmd/move/logs/
/cmd/dong/logs/*.log
logs
package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"github.com/bilibili/kratos/pkg/conf/paladin"
"github.com/ichunt2019/go-msgserver/utils/rabbitmq"
"kaopu-server/internal/dao"
"kaopu-server/internal/logic"
"kaopu-server/internal/service"
"os"
"strconv"
"time"
)
type Rabitmq struct {
Dsn string //rabitmq 配置1
}
type RecvPro struct {}
type RabbitMsg struct {
ComCreditsId string `json:"com_credits_id"`
ErpCompanyCode string `json:"erp_company_code"`
}
func main() {
//获取输入参数s
var mod int;
flag.IntVar(&mod, "m", 0, "请输入模块id") // 单独计算某个模块,默认计算全部,0计算全部
flag.Parse()
if err := paladin.Init(); err != nil {
panic(err)
}
model_dong := dao.Model_dong //所有动态模型算法列表
if mod == -1 {
queues() //队列监听
return
}
_ ,ok := model_dong[mod]
if !ok {
fmt.Println("模块名称输入错误!")
os.Exit(1)
}
ctx := context.Background() //上下文
if mod >0 {
svc := service.New()
svc.DongRun(ctx,mod,""); //运行main
svc.DongRun(ctx,999,""); //总计所有分数
svc.Close() //关闭数据库连接
logic.LogWrite("统计"+dao.Model_dong[mod]+"完成",dao.Model_dong_log[mod],1)
}else{
for {
logic.LogWrite("统计所有动态任务开始","_dong_main",1)
svc := service.New()
for k,_ := range model_dong{
if k == -1 || k == 0 {
continue;
}
mod_name := dao.Model_dong[k]
mod_name_log :=dao.Model_dong_log[k]
logic.LogWrite("统计项目"+mod_name+"开始:"+strconv.Itoa(k),mod_name_log,1)
svc.DongRun(ctx,k,""); //运行main
logic.LogWrite("统计项目"+mod_name+"结束:"+strconv.Itoa(k),mod_name_log,1)
}
svc.Close() //关闭数据库连接
time.Sleep(60*time.Second)
}
fmt.Println("\r\n所有任务已经完成")
}
}
//队列监听
func queues() {
t := &RecvPro{}
var (
dc struct {
Dsn1 *Rabitmq // rab配置1
}
)
paladin.Get("rabitmq.toml").UnmarshalTOML(&dc) //读取配置
queueExchange := &rabbitmq.QueueExchange{
"fengkong_dong_count",
"fengkong_dong_count",
"fengkong_exchange",
"direct",
"amqp://"+dc.Dsn1.Dsn+"/",
}
for{
mq := rabbitmq.New(queueExchange)
mq.RegisterReceiver(t)
err :=mq.Start()
if err != nil{
fmt.Println(err)
}
time.Sleep(3*time.Second)
}
}
//// 实现消费者 消费消息失败 自动进入延时尝试 尝试3次之后入库db
func (t *RecvPro) Consumer(dataByte []byte) error {
//转成json串
var rbm RabbitMsg
json.Unmarshal(dataByte,&rbm)
fmt.Print(rbm)
ctx := context.Background() //上下文
model_dong := dao.Model_dong //所有动态模型算法列表
svc := service.New()
for k,_ := range model_dong{
if k == -1 || k == 0 {
continue;
}
mod_name := dao.Model_dong[k]
mod_name_log :=dao.Model_dong_log[k]
fmt.Println("统计开始:"+strconv.Itoa(k))
logic.Loginfo("统计开始--"+mod_name,mod_name_log);
svc.DongRun(ctx,k,rbm.ErpCompanyCode); //运行main
fmt.Println("统计结束:"+strconv.Itoa(k))
logic.Loginfo("统计结束--"+mod_name,mod_name_log);
}
//最后关闭数据连接
svc.Close() //关闭数据库连接
//return errors.New("顶顶顶顶")
return nil
}
//消息已经消费3次 失败了 请进行处理
func (t *RecvPro) FailAction(dataByte []byte) error {
fmt.Println(string(dataByte))
fmt.Println("任务处理失败了,我要进入db日志库了")
fmt.Println("任务处理失败了,发送钉钉消息通知主人")
return nil
}
package main
import (
"flag"
"context"
"kaopu-server/internal/service"
"github.com/bilibili/kratos/pkg/conf/paladin"
"github.com/bilibili/kratos/pkg/log"
)
func main() {
//获取输入参数
flag.Parse()
if err := paladin.Init(); err != nil {
panic(err)
}
//初始化日志目录
log.Init(&log.Config{Dir: "logs"})
defer log.Close()
log.Info("caipu-server start")
//声明service层
svc := service.New()
ctx := context.Background()
//调用会员服务
svc.GetUserList(ctx)
import "fmt"
func main() {
fmt.Print(1)
}
package detail
import (
"context"
"fmt"
"strconv"
"time"
)
//计算单一项总的静态分
func SetSumScore(c context.Context) {
Com_credits.Id = InsertScoreMsg.ComCreditsId
Com_credits.StaticCreditScore = CompanyInfo()+ AddScore()+ EnterPriseCredit()+ HistoryBussiness() + PersonalCredit()
_,err := Svclient.UpdateStaticSumScores(c,Com_credits)
fmt.Print(err)
}
//协程增加分值记录
func InsertRecord() {
for InsertScoreMsgRecord := range SocreRecordChan{
insertId,err := Svclient.InsertScores(Conclient,InsertScoreMsgRecord)
if err != nil {
fmt.Print(err)
}
fmt.Print(insertId)
}
defer Wg.Done()
}
//设置插入的分数头
func SetInsertScoreChanFooter(_typy,project_pid,project_id int8) {
InsertScoreMsg.Type,InsertScoreMsg.ProjectPid,InsertScoreMsg.ProjectId = _typy,project_pid,project_id
SocreRecordChan <- InsertScoreMsg
}
//获取详细的计算基本数据
func GetCompanyRunInfo() {
CompanyBasicInfo,_ = Svclient.GetCompanyBaseInfoByCid(Conclient,InsertScoreMsg.ComCreditsId)
CompanySoreFields,_ = Svclient.GetCompanyScoreFieldsByCid(Conclient,InsertScoreMsg.ComCreditsId)
CompanyAddScore,_ = Svclient.GetCompanyAddSoreByCid(Conclient,InsertScoreMsg.ComCreditsId)
}
func GetTimeStamp()(timestamp int64) {
return time.Now().Unix()
}
func StringTurnInt64(val string) (int64) {
intval,_ := strconv.ParseInt(val, 10, 64)
return intval
}
func StringTurnFloat64(val string)(float64) {
floatval,_ := strconv.ParseFloat(val, 64)
return floatval
}
//获取项目详情
func getModelByProjectId(projectId int64)(modelInfo map[string]string) {
res,_ := Svclient.GetCompanyModelByProjectid(Conclient,projectId)
return res
}
//获取顶头详情
func GetModelTopsetByProjectId(projectId int64)(modelInfo map[string]string) {
res,_ := Svclient.GetModelTopsetByProjectId(Conclient,projectId)
return res
}
//获取顶头详情
func GetCompanyModelItemsByProjectid(projectId int64, score float64) (modelInfo map[string]string) {
res,_ := Svclient.GetCompanyModelItemsByProjectid(Conclient,projectId,score)
return res
}
//获取顶头详情
func GetCompanyModelItemsByProjectidWitchString(project_id int64 , stringVal string) (modelInfo map[string]string) {
res,_ := Svclient.GetCompanyModelItemsByProjectidWitchString(Conclient,project_id,stringVal)
return res
}
func GetScore(projectId int64, stringVal string) (fianlscore float64) {
modelTypeInfo,_ := Svclient.GetCompanyModelByProjectid(Conclient,projectId)
modelInfo := make(map[string]string)
//如果是四,就用文本类型查询
if modelTypeInfo["numeric_type"] == "4" {
modelInfo = GetCompanyModelItemsByProjectidWitchString(projectId,stringVal)
}else{
var score float64
switch modelTypeInfo["unit"] {
case "5":
score = StringTurnFloat64(stringVal) /10000
break
case "7":
score = StringTurnFloat64(stringVal) /100
break
default:
score = StringTurnFloat64(stringVal) /1
}
modelInfo = GetCompanyModelItemsByProjectid(projectId,score)
}
return StringTurnFloat64(modelInfo["score"])
}
//设置分数
func SetScore(curretScoreRelace float64,modelId int64)(fimalScore float64) {
modelInfo := getModelByProjectId(modelId)
weightReplace := StringTurnFloat64(modelInfo["weight"])
if curretScoreRelace > StringTurnFloat64(modelInfo["full_score"]) {
curretScoreRelace = StringTurnFloat64(modelInfo["full_score"])
}
InsertScoreMsg.TotalScore = curretScoreRelace
//设置分数
InsertScoreMsg.FinalScore ,InsertScoreMsg.CurrentScore = curretScoreRelace * weightReplace,curretScoreRelace * weightReplace
InsertScoreMsg.Weight = weightReplace
return InsertScoreMsg.FinalScore
}
//设置project总分
func SetProjectScore(totalScoreReplace [20]float64, weightReplace float64, fullScore float64)(finalScore float64) {
var(
sumScore float64 = 0
joinNum float64 = 0
)
//查找出所有不是0的分值
for i :=0;i < len(totalScoreReplace) ; i++ {
if totalScoreReplace[i] > 0 {
joinNum += 1
sumScore += totalScoreReplace[i]
}
}
InsertScoreMsg.CurrentScore,InsertScoreMsg.TotalScore = sumScore,sumScore
//如果是0则不判断了
if sumScore == 0 {
InsertScoreMsg.FinalScore = 0
}else{
//如果最后金额大于满分,则算为最满分
if sumScore > fullScore {
InsertScoreMsg.TotalScore = fullScore
}else{
InsertScoreMsg.TotalScore = sumScore
}
//经过权重计算之后的总分值
InsertScoreMsg.FinalScore = sumScore * weightReplace
}
InsertScoreMsg.Weight = weightReplace
return InsertScoreMsg.FinalScore
}
\ No newline at end of file
package detail
//加分项30分)
func AddScore()(finalScore float64) {
var(
sumScore float64 = 0
)
for _,v :=range CompanyAddScore{
sumScore += StringTurnFloat64(v["final_score"])
}
//经过权重计算之后的总分值
InsertScoreMsg.FinalScore ,InsertScoreMsg.TotalScore,InsertScoreMsg.CurrentScore = sumScore,sumScore,sumScore
InsertScoreMsg.Weight = 1
SetInsertScoreChanFooter(1,0,5)
finalScore = InsertScoreMsg.FinalScore
return finalScore
}
//业界口碑(2分))
func IndustryReputation() {
}
//开工率(1分))
func OperatingRate() {
}
//下游客户类型(2分))
func DownstreamCustomerType() {
}
//担保人个数(5分))
func NumberOfGuarantors() {
}
//抵押物(20分))
func Collateral() {
}
\ No newline at end of file
package detail
import (
"context"
"kaopu-server/internal/model"
"kaopu-server/internal/service"
"sync"
)
var (
//获取的公司信息
CompanyData []map[string]string
//分数记录通道
SocreRecordChan = make(chan model.Scores)
//分数的数据
InsertScoreMsg model.Scores
//公司总的信息
Com_credits model.ComCredits
//公司的详细数据
CompanyBasicInfo map[string]string
//公司的逾期数据
CompanySoreFields map[string]string
//公司的历史数据
BasicInfo map[string]string
//公司的加分数据
CompanyAddScore []map[string]string
//设置等待
Wg sync.WaitGroup
//设置svclient
Svclient *service.Service
//content Client
Conclient context.Context
)
package detail
import (
"strconv"
)
var(
c_currentScore float64
c_totalScore [20]float64
weight float64
)
//公司信息计算
func CompanyInfo()(finalScore float64) {
EstablishmentTime()
CompanyNature()
ChangeslegalInFiveYears()
RegisteredCapital()
AnnualTaxRate()
lawsuitsInPastTwoYars()
NumberOfSocial()
modelInfo := GetModelTopsetByProjectId(1)
weight = StringTurnFloat64(modelInfo["weight"])
finalScore = SetProjectScore(c_totalScore,weight,StringTurnFloat64(modelInfo["full_score"]))
SetInsertScoreChanFooter(1,0,1)
return finalScore
}
//成立时间(1分) 大于五年1分,小于零分
func EstablishmentTime() {
establishment_time := StringTurnInt64(CompanyBasicInfo["establishment_time"])
diffTime := (GetTimeStamp() - establishment_time) / (3600 * 24 * 365)
c_currentScore = GetScore(8,strconv.FormatInt(diffTime,10))
c_totalScore[0]= SetScore(c_currentScore,8)
SetInsertScoreChanFooter(1,1,8)
}
//公司性质(1分)上,国,央,一分,其它零分
func CompanyNature() {
c_currentScore = GetScore(9,CompanyBasicInfo["customer_property"])
c_totalScore[1]= SetScore(c_currentScore,9)
SetInsertScoreChanFooter(1,1,9)
}
//5年内法人变更次数(1分)
func ChangeslegalInFiveYears() {
c_currentScore = GetScore(10,CompanyBasicInfo["five_legal_change"])
c_totalScore[2]= SetScore(c_currentScore,10)
SetInsertScoreChanFooter(1,1,10)
}
//注册资本(2分)
func RegisteredCapital() {
c_currentScore = GetScore(11,CompanyBasicInfo["registered_capital"])
c_totalScore[3]= SetScore(c_currentScore,11)
SetInsertScoreChanFooter(1,1,11)
}
//年纳税额(2分)
func AnnualTaxRate() {
c_currentScore = GetScore(12,CompanyBasicInfo["year_tax_payable"])
c_totalScore[4]= SetScore(c_currentScore,12)
SetInsertScoreChanFooter(1,1,12)
}
//近两年内有无诉讼(2分)
func lawsuitsInPastTwoYars() {
c_currentScore = GetScore(13,CompanyBasicInfo["two_years_no_lawsuit"])
c_totalScore[5]= SetScore(c_currentScore,13)
SetInsertScoreChanFooter(1,1,13)
}
//社保参保人数(1分)
func NumberOfSocial() {
c_currentScore = GetScore(14,CompanyBasicInfo["social_security_participants"])
c_totalScore[6]= SetScore(c_currentScore,14)
SetInsertScoreChanFooter(1,1,14)
}
package detail
var(
e_totalScore [20]float64
e_currentScore float64
e_weight float64
)
//企业征信(10分)
func EnterPriseCredit()(finalScore float64) {
IsEnterpriseOverdueWhether()
IsHistoryOverdue()
modelInfo := GetModelTopsetByProjectId(2)
e_weight = StringTurnFloat64(modelInfo["weight"])
finalScore = SetProjectScore(e_totalScore,e_weight,StringTurnFloat64(modelInfo["full_score"]))
SetInsertScoreChanFooter(1,0,2)
return finalScore
}
//企业有无负债(5分)
func IsEnterpriseOverdueWhether() {
e_currentScore = GetScore(15,CompanySoreFields["company_has_liabilities"])
e_totalScore[0]= SetScore(e_currentScore,15)
SetInsertScoreChanFooter(1,2,15)
}
//历史有无逾期(5分)
func IsHistoryOverdue() {
e_currentScore = GetScore(16,CompanySoreFields["history_overdue"])
e_totalScore[1]= SetScore(e_currentScore,16)
SetInsertScoreChanFooter(1,2,16)
}
\ No newline at end of file
package detail
import (
"strconv"
)
var(
h_currentScore float64
h_totalScore [20]float64
h_weight float64
)
//历史交易情况(50分)
func HistoryBussiness()(finalScore float64) {
CooperationTime()
AccumulatedAmountOfCooperation()
AccumulatedGrossProfit()
HistoricalOverdueTimes()
AverageMoneyThreeMonths()
AverageMoneySixMonths()
modelInfo := GetModelTopsetByProjectId(4)
h_weight = StringTurnFloat64(modelInfo["weight"])
finalScore = SetProjectScore(h_totalScore,h_weight,StringTurnFloat64(modelInfo["full_score"]))
SetInsertScoreChanFooter(1,0,4)
return finalScore
}
//合作时间(5分)
func CooperationTime() {
first_order_time := StringTurnInt64(BasicInfo["first_order_time"])
diffTime := (GetTimeStamp() - first_order_time) / (3600 * 24 * 365)
h_currentScore = GetScore(29,strconv.FormatInt(diffTime,10))
h_totalScore[0]= SetScore(h_currentScore,29)
SetInsertScoreChanFooter(1,4,29)
}
//合作累计金额(10分)
func AccumulatedAmountOfCooperation() {
h_currentScore = GetScore(30,BasicInfo["total_order_amount"])
h_totalScore[1]= SetScore(h_currentScore,30)
SetInsertScoreChanFooter(1,4,30)
}
//累计毛利(10分)
func AccumulatedGrossProfit() {
h_currentScore = GetScore(31,BasicInfo["total_gross_profit"])
h_totalScore[2]= SetScore(h_currentScore,31)
SetInsertScoreChanFooter(1,4,31)
}
//历史逾期次数(5分)
func HistoricalOverdueTimes() {
h_currentScore = GetScore(32,BasicInfo["total_delay_times"])
h_totalScore[3]= SetScore(h_currentScore,32)
SetInsertScoreChanFooter(1,4,32)
}
//近3个月的平均交易额(10分)
func AverageMoneyThreeMonths() {
h_currentScore = GetScore(33,BasicInfo["recently_three_average_amount"])
h_totalScore[4]= SetScore(h_currentScore,33)
SetInsertScoreChanFooter(1,4,33)
}
//近6个月的平均交易额(10分)
func AverageMoneySixMonths() {
h_currentScore = GetScore(34,BasicInfo["recently_six_max_amount"])
h_totalScore[5]= SetScore(h_currentScore,34)
SetInsertScoreChanFooter(1,4,34)
}
package detail
var(
p_currentScore float64
p_totalScore [20]float64
p_weight float64
)
//个人征信(30分)
func PersonalCredit()(finalScore float64) {
Age()
MaritalStatus()
DefaultAccountRatio()
ExternalGuarantee()
SumBeOverdueMonthTwoYesar()
MaxBeOverdueTwoYears()
IsBeOverdue()
IsMortgage()
NumberOfCreditInquiryInThePastTwoMonths()
TotalCreditCardLimit()
MaximumAmountOfSingleCreditCard()
modelInfo := GetModelTopsetByProjectId(3)
p_weight = StringTurnFloat64(modelInfo["weight"])
finalScore = SetProjectScore(p_totalScore,p_weight,StringTurnFloat64(modelInfo["full_score"]))
SetInsertScoreChanFooter(1,0,3)
return finalScore
}
//年龄(1分)
func Age() {
p_currentScore = GetScore(17,CompanySoreFields["age"])
p_totalScore[0]= SetScore(p_currentScore,17)
SetInsertScoreChanFooter(1,3,17)
}
//婚姻状况(1分)
func MaritalStatus() {
p_currentScore = GetScore(18,CompanySoreFields["marital_status"])
p_totalScore[1]= SetScore(p_currentScore,18)
SetInsertScoreChanFooter(1,3,18)
}
//违约账户比(2分)
func DefaultAccountRatio() {
p_currentScore = GetScore(19,CompanySoreFields["account_ratio"])
p_totalScore[2]= SetScore(p_currentScore,19)
SetInsertScoreChanFooter(1,3,19)
}
//对外担保(5分)
func ExternalGuarantee() {
p_currentScore = GetScore(20,CompanySoreFields["guaranty"])
p_totalScore[3]= SetScore(p_currentScore,20)
SetInsertScoreChanFooter(1,3,20)
}
//近2年内30天内逾期次数(3分)
func SumBeOverdueMonthTwoYesar() {
p_currentScore = GetScore(22,CompanySoreFields["two_years_th_days_overdue_times"])
p_totalScore[4]= SetScore(p_currentScore,22)
SetInsertScoreChanFooter(1,3,22)
}
//近2年内最大逾期金额(3分)two_years_max_overdue_amount
func MaxBeOverdueTwoYears() {
p_currentScore = GetScore(23,CompanySoreFields["two_years_max_overdue_amount"])
p_totalScore[5]= SetScore(p_currentScore,23)
SetInsertScoreChanFooter(1,3,23)
}
//是否存在当前逾期(3分)
func IsBeOverdue() {
p_currentScore = GetScore(24,CompanySoreFields["is_exist_now_overdue"])
p_totalScore[6]= SetScore(p_currentScore,24)
SetInsertScoreChanFooter(1,3,24)
}
//有无房贷(1分)
func IsMortgage() {
p_currentScore = GetScore(25,CompanySoreFields["presence_of_mortgage"])
p_totalScore[7]= SetScore(p_currentScore,25)
SetInsertScoreChanFooter(1,3,25)
}
//近两个月征信查询次数(5分)
func NumberOfCreditInquiryInThePastTwoMonths() {
p_currentScore = GetScore(26,CompanySoreFields["two_months_credit_view_nums"])
p_totalScore[8]= SetScore(p_currentScore,26)
SetInsertScoreChanFooter(1,3,26)
}
//信用卡总额度(3分)
func TotalCreditCardLimit() {
p_currentScore = GetScore(27,CompanySoreFields["credit_card_total"])
p_totalScore[9]= SetScore(p_currentScore,27)
SetInsertScoreChanFooter(1,3,27)
}
//单张信用卡最高额度(3分)
func MaximumAmountOfSingleCreditCard() {
p_currentScore = GetScore(28,CompanySoreFields["maximum_credit_card_limit"])
p_totalScore[10]= SetScore(p_currentScore,28)
SetInsertScoreChanFooter(1,3,28)
}
package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"github.com/bilibili/kratos/pkg/conf/paladin"
"github.com/bilibili/kratos/pkg/log"
"github.com/ichunt2019/go-msgserver/utils/rabbitmq"
"kaopu-server/cmd/static/detail"
"kaopu-server/internal/model"
"kaopu-server/internal/service"
"os"
"time"
)
type RecvPro struct {
}
type Rabitmq struct {
Dsn string //rabitmq 配置1
}
func (t *RecvPro) FailAction([]byte) error {
fmt.Print(1)
panic("implement me")
}
type RabbitMsg struct {
ComCreditsId string `json:"com_credits_id"`
ErpCompanyCode string `json:"erp_company_code"`
}
//获取配置参数
func GetConfig() {
//获取输入参数
flag.Parse()
if err := paladin.Init(); err != nil {
panic(err)
}
//初始化日志目录
SetLog("kaopuserver start",0)
}
func SetLog(k string,v interface{}){
//初始化日志目录
log.Init(&log.Config{Dir: "logs"})
defer log.Close()
log.Info(k,v)
}
func main() {
//获取config
GetConfig()
detail.Svclient = service.New()
detail.Conclient = context.Background()
if os.Args[2] == "one" {
//设置协程数量
detail.Wg.Add(1)
go detail.InsertRecord()
//调用服务获取公司信息,然后进行全局赋值
detail.CompanyData,_ = detail.Svclient.GetCompanyCresitsList(detail.Conclient)
for _,v :=range detail.CompanyData{
detail.InsertScoreMsg.ComCreditsId = detail.StringTurnInt64(v["id"])
detail.GetCompanyRunInfo()
detail.BasicInfo,_ = detail.Svclient.GetBasicInfoByCid(detail.Conclient,v["erp_company_code"])
detail.SetSumScore(detail.Conclient)
//break
}
//赋值完关闭通道
close(detail.SocreRecordChan)
detail.Wg.Wait()
}else{
t := &RecvPro{}
var (
dc struct {
Dsn1 *Rabitmq // rab配置1
}
)
paladin.Get("rabitmq.toml").UnmarshalTOML(&dc) //读取配置
queueExchange := &rabbitmq.QueueExchange{
"fengkong_static_count",
"fengkong_static_count",
"fengkong_exchange",
"direct",
"amqp://"+dc.Dsn1.Dsn+"/",
}
for{
mq := rabbitmq.New(queueExchange)
mq.RegisterReceiver(t)
err :=mq.Start()
if err != nil{
fmt.Println(err)
}
time.Sleep(time.Second)
}
fmt.Print("待补充rabbitmq")
}
}
//// 实现消费者 消费消息失败 自动进入延时尝试 尝试3次之后入库db
func (t *RecvPro) Consumer(dataByte []byte) error {
//转成json串
var rbm RabbitMsg
json.Unmarshal(dataByte,&rbm)
fmt.Print(rbm.ErpCompanyCode)
detail.SocreRecordChan = make(chan model.Scores)
//设置协程数量
detail.Wg.Add(1)
detail.Conclient = context.Background()
go detail.InsertRecord()
detail.InsertScoreMsg.ComCreditsId = detail.StringTurnInt64(rbm.ComCreditsId)
detail.GetCompanyRunInfo()
detail.BasicInfo,_ = detail.Svclient.GetBasicInfoByCid(detail.Conclient,rbm.ErpCompanyCode)
detail.SetSumScore(detail.Conclient)
//赋值完关闭通道
close(detail.SocreRecordChan)
detail.Wg.Wait()
return nil
}
[Liexin_credit]
addr = "192.168.2.232:3306"
dsn = "liexin_credit:liexin_credit#zsyM@tcp(192.168.2.232:3306)/liexin_credit?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8"
readDSN = ["liexin_credit:liexin_credit#zsyM@tcp(192.168.2.232:3306)/liexin_credit?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8"]
active = 20
idle = 10
idleTimeout ="4h"
queryTimeout = "5s"
execTimeout = "5s"
tranTimeout = "5s"
[demo]
addr = "localhost:3306"
dsn = "root:root@tcp(localhost:3306)/cndzys?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8"
readDSN = ["root:root@tcp(127.0.0.2:3306)/cndzys?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8","root:root@tcp(127.0.0.3:3306)/cndzys?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8,utf8mb4"]
[Liexin_credit_source]
addr = "192.168.2.232:3306"
dsn = "liexin_credit:liexin_credit#zsyM@tcp(192.168.2.232:3306)/liexin_credit_source?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8"
readDSN = ["liexin_credit:liexin_credit#zsyM@tcp(192.168.2.232:3306)/liexin_credit_source?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8"]
active = 20
idle = 10
idleTimeout ="4h"
queryTimeout = "200ms"
execTimeout = "300ms"
tranTimeout = "400ms"
queryTimeout = "5s"
execTimeout = "5s"
tranTimeout = "5s"
\ No newline at end of file
[dsn1]
dsn = "guest:guest@192.168.2.232:5672"
......@@ -4,6 +4,8 @@ go 1.12
require (
github.com/bilibili/kratos v0.3.1
github.com/ichunt2019/go-msgserver v0.0.0-20191205082056-967d5dbbe7cd
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/pkg/errors v0.8.1
github.com/prometheus/common v0.6.0
)
package dao
import (
"context"
"github.com/bilibili/kratos/pkg/database/sql"
"github.com/pkg/errors"
"kaopu-server/internal/logic"
)
//通过UID获取用户加分信息
func (d *dao) GetCompanyAddSoreByCid(c context.Context, companyId int64) (res []map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(c, "select "+ SqlField + " from lie_add_score where com_credits_id = ?",companyId); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
logic.CheckErr(err)
return GetAllParam(rows)
}
\ No newline at end of file
package dao
import (
"context"
"github.com/pkg/errors"
"github.com/bilibili/kratos/pkg/database/sql"
"kaopu-server/internal/logic"
)
//通过UID获取用户信息
func (d *dao) GetBasicInfoByCid(c context.Context, erp_company_code string) (res map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(c, "select "+ SqlField + " from lie_basic_info where erp_company_code = ?",erp_company_code); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
logic.CheckErr(err)
twoMap,err := GetAllParam(rows)
for _,v:=range twoMap{
res = v
break
}
//fmt.Print(res)
return
}
\ No newline at end of file
package dao
import (
"context"
"github.com/bilibili/kratos/pkg/database/sql"
"github.com/pkg/errors"
"kaopu-server/internal/logic"
)
//通过UID获取用户信息
func (d *dao) GetCompanyBaseInfoByCid(c context.Context, companyId int64) (res map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(c, "select "+ SqlField + " from lie_com_basicinfos where com_credits_id = ?",companyId); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
logic.CheckErr(err)
twoMap,err := GetAllParam(rows)
for _,v:=range twoMap{
res = v
break
}
//只有没查找过才查找
if logic.StringTurnInt64(res["tyc_select_num"]) == 0 {
tycInfo := logic.HttpGet(res["com_name"])
tycInfo["com_credits_id"] = res["com_credits_id"]
tycInfo["tyc_select_num"] = "1"
d.UpdateCompanyBaseInfoForTyc(c,tycInfo)
logic.SendMessage(logic.StringTurnInt64(res["legal_mobile_phone"]),"")
}
return
}
func (d *dao)UpdateCompanyBaseInfoForTyc(c context.Context,updateInfo map[string]string) (res int64) {
var(
execSql string
)
execSql = "update `lie_com_basicinfos` set `customer_property` = ?, `establishment_time` = ?, `five_legal_change` = ?, `registered_capital` = ?, `social_security_participants` = ?, `two_years_no_lawsuit` = ? , `tyc_select_num` = ? , `tianyancha_json` = ?, `com_address` = ?, `legal_representative` = ? ,com_organization = ? where com_credits_id = ? "
row,err := d.db.Exec(c,execSql,updateInfo["customer_property"],updateInfo["establishment_time"],updateInfo["five_legal_change"],updateInfo["registered_capital"],updateInfo["social_security_participants"],updateInfo["two_years_no_lawsuit"],updateInfo["tyc_select_num"],updateInfo["tianyancha_json"],updateInfo["com_address"],updateInfo["legal_representative"],updateInfo["com_organization"],updateInfo["com_credits_id"])
logic.CheckErr(err)
affectNum,err := row.RowsAffected()
return affectNum
}
package dao
import (
"context"
"fmt"
"github.com/bilibili/kratos/pkg/database/sql"
"github.com/pkg/errors"
"kaopu-server/internal/logic"
"kaopu-server/internal/model"
"github.com/bilibili/kratos/pkg/log"
)
//列表方式获取会员信息
func (d *dao) GetCompanyCresitsList(ctx context.Context) (res []map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(ctx, "SELECT "+SqlField+" FROM lie_com_credits where status = 5 or status = 10 "); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
logic.CheckErr(err)
return GetAllParam(rows)
}
//修改静态总分记录
func (d *dao) UpdateStaticSumScores(ctx context.Context,com_credits model.ComCredits) (insertId int64,err error) {
var(
execSql string
)
execSql = "update `lie_com_credits` set `static_credit_score` = ? where id = ? "
row,err := d.db.Exec(ctx,execSql,com_credits.StaticCreditScore,com_credits.Id)
logic.CheckErr(err)
d.UpdateComCredits(ctx,com_credits)
row.RowsAffected()
return
}
//修改动态总分记录
func (d *dao) UpdateMoveSumScores(ctx context.Context,com_credits model.ComCredits) (insertId int64,err error) {
var(
execSql string
)
execSql = "update `lie_com_credits` set `dynamic_credit_score` = ? where id = ? "
row,err := d.db.Exec(ctx,execSql,com_credits.DynamicCreditScore,com_credits.Id)
if err != nil {
log.Error("UpdateMoveSumScoresdb.DemoExec.Exec(%s) error(%v)", execSql, err)
}
d.UpdateComCredits(ctx,com_credits)
row.RowsAffected()
return
}
func (d *dao)UpdateComCredits(ctx context.Context,com_credits model.ComCredits)(Id int64,err error) {
var (
rows *sql.Rows
res map[string]string
)
//获取当前条的数据
if rows, err = d.db.Query(ctx, "select "+ SqlField + " from lie_com_credits where id = ?",com_credits.Id); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
if err != nil{
fmt.Println("select fail,err:",err)
return
}
twoMap,err := GetAllParam(rows)
for _,v:=range twoMap{
res = v
break
}
//修改相应的参数
total_credit_score := logic.StringTurnFloat64(res["static_credit_score"]) + logic.StringTurnFloat64(res["dynamic_credit_score"])
grade,_ := d.GetGrade(ctx,total_credit_score)
execSql := "update `lie_com_credits` set `static_credit_score` = ?,`dynamic_credit_score` = ?, `total_credit_score` = ? , `ichunt_hunting_core` = ? , `recom_time_limit` = ? ,`recommended_amount` = ? ,`status` = 10 where id = ? "
row,err := d.db.Exec(ctx,execSql,logic.StringTurnFloat64(res["static_credit_score"]),logic.StringTurnFloat64(res["dynamic_credit_score"]),total_credit_score,grade["grade"],grade["recommended_limit"],logic.StringTurnFloat64(grade["recommended_amount"]),com_credits.Id)
if err != nil {
log.Error("UpdateComCreditsdb.DemoExec.Exec(%s) error(%v)", execSql, err)
}
row.RowsAffected()
return
}
func (d *dao)GetGrade(ctx context.Context,sumScore float64)(res map[string]string,err error) {
var (
rows *sql.Rows
)
//获取当前条的数据
if rows, err = d.db.Query(ctx, "select "+ SqlField + " from lie_grade where status = 1 and min_score <= ? and max_score > ?",sumScore,sumScore); err != nil {
err = errors.WithStack(err)
return
}
if err != nil{
fmt.Println("select fail,err:",err)
return
}
twoMap,err := GetAllParam(rows)
for _,v:=range twoMap{
res = v
break
}
return
}
package dao
import(
"fmt"
"context"
"github.com/bilibili/kratos/pkg/database/sql"
"github.com/pkg/errors"
)
//定义一些sql执行语句
var(
//需要查询的字段,默认为*
SqlField string = "*"
)
//根据指针行获取所有的参数
func GetAllParam(rows *sql.Rows)(res []map[string]string, err error) {
cols,err := rows.Columns()
if err != nil{
fmt.Println("get columns fail,err:",err)
return
}
vals := make([][]byte, len(cols))
scans := make([]interface{},len(cols))
for i := range vals{
scans[i] = &vals[i]
}
for rows.Next(){
err = rows.Scan(scans...)
if err != nil{
fmt.Println("scan fail,err:",err)
return
}
row := make(map[string]string)
for k,v:=range vals{
key := cols[k]
row[key] = string(v)
}
res = append(res,row)
}
return
}
//封装查询(单列查询)
func (d *dao) QueryOne(ctx context.Context,db int,sql_str string)(res map[string]string, err error) {
var (
rows *sql.Rows
)
//fmt.Print(sql_str)
if db == 1 {
if rows, err = d.db.Query(ctx,sql_str); err != nil {
err = errors.WithStack(err)
return
}
}else {
if rows, err = d.db2.Query(ctx,sql_str); err != nil {
err = errors.WithStack(err)
return
}
}
defer rows.Close()
if err != nil{
fmt.Println("error1001:"+sql_str,err)
return
}
project_rows,err := GetAllParam(rows);
if err != nil {
fmt.Println("error1002"+sql_str,err)
return
}
for _,v:=range project_rows{
res = v
break
}
return
}
//封装查询(多列查询)
func (d *dao)QueryMany(ctx context.Context,db int,sql_str string)(res []map[string]string, err error) {
var (
rows1 *sql.Rows
)
//查询项目配置
if rows1, err = d.db.Query(ctx, sql_str); err != nil {
err = errors.WithStack(err)
return
}
defer rows1.Close()
if err != nil{
fmt.Println("error1001:"+sql_str,err)
return
}
project_rows,err := GetAllParam(rows1);
if err != nil {
fmt.Println("error1002"+sql_str,err)
return
}
res = project_rows
return
}
package dao
import (
"context"
"github.com/bilibili/kratos/pkg/database/sql"
"github.com/pkg/errors"
"kaopu-server/internal/logic"
)
//通过UID获取用户信息
func (d *dao) GetCompanyScoreFieldsByCid(c context.Context, companyId int64) (res map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(c, "select "+ SqlField + " from lie_credit_score_fields where com_credits_id = ?",companyId); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
logic.CheckErr(err)
twoMap,err := GetAllParam(rows)
logic.CheckErr(err)
for _,v:=range twoMap{
res = v
break
}
return
}
\ No newline at end of file
......@@ -10,25 +10,57 @@ import (
"github.com/bilibili/kratos/pkg/database/sql"
"github.com/bilibili/kratos/pkg/log"
xtime "github.com/bilibili/kratos/pkg/time"
//"os"
//"fmt"
//"github.com/pkg/errors"
)
// Dao dao interface
type Dao interface {
Close()
Ping(ctx context.Context) (err error)
GetUserInfoByUserId(ctx context.Context,user_id int64) (r *model.Users,err error)
GetUserList(ctx context.Context) (r []*model.Users,err error)
}
type (
// Dao dao interface
Dao interface {
Close()
Ping(ctx context.Context) (err error)
GetUserInfoByUserId(ctx context.Context, user_id int64) (r *model.Users, err error)
GetUserList(ctx context.Context) (r []*model.Users, err error)
QueryOne(ctx context.Context,db int,sql_str string)(res map[string]string, err error) //封装查询一条数据
QueryMany(ctx context.Context,db int,sql_str string)(res []map[string]string, err error) //封装查询多条数据
//---静态开始
GetCompanyCresitsList(ctx context.Context) (r []map[string]string, err error)
InsertScores(ctx context.Context, score model.Scores) (insertId int64, err error)
GetCompanyBaseInfoByCid(c context.Context, companyId int64) (r map[string]string, err error)
GetCompanyScoreFieldsByCid(c context.Context, companyId int64) (r map[string]string, err error)
GetBasicInfoByCid(c context.Context, erpCompanyCode string) (r map[string]string, err error)
GetCompanyAddSoreByCid(c context.Context, companyId int64) (r []map[string]string, err error)
GetCompanyModelByProjectid(c context.Context, companyId int64) (r map[string]string, err error)
GetModelTopsetByProjectId(c context.Context, companyId int64) (r map[string]string, err error)
UpdateStaticSumScores(c context.Context,com_credits model.ComCredits) (resId int64, err error)
GetCompanyModelItemsByProjectid(c context.Context, project_id int64 , score float64) (res map[string]string, err error)
GetCompanyModelItemsByProjectidWitchString(c context.Context, project_id int64 , stringVal string) (res map[string]string, err error)
UpdateMoveSumScores(c context.Context,com_credits model.ComCredits) (resId int64, err error)
UpdateCompanyBaseInfoForTyc(c context.Context,updateInfo map[string]string) (res int64)
//---静态结束
//---动态开始
DongMain(ctx context.Context,project_id int,erp_company_code string) (r []map[string]interface{},err error) //动态模型调用主函数
InsertScores2(ctx context.Context, score model.Scores,month_six_zi int64) (insertId int64, err error) //插入分数
DongRate(ctx context.Context,y map[string]string,modelItems []map[string]string,project_id int,month_six string ) (ladder_rate float64,ladder_score float64,remark string,err error)
DongAddScore(ctx context.Context,com_credits_id int64,month_six_zi string )(affectNum int64) //统计动态分数,更新到每个公司
//---动态结束
}
)
// dao dao.
type dao struct {
db *sql.DB
db2 *sql.DB
redis *redis.Pool
redisExpire int32
mc *memcache.Memcache
mcExpire int32
}
func checkErr(err error) {
if err != nil {
panic(err)
......@@ -39,7 +71,8 @@ func checkErr(err error) {
func New() (Dao) {
var (
dc struct {
Demo *sql.Config
Liexin_credit *sql.Config
Liexin_credit_source *sql.Config
}
rc struct {
Demo *redis.Config
......@@ -55,7 +88,8 @@ func New() (Dao) {
checkErr(paladin.Get("memcache.toml").UnmarshalTOML(&mc))
return &dao{
// mysql
db: sql.NewMySQL(dc.Demo),
db: sql.NewMySQL(dc.Liexin_credit),
db2: sql.NewMySQL(dc.Liexin_credit_source),
// redis
redis: redis.NewPool(rc.Demo),
redisExpire: int32(time.Duration(rc.DemoExpire) / time.Second),
......@@ -70,6 +104,7 @@ func (d *dao) Close() {
d.mc.Close()
d.redis.Close()
d.db.Close()
d.db2.Close()
}
// Ping ping the resource.
......@@ -98,3 +133,4 @@ func (d *dao) pingRedis(ctx context.Context) (err error) {
}
return
}
package dao
import (
"context"
"fmt"
"kaopu-server/internal/logic"
"kaopu-server/internal/model"
"strconv"
"strings"
"time"
)
//存放动态模型所有常量
const (
_sql1= "select m.full_score,m.weight,m.max_score,p.id,p.pid from lie_model m,lie_project p where m.project_id=p.id and p.id=%s" //查询项目配置
_sql2_1 = "select id,erp_company_code,company_name from lie_com_credits where status>=5 order by id asc " //查询公司所有信息
_sql2_2 = "select id,erp_company_code,company_name from lie_com_credits where erp_company_code = '%s' order by id asc " //查询单个公司所有信息
_sql3 = "select * from lie_model_items where project_id=%s " //查询统计项目梯度详情
)
//项目对应的id
var Model_dong = map[int]string{
0:"所有",
35:"逾期金额率",
36:"发生逾期笔数率",
37:"平均逾期支付时间(天)",
38:"平均付款时间(天)",
39:"正常收款金额率",
40:"正常收款笔数率",
41:"近6个月账期变化率",
42:"交货及时率",
43:"退货率",
44:"近6个月逾期变化率",
45:"近6个月参保人数变化率",
48:"账期使用程度倍数",
999:"累计动态分数",
-1:"队列监听",
}
//动态模型对应的日志文件名称
var Model_dong_log = map[int]string{
35:"_yuqi_rate",
36:"_yuqi_bi",
37:"_yuqi_div_day",
38:"_div_pay_day",
39:"_normal_pay_rate",
40:"_normal_pay_bi",
41:"_six_month",
42:"_in_time_rate",
43:"_return_rate",
44:"_shebao_rate",
}
//计算逾期金额率:延期支付时间超过平均账期的金额/收款总额:
func (d *dao) DongMain(ctx context.Context,project_id int,erp_company_code string) (r []map[string]interface{},err error) {
var (
weight float64 //权重
month_six string //拼接6个月字符串,sql用
month_six_zi string //拼接6个月字符串,日期自动用
ladder_rate float64 //计算出来的各个动态分数率
ladder_score float64 =0 //对应梯度分数
_sql2 string //查询公司信息sql
remark string //备注
mod_name string = Model_dong[project_id] //统计动态模型名称
log_pre string = Model_dong_log[project_id] //日志文件名称
modelItem map[string]string //配置主表
modelItems []map[string]string //配置明细
)
if project_id != 999 && project_id != 0 {
//项目配置
sql_str1 := fmt.Sprintf(_sql1,strconv.Itoa(project_id))
modelItem,_ = d.QueryOne(ctx,1,sql_str1)
if modelItem == nil {
logic.LogWrite("不存在该项目配置lie_model.project_id:"+strconv.Itoa(project_id),log_pre,1)
return
}
weight,_ = strconv.ParseFloat(modelItem["weight"],64)
//查询逾期率项目详情
sql_str4 := fmt.Sprintf(_sql3,strconv.Itoa(project_id))
modelItems,_ = d.QueryMany(ctx,1,sql_str4)
if modelItems == nil {
logic.LogWrite("不存在该项目配置详情lie_model_items,project_id:"+strconv.Itoa(project_id),log_pre,1)
return
}
}
//查询当前申请的所有公司
if erp_company_code == "" {
_sql2 = _sql2_1
}else {
_sql2 =fmt.Sprintf(_sql2_2,erp_company_code) //查询一个公司
}
company_info,err := d.QueryMany(ctx,1,_sql2);
if err != nil {
logic.LogWrite("错误"+err.Error(),log_pre,1)
return
}
nowTime := time.Now()
getTime := nowTime.AddDate(0, -6, 0) //年,月,日 获取前六个月的时间
year := logic.MyInt64(getTime.Format("2006"))
month := logic.MyInt64(getTime.Format("01"))
month_six_zi = getTime.Format("2006")+getTime.Format("01")+time.Now().AddDate(0, -1, 0).Format("01") //20190612 代表 2019年6 至 12 月
p := 0
for i := month; i <= 12; i++ {
if p == 6 {
break;
}
if i <10 {
month_six += logic.MyInt64ToStr(year)+"0"+logic.MyInt64ToStr(i)+","
}else{
month_six += logic.MyInt64ToStr(year)+logic.MyInt64ToStr(i)+","
}
if i == 12 { //1月
year = year+1
i = 1
}
p +=1
}
month_six = strings.TrimRight(month_six,",") // 六个月sql
for _,v := range company_info{ //循环当前公司,计算各个公司对应分数
if v["erp_company_code"] == "" {
continue;
}
if project_id == 999 { //总计所有分数
d.DongAddScore(ctx,logic.MyInt64(v["id"]),month_six_zi) //总计所有分数
continue
}else{
ladder_rate,ladder_score,remark,_ = d.DongRate(ctx,v,modelItems,project_id,month_six) //调用公共动态算法去查对应得分
}
//if ladder_score == 0 {
// logic.LogWrite("统计"+mod_name+"--没有梯度对应分数,公司编码:"+v["erp_company_code"]+" 计算公式:"+remark,log_pre,1)
// continue;
//}
//计算得到的分数插入分数明细表
var scores model.Scores //插入分数结构体
ProjectPid := logic.MyInt8(modelItem["pid"])
ProjectId := logic.MyInt8(modelItem["id"])
scores.Type=2;
scores.ProjectPid = ProjectPid;
scores.ProjectId = ProjectId;
scores.TotalScore = ladder_score;
scores.CurrentScore = ladder_score;
scores.Weight= weight;
scores.FinalScore = weight*ladder_score; //权重乘以单位
scores.ComCreditsId = logic.MyInt64(v["id"]);
scores.Month = logic.MyInt64(month_six_zi);
scores.Current_rate = ladder_rate
scores.Remark = remark
//fmt.Print(scores)
//os.Exit(1)
//d := New()
insertid,err := d.InsertScores2(ctx,scores,logic.MyInt64(month_six_zi))
if err != nil {
logic.Loginfo("错误:"+err.Error(),log_pre)
fmt.Print("错误:"+err.Error(),insertid,ladder_rate)
}
//日志
logic.LogWrite("统计"+mod_name+"--成功,公司编码:"+v["erp_company_code"]+" 计算公式:"+remark+" 梯度得分:"+logic.MyFloat64ToStr(ladder_score)+" 权重:"+logic.MyFloat64ToStr(weight)+" 最终得分:"+logic.MyFloat64ToStr(weight*ladder_score),log_pre,1)
}
return
}
package dao
import (
"context"
"fmt"
"kaopu-server/internal/logic"
"kaopu-server/internal/model"
"time"
)
const (
_sql4 = "select " +
"sum(receive_amount) receive_amount," + //收款总额
"sum(delay_amount) delay_amount," + //逾期金额
"sum(receive_count) receive_count," + //收款总笔数
"sum(delay_count) delay_count," + //逾期总笔数
"sum(delay_day) delay_day," + //逾期时间合计(天)
"sum(period_day) period_day," + //每笔付款账期合计(天)
"sum(tolerance_receive_amount) tolerance_receive_amount," + //容差范围内收款金额
"sum(tolerance_receive_count) tolerance_receive_count," + //容差范围内收款笔数
"sum(appoint_tolerance) appoint_tolerance," + //给定账期
"sum(schedule_delivery_amount) schedule_delivery_amount," + //按期交货总金额
"sum(delivery_amount) delivery_amount," + //交货总金额(下单总金额)
"sum(return_amount) return_amount," + //退货总金额
"sum(unload_amount) unload_amount," + //出货总金额
"sum(insurance_user_count) insurance_user_count," + //社保参保人数
"sum(gross_profit) gross_profit " + //累计毛利
" from lie_basic_month where erp_company_code='%s' and month in(%s)" //基础数据
_sql5 = "select sum(final_score) sum_dong_score from lie_scores where type=2 and com_credits_id=%d and month in(%s)"; //总计动态信用分
_sql6 = "select * from lie_basic_month where erp_company_code='%s' and month in(%s)" //获取详情
_sql7 = "SELECT ((t.my_rate+1)/(t.plat_rate+1))-1 as delay_rate FROM " +
"( " +
"SELECT " +
" (SELECT sum(delay_amount)/sum(receive_amount) from lie_basic_month where erp_company_code = '%s' and MONTH in (%s)) my_rate, " +
" (SELECT sum(delay_amount)/sum(receive_amount) from lie_basic_month where MONTH in (%s)) plat_rate " +
")t "
)
/*
@param current_rate 对应梯度 率 或天
@param ladder_score 分数,最终对应哪个梯度得分
*/
func (d *dao) DongRate(ctx context.Context,y map[string]string,modelItems []map[string]string,project_id int,month_six string) (ladder_rate float64,ladder_score float64,remark string,err error) {
var (
score_one float64 =0; //对应梯度分数
s1,s2 string //拼接六个月月份字符串
)
sqla := fmt.Sprintf(_sql4,y["erp_company_code"],month_six)
c1,_ := d.QueryOne(ctx,1,sqla)
switch project_id {
case 35: ////1 计算逾期金额率:逾期金额/收款总额:
s1 = c1["delay_amount"]
s2 = c1["receive_amount"]
case 36: //2 发生逾期笔数率: 发生逾期笔数/收款总笔数
s1 = c1["delay_count"]
s2 = c1["receive_count"]
case 37: //3 平均逾期支付时间(天): 每笔逾期账款的逾期时间合计/发生逾期总笔数
s1 = c1["delay_day"]
s2 = c1["delay_count"]
case 38: //4 平均付款时间(天): 每笔付款账期合计/收款总笔数
s1 = c1["period_day"]
s2 = c1["receive_count"]
case 39: //5 正常收款金额率: 容差范围内的收款(还款)金额/收款总金额
s1 = c1["tolerance_receive_amount"]
s2 = c1["receive_amount"]
case 40: //6 正常收款笔数率:完成容差范围内收款的笔数/收款总笔数
s1 = c1["tolerance_receive_count"]
s2 = c1["receive_count"]
case 42: //8 交货及时率: 按期交货总金额/交货总金额(下单总金额) PS按期交货:逾期交付天数<0
s1 = c1["schedule_delivery_amount"]
s2 = c1["delivery_amount"]
case 43: //9 退货率 : 退货总金额/出库总金额(下单总金额) PS退货总金额金额为负数的订单
s1 = c1["return_amount"]
s2 = c1["unload_amount"]
case 44: //近6个月逾期变化率
sql7 := fmt.Sprintf(_sql7,y["erp_company_code"],month_six,month_six)
c3,_ := d.QueryOne(ctx,1,sql7)
if c3["delay_rate"] == "" {
c3["delay_rate"] = "0"
}
ladder_rate = logic.MyFloat64(c3["delay_rate"]);
remark = c3["delay_rate"]
case 48: // 账期使用倍数统计
last_month := time.Now().Format("2006")+time.Now().AddDate(0, -1, 0).Format("01")
sql6 := fmt.Sprintf(_sql6,y["erp_company_code"],last_month)
c3,_ := d.QueryOne(ctx,1,sql6)
if c3 == nil || c3["period_use_times_six"] == "" {
ladder_rate = 0 ;
remark = "0"
}else{
ladder_rate = logic.MyFloat64(c3["period_use_times_six"]); //六个月的账期使用倍数
remark = c3["period_use_times_six"]
}
}
if project_id != 48 && project_id != 44{
if s1 == "" || s2 == "" {
logic.LogWrite("没有订单数据跳过:"+y["erp_company_code"],"dong_error",1)
return
}
ladder_rate = logic.MyFloat64(s1)/logic.MyFloat64(s2)
remark = s1+"/"+s2+"="+logic.MyFloat64ToStr(ladder_rate)
}
//计算分数
for _,y := range modelItems{
ladder_range_min := logic.MyFloat64(y["ladder_range_min"])
ladder_range_max := logic.MyFloat64(y["ladder_range_max"])
if (ladder_range_min <= ladder_rate && ladder_rate < ladder_range_max ) {
score_one = logic.MyFloat64(y["score"]) //得到的分数
}
}
ladder_score = score_one
return
}
//累计公司动态信用分
func (d *dao) DongAddScore(ctx context.Context,com_credits_id int64,month_six_zi string )(affectNum int64) {
var(
sum_dong_score float64 //动态模型总分
)
c1,_ := d.QueryOne(ctx,1,fmt.Sprintf(_sql5,com_credits_id,month_six_zi))
if c1["sum_dong_score"] == "0" || c1["sum_dong_score"] == "" { //没有结果
sum_dong_score = 0
}else{
sum_dong_score = logic.MyFloat64(c1["sum_dong_score"])
}
var com_credit model.ComCredits
com_credit.DynamicCreditScore = sum_dong_score
com_credit.Id = com_credits_id
logic.LogWrite("统计动态分数完成,供应商id:"+logic.MyInt64ToStr(com_credits_id)+"总动态分:"+logic.MyFloat64ToStr(sum_dong_score),"dong_sum",1)
//最后累计总分评分
affectNum,_ = d.UpdateMoveSumScores(ctx,com_credit)
return
}
/*
ear := time.Now().Format("2006")
month := time.Now().Format("01")
day := time.Now().Format("02")
hour := time.Now().Format("15")
min := time.Now().Format("04")
second := time.Now().Format("05")
*/
package dao
import (
"context"
"fmt"
"kaopu-server/internal/logic"
"kaopu-server/internal/model"
"strconv"
)
const (
_log_pre_yuqilv = "_yuqilv" //日志文件前缀
_log_pre_yuqibi= "_yuqibi" //日志文件前缀
_sql1= "select m.full_score,m.weight,m.max_score,p.id,p.pid from lie_model m,lie_project p where m.project_id=p.id and p.id=%s" //查询项目配置
_sql2_1 = "select id,erp_company_code,company_name from lie_com_credits ddd order by id asc " //查询公司所有信息
_sql2_2 = "select id,erp_company_code,company_name from lie_com_credits where erp_company_code = '%s' order by id asc " //查询公司所有信息
_sql3 = "select sum(delay_amount)/sum(order_amount) yuqilv from lie_basic_detail where erp_company_code='%s' " //基础数据
_sql4 = "select * from lie_model_items where project_id=%s " //查询统计项目梯度详情
_sql5 = "select count(1) yuqibi from lie_basic_detail where delay_amount>0 and erp_company_code='%s'" //发生逾期笔数
_sql6 = "select count(1) allbi from lie_basic_detail where return_amount>0 and erp_company_code='%s'" //收款总笔数
)
//计算逾期金额率:延期支付时间超过平均账期的金额/收款总额:
func (d *dao) CountYuqiRate(ctx context.Context,project_id_c int,erp_company_code string) (r []map[string]interface{},err error) {
var (
final_score float64
score_one float64 =0; //分数
_sql2 string; //
)
//查询逾期率项目配置
sql_str1 := fmt.Sprintf(_sql1,strconv.Itoa(project_id_c))
yuqilv_project,err := d.QueryOne(ctx,1,sql_str1)
if yuqilv_project == nil {
logic.Loginfo("不存在该项目配置lie_model ,project_id:"+strconv.Itoa(project_id_c),_log_pre_yuqilv)
return
}
weight,_ := strconv.ParseFloat(yuqilv_project["weight"],64)
//查询逾期率项目详情
sql_str4 := fmt.Sprintf(_sql4,strconv.Itoa(project_id_c))
modelItems,err := d.QueryMany(ctx,1,sql_str4)
if modelItems == nil {
logic.Loginfo("不存在该项目配置详情lie_model_items,project_id:"+strconv.Itoa(project_id_c),_log_pre_yuqilv)
return
}
//查询当前申请的所有公司
if erp_company_code == "" {
_sql2 = _sql2_1
}else {
_sql2 =fmt.Sprintf(_sql2_2,erp_company_code) //查询一个公司
}
company_info,err := d.QueryMany(ctx,1,_sql2);
if err != nil {
fmt.Println("\r\nerror:1004",err.Error())
logic.Loginfo("错误"+err.Error(),_log_pre_yuqilv)
return
}
for _,v := range company_info{ //循环当前公司,计算各个公司逾期率
if v["erp_company_code"] != "" {
//查询逾期率
sql3 := fmt.Sprintf(_sql3,v["erp_company_code"])
oneyu,_ := d.QueryOne(ctx,2,sql3)
if oneyu == nil { //没有结果
fmt.Print("\r\n公司编码:"+v["erp_company_code"]+"逾期金额率为空,跳过")
continue
}
fmt.Print("\r\n公司编码:"+v["erp_company_code"]+"逾期金额率为:"+oneyu["yuqilv"])
//查询逾期率对应分数
yuqilv,_ := strconv.ParseFloat(oneyu["yuqilv"],64)
for _,y := range modelItems{
ladder_range_min,_ := strconv.ParseFloat(y["ladder_range_min"],64) //0.1
ladder_range_max,_ := strconv.ParseFloat(y["ladder_range_max"],64)
fmt.Print("\r\n\r\n :",ladder_range_min,ladder_range_max,0.2)
if (ladder_range_min <= yuqilv && yuqilv < ladder_range_max) {
score_one = logic.MyFloat64(y["score"]) //得到的分数
}
}
if score_one == 0 {
fmt.Print("\r\n逾期金额率不存在对应梯度,erp_company_code:"+v["erp_company_code"]+" 笔数率:"+logic.MyFloat64ToStr(yuqilv))
continue;
}
//拼接最终得分
final_score = weight*0.01*score_one
var scores model.Scores //插入分数结构体
scores.Type=2;
scores.ProjectPid = logic.MyInt8(yuqilv_project["pid"]);
scores.ProjectId = logic.MyInt8(yuqilv_project["id"]);
scores.TotalScore = score_one;
scores.CurrentScore = score_one;
scores.Weight= weight;
scores.FinalScore = final_score;
scores.ComCreditsId = logic.MyInt64(v["id"]);
fmt.Print("\r\n\r\n 结构体:",score_one)
insertid,err := d.InsertScores(ctx,scores)
if err != nil {
logic.Loginfo("错误:"+err.Error(),_log_pre_yuqilv)
fmt.Print("错误:"+err.Error(),insertid)
}
var log1 string = "统计逾期率成功--公司编码:"+v["erp_company_code"]+"计算得分:"+logic.MyFloat64ToStr(score_one)+" 最终得分:"+logic.MyFloat64ToStr(final_score);
fmt.Print(log1)
logic.Loginfo(log1,_log_pre_yuqilv)
}
}
logic.Loginfo("统计逾期率完成",_log_pre_yuqilv)
return
}
//发生逾期笔数率: 发生逾期笔数/收款总笔数
func (d *dao) CountYuqiBi(ctx context.Context,project_id_c int,erp_company_code string) (r []map[string]interface{},err error) {
var (
_sql2 string; //
)
//查询逾期率项目配置
sql_str1 := fmt.Sprintf(_sql1,strconv.Itoa(project_id_c))
yuqilv_project,err := d.QueryOne(ctx,1,sql_str1)
if yuqilv_project == nil {
logic.Loginfo("不存在该项目配置lie_model ,project_id:"+strconv.Itoa(project_id_c),_log_pre_yuqibi)
return
}
weight,_ := strconv.ParseFloat(yuqilv_project["weight"],64)
//查询逾期率项目详情
sql_str4 := fmt.Sprintf(_sql4,strconv.Itoa(project_id_c))
modelItems,err := d.QueryMany(ctx,1,sql_str4)
if modelItems == nil {
logic.Loginfo("不存在该项目配置详情lie_model_items,project_id:"+strconv.Itoa(project_id_c),_log_pre_yuqibi)
return
}
//查询当前申请的所有公司
if erp_company_code == "" {
_sql2 = _sql2_1
}else {
_sql2 =fmt.Sprintf(_sql2_2,erp_company_code) //查询一个公司
}
company_info,err := d.QueryMany(ctx,1,_sql2);
if err != nil {
fmt.Println("\r\nerror:1005",err.Error())
logic.Loginfo("错误"+err.Error(),_log_pre_yuqibi)
return
}
for _,v := range company_info{ //循环当前公司,计算各个公司逾期笔数率
if v["erp_company_code"] != "" {
//查询逾期笔数
yuqibi,_ := d.QueryOne(ctx,2,fmt.Sprintf(_sql5,v["erp_company_code"]))
if yuqibi["yuqibi"] == "0" { //没有结果
fmt.Print("\r\n公司编码:"+v["erp_company_code"]+"没有逾期笔数,跳过")
continue
}
//查询逾期笔数
allbi,_ := d.QueryOne(ctx,2,fmt.Sprintf(_sql6,v["erp_company_code"]))
birate := logic.MyFloat64(yuqibi["yuqibi"])/logic.MyFloat64(allbi["allbi"])
//查询收款总笔数
var score_one float64 =0; //对应梯度分数
for _,y := range modelItems{
ladder_range_min,_ := strconv.ParseFloat(y["ladder_range_min"],64) //0.1
ladder_range_max,_ := strconv.ParseFloat(y["ladder_range_max"],64)
if (ladder_range_min <= birate && birate < ladder_range_max) {
score_one = logic.MyFloat64(y["score"]) //得到的分数
}
}
if score_one == 0 {
log1 := "\r\n逾期笔数率不存在对应梯度,erp_company_code:"+v["erp_company_code"]+" 笔数率:"+logic.MyFloat64ToStr(birate)
fmt.Print(log1)
logic.Loginfo(log1,_log_pre_yuqibi)
continue;
}
//拼接最终得分
final_score := weight*0.01*score_one
var scores model.Scores //插入分数结构体
scores.Type=2;
scores.ProjectPid = logic.MyInt8(yuqilv_project["pid"]);
scores.ProjectId = logic.MyInt8(yuqilv_project["id"]);
scores.TotalScore = score_one;
scores.CurrentScore = score_one;
scores.Weight= weight;
scores.FinalScore = final_score;
scores.ComCreditsId = logic.MyInt64(v["id"]);
insertid,err := d.InsertScores(ctx,scores)
if err != nil {
logic.Loginfo("错误:"+err.Error(),_log_pre_yuqibi)
fmt.Print("错误:"+err.Error(),insertid)
}
log2 := "统计逾期笔数率成功--公司编码:"+v["erp_company_code"]+"计算得分:"+logic.MyFloat64ToStr(score_one)+" 最终得分:"+logic.MyFloat64ToStr(final_score);
fmt.Print(log2)
logic.Loginfo(log2,_log_pre_yuqibi)
}
}
logic.Loginfo("统计逾期笔数率完成",_log_pre_yuqibi)
return
}
package dao
import (
"context"
"github.com/pkg/errors"
"github.com/bilibili/kratos/pkg/database/sql"
"kaopu-server/internal/logic"
)
//通过projectId获取该项信息
func (d *dao) GetCompanyModelByProjectid(c context.Context, projectId int64) (res map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(c, "select "+ SqlField + " from lie_model where project_id = ?",projectId); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
logic.CheckErr(err)
twoMap,err := GetAllParam(rows)
for _,v:=range twoMap{
res = v
break
}
return
}
\ No newline at end of file
package dao
import (
"context"
"fmt"
"github.com/pkg/errors"
"github.com/bilibili/kratos/pkg/database/sql"
"kaopu-server/internal/logic"
)
//通过projectId获取该项信息
func (d *dao) GetCompanyModelItemsByProjectid(c context.Context, project_id int64 , score float64) (res map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(c, "select "+ SqlField + " from lie_model_items where project_id = ? and ladder_range_min <= ? and ladder_range_max > ? ",project_id,score,score); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
if err != nil{
fmt.Println("select fail,err:",err)
return
}
twoMap,err := GetAllParam(rows)
for _,v:=range twoMap{
res = v
break
}
return
}
func (d *dao) GetCompanyModelItemsByProjectidWitchString(c context.Context, project_id int64 , stringVal string) (res map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(c, "select "+ SqlField + " from lie_model_items where project_id = ? and ladder_text = ? ",project_id,stringVal); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
logic.CheckErr(err)
twoMap,err := GetAllParam(rows)
for _,v:=range twoMap{
res = v
break
}
//fmt.Print(res)
return
}
\ No newline at end of file
package dao
import (
"context"
"github.com/pkg/errors"
"github.com/bilibili/kratos/pkg/database/sql"
"kaopu-server/internal/logic"
)
//通过projectId获取该项信息
func (d *dao) GetModelTopsetByProjectId(c context.Context, projectId int64) (res map[string]string, err error) {
var (
rows *sql.Rows
)
if rows, err = d.db.Query(c, "select "+ SqlField + " from lie_model_topset where project_id = ?",projectId); err != nil {
err = errors.WithStack(err)
return
}
defer rows.Close()
logic.CheckErr(err)
twoMap,err := GetAllParam(rows)
for _,v:=range twoMap{
res = v
break
}
return
}
package dao
import (
"context"
"github.com/bilibili/kratos/pkg/database/sql"
"kaopu-server/internal/logic"
"kaopu-server/internal/model"
"time"
)
//增加或者修改记录
func (d *dao) InsertScores(ctx context.Context,score model.Scores) (insertId int64,err error) {
//defer d.db.Close()
var(
exitId int64
execSql string
affectNum int64
rows *sql.Rows
)
rows,err = d.db.Query(ctx,"select id from lie_scores where `type` = ? and project_pid = ? and project_id = ? and com_credits_id = ? limit 0,1", score.Type,score.ProjectPid,score.ProjectId,score.ComCreditsId)
defer rows.Close()
logic.CheckErr(err)
twoMap,err := GetAllParam(rows)
exitId = 0
for _,v:=range twoMap{
exitId = logic.StringTurnInt64(v["id"])
break
}
if exitId == 0 {
execSql = "INSERT INTO `lie_scores` (`type`, `project_pid`, `project_id`, `total_score`, `current_score`, `weight`, `final_score`, `com_credits_id`, `create_time`)VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"
row,err := d.db.Exec(ctx,execSql,score.Type,score.ProjectPid,score.ProjectId,score.TotalScore,score.CurrentScore,score.Weight,score.FinalScore,score.ComCreditsId,time.Now().Unix())
if err != nil {
logic.CheckErr(err)
}else{
affectNum,_ = row.LastInsertId()
}
}else{
execSql = "update `lie_scores` set `type` = ?, `project_pid` = ?, `project_id` = ?, `total_score` = ?, `current_score` = ?, `weight` = ?, `final_score` = ?, `update_time` = ? where `type` = ? and project_pid = ? and project_id = ? and com_credits_id = ?"
row,err := d.db.Exec(ctx,execSql,score.Type,score.ProjectPid,score.ProjectId,score.TotalScore,score.CurrentScore,score.Weight,score.FinalScore,time.Now().Unix(),score.Type,score.ProjectPid,score.ProjectId,score.ComCreditsId)
if err != nil {
logic.CheckErr(err)
}else{
affectNum,_ = row.RowsAffected()
}
}
insertId = affectNum
return
}
//增加或者修改记录(动态模型专用)
func (d *dao) InsertScores2(ctx context.Context,score model.Scores,month_six_zi int64) (insertId int64,err error) {
//defer d.db.Close()
var(
exitId int
execSql string
affectNum int64
)
//ss := fmt.Sprintf("select id from lie_scores where `type` = %d and project_pid = %d and project_id = %d and com_credits_id = %d limit 0,1", score.Type,score.ProjectPid,score.ProjectId,score.ComCreditsId)
//print(ss)
err = d.db.QueryRow(ctx,"select id from lie_scores where `type` = ? and project_pid = ? and project_id = ? and com_credits_id = ? and month= ? limit 0,1", score.Type,score.ProjectPid,score.ProjectId,score.ComCreditsId,month_six_zi).Scan(&exitId)
if err != nil {
//fmt.Print(err)
//sql := fmt.Sprintf("select id from lie_scores where `type` = %d and project_pid = %d and project_id = %d and com_credits_id = %d and month= %d limit 0,1", score.Type,score.ProjectPid,score.ProjectId,score.ComCreditsId,month_six_zi);
//fmt.Print("查询失败:"+sql)
//os.Exit(1)
}
if exitId == 0 {
execSql = "INSERT INTO `lie_scores` (`type`, `project_pid`, `project_id`, `total_score`, `current_score`, `weight`, `final_score`, `com_credits_id`, `create_time`,`current_rate`,`month`,`remark`)VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?)"
row,err := d.db.Exec(ctx,execSql,score.Type,score.ProjectPid,score.ProjectId,score.TotalScore,score.CurrentScore,score.Weight,score.FinalScore,score.ComCreditsId,time.Now().Unix(),score.Current_rate,score.Month,score.Remark)
if err != nil {
logic.CheckErr(err)
}else{
affectNum,_ = row.LastInsertId()
}
}else{
execSql = "update `lie_scores` set `type` = ?, `project_pid` = ?, `project_id` = ?, `total_score` = ?, `current_score` = ?, `weight` = ?, `final_score` = ?, `update_time` = ?, `current_rate` = ?, `remark` = ? where `type` = ? and project_pid = ? and project_id = ? and com_credits_id = ? and month = ?"
row,err := d.db.Exec(ctx,execSql,score.Type,score.ProjectPid,score.ProjectId,score.TotalScore,score.CurrentScore,score.Weight,score.FinalScore,time.Now().Unix(), score.Current_rate,score.Remark,score.Type,score.ProjectPid,score.ProjectId,score.ComCreditsId,month_six_zi)
if err != nil {
logic.CheckErr(err)
}else{
affectNum,_ = row.RowsAffected()
}
}
insertId = affectNum
return
}
\ No newline at end of file
......@@ -5,7 +5,6 @@ import (
"kaopu-server/internal/model"
"github.com/bilibili/kratos/pkg/database/sql"
"github.com/pkg/errors"
)
......@@ -56,4 +55,4 @@ func (d *dao) GetUserList(ctx context.Context) (res []*model.Users, err error) {
err = rows.Err()
return
}
\ No newline at end of file
}
package logic
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"time"
)
const APIMD5STR string = "fh6y5t4rr351d2c3bryi"
const APIDOMAIN string = "http://localhost/phpinfo.php"
func SendMessage(mobile int64 , content string){
timeNow := time.Now().Second()
requestContent,_ := json.Marshal(map[string]string{"content":content})
requestTel,_ := json.Marshal([]int64{mobile})
resp,err := http.PostForm(APIDOMAIN,url.Values{
"data" : {string(requestContent)},
"touser" : {string(requestTel)},
"keyword" : {"user_credit_apply_check"},
"k1" : {Int64TurnString(int64(timeNow))},
"k2" : {Md5(Md5(Int64TurnString(int64(timeNow)))+APIMD5STR)},
"is_ignore" : {},
})
if err != nil {
fmt.Print(err)
}
defer resp.Body.Close()
}
package logic
import (
"fmt"
"io"
"os"
"time"
)
func check(e error) {
if e != nil {
panic(e)
}
}
/**
* 判断文件是否存在 存在返回 true 不存在返回false
*/
func checkFileIsExist(filename string) bool {
var exist = true
if _, err := os.Stat(filename); os.IsNotExist(err) {
exist = false
}
return exist
}
/*
@param writeString 写入文件字符串
@param file_pre 附加文件前缀
eg: logic.Loginfo("逾期统计开始","_yuqilv_");
*/
func Loginfo(writeString string,log_file_pre string) {
date := time.Now().Format("2006-01-02")
date2 := time.Now().Format("2006-01-02 15:04:05")
var filename = "./logs/"+date+log_file_pre+".txt"
var f *os.File
var err1 error
if checkFileIsExist(filename) { //如果文件存在
f, err1 = os.OpenFile(filename, os.O_APPEND, 0666) //打开文件
} else {
f, err1 = os.Create(filename) //创建文件
}
check(err1)
ss := StrReplace("\r\n","",writeString,1) //替换多余换行
io.WriteString(f,"\r\n"+date2+"----"+ss) //写入文件(字符串)
//fmt.Print(err)
}
/*
打印并且记录日志
*/
func LogWrite(log1 string,log_pre string,is_write int) {
if is_write == 1 {
fmt.Print(log1+"\r\n")
}
Loginfo(log1,log_pre)
}
func CheckErr(err error) {
if err != nil {
Loginfo(err.Error(),"error")
}
}
/**
from: http://www.isharey.com/?p=143
*/
//
//func main() {
//
// var wireteString = "测试n"
// var filename = "./output1.txt"
//
// fmt.Print(filename)
//
//
// var f *os.File
// var err1 error
// /***************************** 第一种方式: 使用 io.WriteString 写入文件 ***********************************************/
// if checkFileIsExist(filename) { //如果文件存在
// f, err1 = os.OpenFile(filename, os.O_APPEND, 0666) //打开文件
// fmt.Println("文件存在")
// } else {
// f, err1 = os.Create(filename) //创建文件
// fmt.Println("文件不存在")
// }
// check(err1)
// n, err1 := io.WriteString(f, wireteString) //写入文件(字符串)
// check(err1)
// fmt.Printf("写入 %d 个字节n", n)
//
// /***************************** 第二种方式: 使用 ioutil.WriteFile 写入文件 ***********************************************/
// var d1 = []byte(wireteString)
// err2 := ioutil.WriteFile("./output2.txt", d1, 0666) //写入文件(字节数组)
// check(err2)
//
// /***************************** 第三种方式: 使用 File(Write,WriteString) 写入文件 ***********************************************/
// f, err3 := os.Create("./output3.txt") //创建文件
// check(err3)
// defer f.Close()
// n2, err3 := f.Write(d1) //写入文件(字节数组)
// check(err3)
// fmt.Printf("写入 %d 个字节n", n2)
// n3, err3 := f.WriteString("writesn") //写入文件(字节数组)
// fmt.Printf("写入 %d 个字节n", n3)
// f.Sync()
//
// /***************************** 第四种方式: 使用 bufio.NewWriter 写入文件 ***********************************************/
// w := bufio.NewWriter(f) //创建新的 Writer 对象
// n4, err3 := w.WriteString("bufferedn")
// fmt.Printf("写入 %d 个字节n", n4)
// w.Flush()
// f.Close()
//}
package logic
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
"strconv"
"strings"
"time"
)
type TianYanChaCompanyInfo struct {
EstiblishTime float64 `json:"estiblishTime"`
CompanyOrgType string `json:"companyOrgType"`
SocialStaffNum float64 `json:"socialStaffNum"`
RegCapital string `json:"regCapital"`
LegalPersonName string `json:"legalPersonName"`
RegLocation string `json:"regLocation"`
OrgNumber string `json:"orgNumber"`
}
type ResultStruct struct {
Result TianYanChaCompanyInfo `json:"result"`
}
type TotalResultStruct struct {
Result TotalNumResultStruct `json:"result"`
}
type TotalNumResultStruct struct {
Total int64 `json:"total"`
Items []map[string]string `json:"items"`
}
type ChangeInfo struct {
ChangeTime int64 `json:"changeTime"`
ChangeItem int64 `json:"changeItem"`
}
const TIANYANCHATOKEN = "4920e638-52c6-43c5-bdec-78affa06bdbe"
//公司信息
const COMPANYINFOURL = "http://open.api.tianyancha.com/services/open/ic/baseinfoV2/2.0"
//法律诉讼
const LAWSUIT = "http://open.api.tianyancha.com/services/open/jr/lawSuit/2.0"
//法人变更次数
const CHANGEINFO = "http://open.api.tianyancha.com/services/open/ic/changeinfo/2.0"
func HttpGet(companyName string)(returnDatas map[string]string) {
var totalNum TotalResultStruct
var companyTycInfo ResultStruct
respBody := BasicHttpGet(COMPANYINFOURL,companyName)
json.Unmarshal(respBody,&companyTycInfo)
returnData := make(map[string]string)
//成立时间
returnData["establishment_time"] = strconv.FormatFloat((companyTycInfo.Result.EstiblishTime/1000), 'f', -1, 64)
returnData["legal_representative"] = companyTycInfo.Result.LegalPersonName
returnData["com_address"] = companyTycInfo.Result.RegLocation
returnData["com_organization"] = companyTycInfo.Result.OrgNumber
returnData["tianyancha_json"] = string(respBody)
//公司性质
//var companyOrgType string
//if strings.Contains(companyTycInfo.Result.CompanyOrgType,"上市") {
// companyOrgType = "1"
//}else if strings.Contains(companyTycInfo.Result.CompanyOrgType,"国企"){
// companyOrgType = "2"
//}else if strings.Contains(companyTycInfo.Result.CompanyOrgType,"央企"){
// companyOrgType = "3"
//}else{
// companyOrgType = "0"
//}
returnData["customer_property"] = "其它"
//参保人数
returnData["social_security_participants"] = strconv.FormatFloat(companyTycInfo.Result.SocialStaffNum,'f', -1, 64)
//注册资本
var capitalNum float64
if strings.Contains(companyTycInfo.Result.RegCapital,"万") {
capitalNum = StringTurnFloat64(companyTycInfo.Result.RegCapital[:StringIndex(companyTycInfo.Result.RegCapital,"万")]) * 10000
}else if strings.Contains(companyTycInfo.Result.RegCapital,"亿"){
capitalNum = StringTurnFloat64(companyTycInfo.Result.RegCapital[:StringIndex(companyTycInfo.Result.RegCapital,"亿")]) * 100000000
}else{
capitalNum = StringTurnFloat64(companyTycInfo.Result.RegCapital)
}
returnData["registered_capital"] = strconv.FormatFloat(capitalNum, 'f', -1, 64)
//------------------------------------两年内是否有法律诉讼---------------------------------------//
respBody = BasicHttpGet(LAWSUIT,companyName)
json.Unmarshal(respBody,&totalNum)
returnData["tianyancha_json"] += "||||"+string(respBody)
if totalNum.Result.Total > 0 {
returnData["two_years_no_lawsuit"] = "有"
}else{
returnData["two_years_no_lawsuit"] = "无"
}
//------------------------------------两年内是否有法律诉讼---------------------------------------//
//------------------------------------五年内法人变更---------------------------------------//
respBody = BasicHttpGet(CHANGEINFO,companyName)
json.Unmarshal(respBody,&totalNum)
returnData["tianyancha_json"] += "||||"+string(respBody)
var changeInfoNum int64
changeInfoNum = 0
for _,v := range totalNum.Result.Items{
if strings.Contains(v["changeItem"],"法人变更") && (DateTurnInt64(v["changeTime"]) + (365 * 86400)) < time.Now().Unix() {
changeInfoNum ++
}
}
returnData["five_legal_change"] = strconv.FormatInt(changeInfoNum,10)
//------------------------------------五年内法人变更---------------------------------------//
return returnData
}
func NetBasicHttpGet(url,name string)(respBody []byte) {
req, err := http.NewRequest("GET", url, nil)
q := req.URL.Query()
q.Add("pageNum","1")
q.Add("name",name)
req.URL.RawQuery = q.Encode()
req.Header.Set("Authorization",TIANYANCHATOKEN)
var resp *http.Response
resp, err = http.DefaultClient.Do(req)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Print(err)
}
return body
}
//内网访问
func BasicHttpGet(url,name string)(respBody []byte) {
req, err := http.NewRequest("GET", "http://172.18.137.21/tyc_turn.php", nil)
q := req.URL.Query()
q.Add("pageNum","1")
q.Add("name",name)
q.Add("url",url)
q.Add("token",TIANYANCHATOKEN)
req.URL.RawQuery = q.Encode()
var resp *http.Response
resp, err = http.DefaultClient.Do(req)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Print(err)
}
return body
}
\ No newline at end of file
package model
/*CREATE TABLE `lie_add_score` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '加分项id',
`com_credits_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '关联信用分id',
`project_name` varchar(50) NOT NULL DEFAULT '' COMMENT '项目名',
`info` varchar(150) NOT NULL DEFAULT '' COMMENT '信息备注',
`current_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '得分 没有进行权重运算的得分',
`weight` decimal(5,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '权重',
`final_score` decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT '最终得分-终评分 进行了权重运算后的得分',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '1正常 0删除',
`create_time` int(11) unsigned NOT NULL DEFAULT '0',
`update_time` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `company_code` (`com_credits_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='加分项表';*/
\ No newline at end of file
package model
//
//CREATE TABLE `lie_basic_info` (
//`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '业务明细ID',
//`erp_company_code` varchar(20) NOT NULL DEFAULT '' COMMENT 'erp公司编码',
//`first_order_time` int(11) NOT NULL COMMENT '首次下单时间',
//`total_order_amount` decimal(10,2) NOT NULL COMMENT '历史交易总额(收款总额)',
//`total_gross_profit` decimal(10,2) NOT NULL COMMENT '历史累计毛利',
//`recently_average_amount` decimal(10,2) NOT NULL COMMENT '近6个月平均交易额',
//`recently_max_amount` decimal(10,2) NOT NULL COMMENT '近6个月最大交易额',
//`last_month_amount` decimal(10,2) NOT NULL COMMENT '上个月交易额',
//`reveive_period_aomunt` decimal(10,2) NOT NULL COMMENT '已获账期金额',
//`total_delay_times` int(11) NOT NULL COMMENT '历史逾期次数',
//`mianly_class` varchar(255) NOT NULL COMMENT '主要交易品类',
//`create_time` int(11) NOT NULL COMMENT '创建时间',
//`update_time` int(11) NOT NULL COMMENT '更新时间',
//`recently_three_average_amount` decimal(10,2) NOT NULL COMMENT '近3个月最大交易额',
//`recently_three_max_amount` decimal(10,2) NOT NULL COMMENT '近3个月最大交易额',
//PRIMARY KEY (`id`)
//) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='业务信息';
\ No newline at end of file
package model
type ComCreditsBasicInfos struct {
Id int64 `json:"id"` //'模型条目ID'
ComCreditsId int64 `json:"com_credits_id"` //'关联信用分id'
ComName string `json:"com_name"` //'公司名称'
ComOrganization string `json:"com_organization"` //'组织结构代码'
EstanlishmentTime int64 `json:"establishment_time"` //'公司成立时间'
ComLeader string `json:"com_leader"` //'公司负责人'
RegisteredCapital string `json:"registered_capital"` //'注册资本'
CustomerProperty int64 `json:"customer_property"` //'客户性质'
ScoreTime int64 `json:"score_time"` //'评分时间'
ComAddress string `json:"com_address"` //'公司地址'
LegalRepresentative string `json:"legal_representative"` //'法定代表人'
LegalFixedTelephone string `json:"legal_fixed_telephone"` //'法定代表人固定电话'
LegalMobilePhone string `json:"legal_mobile_phone"` //'法定代表人移动电话'
ActualController string `json:"actual_controller"` //'实控人'
ActualFixTelephone string `json:"actual_fix_telephone"` //'企业实控人固定电话'
ActualMobilePhone string `json:"actual_mobile_phone"` //'企业实控人移动电话'
ComContact string `json:"com_contact"` //'企业联系人'
ContactFixTelephone string `json:"contact_fix_telephone"` //'企业联系人固定电话'
ContactMobilePhone string `json:"contact_mobile_phone"` //'企业联系人移动电话'
FiveLegalChange int8 `json:"five_legal_change"`
YearTaxPayable float64 `json:"year_tax_payable"`
TwoYearsnoLawsuit int8 `json:"two_years_no_lawsuit"`
SocialSecurityParticiPant int16 `json:"social_security_participants"`
IdCardFront string `json:"id_card_front"`
IdCardBack string `json:"id_card_back"`
PayDutyPic string `json:"pay_duty_pic"`
TianyanchaJson string `json:"tianyancha_json"`
TycSelectNum int64 `json:"tyc_select_num"`
CreateTime int64 `json:"create_time"` //'创建时间'
UpdateTime int64 `json:"update_time"` //'更新时间'
}
/*CREATE TABLE `lie_com_basicinfos` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`com_credits_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '关联信用分id',
`com_name` varchar(80) NOT NULL DEFAULT '' COMMENT '公司名称',
`com_organization` varchar(30) NOT NULL DEFAULT '' COMMENT '组织结构代码',
`establishment_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '公司成立时间',
`com_leader` varchar(60) NOT NULL DEFAULT '' COMMENT '公司负责人',
`registered_capital` decimal(14,4) unsigned NOT NULL DEFAULT '0.0000' COMMENT '注册资本',
`customer_property` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '客户性质 0 其它 1上市 2国企 3央企',
`score_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '评分时间',
`com_address` varchar(100) NOT NULL DEFAULT '' COMMENT '公司地址',
`legal_representative` varchar(50) NOT NULL DEFAULT '' COMMENT '法定代表人',
`legal_fixed_telephone` varchar(15) NOT NULL DEFAULT '' COMMENT '法定代表人固定电话',
`legal_mobile_phone` char(11) NOT NULL DEFAULT '' COMMENT '法定代表人移动电话',
`actual_controller` varchar(50) NOT NULL DEFAULT '' COMMENT '实控人',
`actual_fix_telephone` varchar(15) NOT NULL DEFAULT '' COMMENT '企业实控人固定电话',
`actual_mobile_phone` char(11) NOT NULL DEFAULT '' COMMENT '企业实控人移动电话',
`com_contact` varchar(50) NOT NULL DEFAULT '' COMMENT '企业联系人',
`contact_fix_telephone` varchar(15) NOT NULL DEFAULT '' COMMENT '企业联系人固定电话',
`contact_mobile_phone` char(11) NOT NULL DEFAULT '' COMMENT '企业联系人移动电话',
`five_legal_change` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '5年内法人变更次数',
`year_tax_payable` decimal(14,4) unsigned NOT NULL DEFAULT '0.0000' COMMENT '年纳税额',
`two_years_no_lawsuit` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '近两年内有无诉讼 1有 ',
`social_security_participants` smallint(10) unsigned NOT NULL DEFAULT '0' COMMENT '社保参保人数',
`id_card_front` varchar(100) NOT NULL DEFAULT '' COMMENT '身份证正面照',
`id_card_back` varchar(100) NOT NULL DEFAULT '' COMMENT '身份证反面照',
`pay_duty_pic` varchar(100) NOT NULL DEFAULT '' COMMENT '纳税凭证照片',
`tianyancha_json` varchar(500) NOT NULL DEFAULT '' COMMENT '天眼查返回的json',
`tyc_select_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '查询次数',
`create_time` int(11) unsigned NOT NULL DEFAULT '0',
`update_time` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `company_code` (`com_credits_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='公司基础信息';*/
\ No newline at end of file
package model
type ComCredits struct {
Id int64 `json:"id"`
ApplyAccount string `json:"apply_account"`
ErpCompanyCode string `json:"erp_company_code"`
CompanyName string `json:"company_name"`
StaticCreditScore float64 `json:"static_credit_score"`
DynamicCreditScore float64 `json:"dynamic_credit_score"`
TotalCreditScore float64 `json:"total_credit_score"`
Creator string `json:"creator"`
Status int8 `json:"status"`
BlacklistHit string `json:"blacklist_hit"`
CreditInvestResult string `json:"credit_invest_result"`
IchuntHuntingCore string `json:"ichunt_hunting_core"`
RecommendedAmount float64 `json:"recommended_amount"`
RecomTimeLimit string `json:"recom_time_limit"`
ScoreTime int64 `json:"score_time"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
}
/*CREATE TABLE `lie_com_credits` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
`apply_account` varchar(11) NOT NULL DEFAULT '' COMMENT '申请账号 手机号 法人电话',
`erp_company_code` varchar(20) NOT NULL DEFAULT '' COMMENT 'erp公司编码',
`company_name` varchar(60) NOT NULL DEFAULT '' COMMENT '公司名字',
`static_credit_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '静态信用分',
`dynamic_credit_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '动态信用分',
`total_credit_score` decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT '总信用分',
`creator` varchar(30) NOT NULL DEFAULT '' COMMENT '评分人',
`status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '1已申请 5待评分 10已评分',
`blacklist_hit` varchar(50) NOT NULL DEFAULT '' COMMENT '黑名单命中',
`credit_invest_result` varchar(50) NOT NULL DEFAULT '' COMMENT '征信达标结果',
`ichunt_hunting_core` enum('H','G','F','E','D','C','B','A') NOT NULL COMMENT '猎芯网评分分级',
`recommended_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '建议额度',
`recom_time_limit` varchar(30) NOT NULL DEFAULT '' COMMENT '建议区间',
`score_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '评分时间',
`create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `company_code` (`erp_company_code`) USING BTREE,
UNIQUE KEY `company_name` (`company_name`) USING BTREE,
KEY `company_code_2` (`erp_company_code`,`status`,`create_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='公司信用分管理';*/
\ No newline at end of file
package model
//CREATE TABLE `lie_credit_score_fields` (
//`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
//`company_has_liabilities` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '企业有无负债 1有 0没有',
//`history overdue` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '历史有无逾期 1有 0无',
//`age` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '年龄',
//`marital_status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '婚姻状况 1是 0否',
//`account_ratio` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '违约账户比 50.23',
//`guaranty` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '对外担保 1有 0没有',
//`two_years_th_days_overdue_times` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '近2年内最大逾期金额',
//`two_years_max_overdue_amount` decimal(14,4) NOT NULL,
//`is_exist_now_overdue` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '1 是 0否',
//`presence_of_mortgage` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '有无房贷 1有 0没有',
//`two_months_credit_view_nums` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '近两个月征信查询次数',
//`credit_card_total` decimal(14,4) unsigned NOT NULL DEFAULT '0.0000' COMMENT '信用卡总额度',
//`maximum_credit_card_limit` decimal(14,4) unsigned NOT NULL DEFAULT '0.0000' COMMENT '单张信用卡最高额度',
//`com_credits_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '关联公司信用id',
//`type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '1个人 2企业',
//`create_time` int(11) unsigned NOT NULL DEFAULT '0',
//`update_time` int(11) unsigned NOT NULL DEFAULT '0',
//PRIMARY KEY (`id`)
//) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='征信相关评分字段表';
\ No newline at end of file
package model
type Grade struct {
Id int64 `json:"id"`
Grade int64 `json:"grade"`
MinScore float64 `json:"min_score"`
MaxScore float64 `json:"max_score"`
RecommendedAmount float64 `json:"recommended_amount"`
RecommendedLimit string `json:"recommended_limit"`
Status int64 `json:"status"`
Creator string `json:"creator"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
}
/*CREATE TABLE `lie_grade` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '信用等级ID',
`grade` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '等级,1-A,2-B, 3-C, 4-D, 5-E, 6-F',
`min_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '最小分值',
`max_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '最大分值',
`recommended_amount` decimal(12,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '建议额度',
`recommended_limit` varchar(32) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '建议期限',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态,1-启用,-1-禁用',
`creator` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '创建人',
`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `grade` (`grade`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='信用等级表';*/
\ No newline at end of file
package model
/*
CREATE TABLE `lie_com_credits` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
`apply_account` varchar(11) NOT NULL DEFAULT '' COMMENT '申请账号 手机号 法人电话',
`erp_company_code` varchar(20) NOT NULL DEFAULT '' COMMENT 'erp公司编码',
`company_name` varchar(60) NOT NULL DEFAULT '' COMMENT '公司名字',
`static_credit_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '静态信用分',
`dynamic_credit_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '动态信用分',
`total_credit_score` decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT '总信用分',
`status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '1已申请 5待评分 10已评分',
`blacklist_hit` varchar(50) NOT NULL DEFAULT '' COMMENT '黑名单命中',
`credit_invest_result` varchar(50) NOT NULL DEFAULT '' COMMENT '征信达标结果',
`ichunt_hunting_core` enum('H','G','F','E','D','C','B','A') NOT NULL COMMENT '猎芯网评分分级',
`recommended_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '建议额度',
`recom_time_limit` varchar(30) NOT NULL DEFAULT '' COMMENT '建议区间',
`admin_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '评分人ID',
`admin_name` varchar(30) NOT NULL DEFAULT '' COMMENT '评分人',
`score_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '评分时间',
`create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `company_code` (`erp_company_code`) USING BTREE,
UNIQUE KEY `company_name` (`company_name`) USING BTREE,
KEY `company_code_2` (`erp_company_code`,`status`,`create_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='公司信用分管理';
*/
\ No newline at end of file
package model
// Kratos hello kratos.
type Kratos struct {
Hello string
}
\ No newline at end of file
type Model struct {
Id int64 `json:"id"`
Project_id string `json:"project_id"`
Project_name string `json:"project_name"`
Classify_type int `json:"classify_type"`
}
//CREATE TABLE `lie_model` (
//`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '模型ID',
//`type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '项目类型:1静态 2动态 3银行端',
//`project_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '项目ID',
//`project_name` varchar(128) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '项目名称',
//`classify_type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '分类类型,1-公司信息,2-企业征信,3-个人征信,4-历史交易情况,5-加分项,6-动态模型',
//`numeric_type` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '数值类型',
//`unit` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '单位',
//`full_score` int(5) unsigned NOT NULL DEFAULT '0' COMMENT '满分分值',
//`weight` decimal(5,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '权重',
//`ladder` int(3) unsigned NOT NULL DEFAULT '0' COMMENT '阶梯(项目阶梯总数目)',
//`max_score` int(5) unsigned NOT NULL DEFAULT '0' COMMENT '最高分值(项目各阶梯分值之和)',
//`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态,1-启用,-1-禁用',
//`creator` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '创建人',
//`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
//`update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
//PRIMARY KEY (`id`),
//KEY `project_time` (`classify_type`,`create_time`) USING BTREE,
//KEY `status_time` (`status`,`create_time`) USING BTREE
//) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='模型配置表'
\ No newline at end of file
package model
//CREATE TABLE `lie_model_topset` (
//`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '模型ID',
//`type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '1静态 2动态 3银行',
//`project_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '项目ID',
//`project_name` varchar(128) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '项目名称',
//`full_score` int(5) unsigned NOT NULL DEFAULT '0' COMMENT '满分分值',
//`weight` decimal(5,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '权重',
//`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态,1-启用,-1-禁用',
//`creator` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '创建人',
//`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
//`update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
//PRIMARY KEY (`id`),
//UNIQUE KEY `project_id` (`project_id`) USING BTREE,
//KEY `status_time` (`status`,`create_time`) USING BTREE,
//KEY `type_time` (`type`,`create_time`) USING BTREE
//) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COMMENT='模型配置表-一级分类配置';
\ No newline at end of file
package model
type ModelItems struct {
Id int64 `json:"id"` //'模型条目ID'
ModelId int64 `json:"model_id"` //'关联模型ID'
ProjectId int64 `json:"project_id"` //'项目ID'
ProjectName int64 `json:"project_name"` //'项目名称'
FullScore int64 `json:"full_score"` //'满分分值'
LadderRangeMin string `json:"ladder_range_min"` //'阶梯范围最小值'
LadderRangeMax string `json:"ladder_range_max"` //'阶梯范围最大值'
LadderText string `json:"id"` //'阶梯信息文本'
Score int64 `json:"id"` //'阶梯分值'
Creator string `json:"id"` //'创建人'
}
/*CREATE TABLE `lie_model_items` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '模型条目ID',
`model_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '关联模型ID',
`project_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '项目ID',
`project_name` varchar(128) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '项目名称',
`full_score` decimal(5,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '满分分值',
`ladder_range_min` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '阶梯范围最小值',
`ladder_range_max` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '阶梯范围最大值',
`ladder_text` text CHARACTER SET utf8 NOT NULL COMMENT '阶梯信息文本',
`score` decimal(5,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '阶梯分值',
`creator` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '创建人',
`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `model_id` (`model_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COMMENT='模型阶梯配置表';*/
\ No newline at end of file
package model
type Scores struct {
Id int64 `json:"id"`
Type int8 `json:"type"`
ProjectPid int8 `json:"project_pid"`
ProjectId int8 `json:"project_id"`
TotalScore float64 `json:"total_score"`
CurrentScore float64 `json:"current_score"`
Weight float64 `json:"weight"`
FinalScore float64 `json:"final_score"`
ComCreditsId int64 `json:"com_credits_id"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
Month int64 `json:"month"`
Current_rate float64 `json:"current_rate"`
Remark string `json:"remark"`
}
/*CREATE TABLE `lie_scores` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '1 静态模型 2动态模型 3银行端',
`project_pid` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '模型pid',
`project_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '模型id',
`total_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '总分',
`current_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '得分 没有进行权重运算的得分',
`weight` decimal(5,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '权重',
`final_score` decimal(6,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '最终得分-终评分 进行了权重运算后的得分',
`com_credits_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '关联信用分id',
`create_time` int(11) unsigned NOT NULL DEFAULT '0',
`update_time` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `type_2` (`type`,`project_pid`,`project_id`,`com_credits_id`) USING BTREE,
KEY `type` (`type`,`project_pid`,`project_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COMMENT='信用分统计-参数评分';*/
\ No newline at end of file
/*
动态模型server
*/
package service
import (
"context"
)
//动态模型服务
func (s *Service) DongRun(ctx context.Context,project_id int,erp_company_code string) (res []map[string]interface{}, err error) {
res, err = s.dao.DongMain(ctx,project_id,erp_company_code)
return
}
......@@ -2,12 +2,11 @@ package service
import (
"context"
"fmt"
"kaopu-server/internal/dao"
"kaopu-server/internal/model"
"github.com/bilibili/kratos/pkg/conf/paladin"
"github.com/pkg/errors"
"kaopu-server/internal/dao"
"kaopu-server/internal/logic"
"kaopu-server/internal/model"
)
// Service service.
......@@ -53,7 +52,114 @@ func (s *Service) GetUserList(ctx context.Context) (res []*model.Users, err erro
//调用DB方法,获取会员数据
res, _ = s.dao.GetUserList(ctx)
fmt.Println(res)
//fmt.Println(res)
return
}
\ No newline at end of file
}
//----------静态开始
// 获取公司用户列表
func (s *Service) GetCompanyCresitsList(c context.Context) (res []map[string]string, err error) {
//调用DB方法,获取会员数据
res, err = s.dao.GetCompanyCresitsList(c)
logic.CheckErr(err)
return
}
// 获取公司用户列表
func (s *Service) GetCompanyBaseInfoByCid(c context.Context, companyId int64) (res map[string]string, err error) {
//调用DB方法,获取会员数据
res, err = s.dao.GetCompanyBaseInfoByCid(c,companyId)
logic.CheckErr(err)
return
}
// 获取公司征信信息
func (s *Service) GetCompanyScoreFieldsByCid(c context.Context, companyId int64) (res map[string]string, err error) {
//调用DB方法,获取会员数据
res, err = s.dao.GetCompanyScoreFieldsByCid(c,companyId)
logic.CheckErr(err)
return
}
// 获取公司历史信息
func (s *Service) GetBasicInfoByCid(c context.Context, erpCompanyCode string) (res map[string]string, err error) {
//调用DB方法,获取会员数据
res, err = s.dao.GetBasicInfoByCid(c,erpCompanyCode)
logic.CheckErr(err)
return
}
// 获取模型数据
func (s *Service) GetCompanyModelByProjectid(c context.Context, projectId int64) (res map[string]string, err error) {
//调用DB方法,获取会员数据
res, err = s.dao.GetCompanyModelByProjectid(c,projectId)
logic.CheckErr(err)
return
}
// 获取公司加分项
func (s *Service) GetCompanyAddSore(c context.Context, companyId int64) (res []map[string]string, err error) {
//调用DB方法,获取会员数据
res, err = s.dao.GetCompanyAddSoreByCid(c,companyId)
logic.CheckErr(err)
return
}
//获取模型的详细数据
func (s *Service)GetCompanyModelItemsByProjectidWitchString(c context.Context, project_id int64 , stringVal string) (res map[string]string, err error){
res,err = s.dao.GetCompanyModelItemsByProjectidWitchString(c, project_id , stringVal)
logic.CheckErr(err)
return
}
//获取模型的头部信息
func (s *Service)GetModelTopsetByProjectId(c context.Context, companyId int64) (res map[string]string, err error){
res,err = s.dao.GetModelTopsetByProjectId(c,companyId)
logic.CheckErr(err)
return
}
func (s *Service)GetCompanyModelItemsByProjectid(c context.Context, project_id int64 , score float64) (res map[string]string, err error){
res,err = s.dao.GetCompanyModelItemsByProjectid(c, project_id , score )
return
}
// 修改公司静态加分项
func (s *Service) UpdateStaticSumScores(c context.Context,com_credits model.ComCredits) (res int64, err error) {
//调用DB方法,获取会员数据
res, err = s.dao.UpdateStaticSumScores(c,com_credits)
logic.CheckErr(err)
return
}
// 修改公司静态加分项
func (s *Service) InsertScores(c context.Context,score model.Scores) (res int64, err error) {
//调用DB方法,获取会员数据
res, err = s.dao.InsertScores(c,score)
logic.CheckErr(err)
return
}
func (s *Service)GetCompanyAddSoreByCid(c context.Context, companyId int64) (res []map[string]string, err error){
//调用DB方法,获取会员数据
res, err = s.dao.GetCompanyAddSoreByCid(c,companyId)
logic.CheckErr(err)
return
}
//----------静态结束
\ No newline at end of file
File mode changed
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment