Commit bad1fc86 by Joneq

修改分数动态获取

parents 6ed0d6ed 604a245b
......@@ -2,6 +2,7 @@ package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"github.com/bilibili/kratos/pkg/conf/paladin"
......@@ -10,13 +11,16 @@ import (
"kaopu-server/internal/service"
"os"
"strconv"
"errors"
"github.com/ichunt2019/go-msgserver/utils/rabbitmq"
"time"
)
type RecvPro struct {}
type RabbitMsg struct {
ComCreditsId string `json:"com_credits_id"`
ErpCompanyCode string `json:"erp_company_code"`
}
func main() {
//获取输入参数s
......@@ -26,27 +30,32 @@ func main() {
if err := paladin.Init(); err != nil {
panic(err)
}
model_dong := dao.Model_dong //所有动态模型算法列表
if mod == -1 {
queues() //队列监听
}
model_dong := dao.Model_dong //所有动态模型算法列表
_ ,ok := model_dong[mod]
if !ok {
fmt.Println("模块名称输入错误!")
os.Exit(1)
}
ctx := context.Background() //上下文
if mod == -1 {
queues() //队列监听
}
ctx := context.Background() //上下文
if mod >0 {
svc := service.New()
svc.DongRun(ctx,mod,""); //运行main
svc.DongRun(ctx,999,""); //总计所有分数
logic.LogWrite("统计"+dao.Model_dong[mod]+"完成",dao.Model_dong_log[mod],1)
}else{
for {
logic.LogWrite("统计所有动态任务开始","_dong_main",1)
for k,_ := range model_dong{
if k == -1 || k == 0 {
......@@ -55,18 +64,24 @@ func main() {
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);
logic.LogWrite("统计项目"+mod_name+"开始:"+strconv.Itoa(k),mod_name_log,1)
svc := service.New()
svc.DongRun(ctx,mod,""); //运行main
svc.DongRun(ctx,k,""); //运行main
fmt.Println("统计结束:"+strconv.Itoa(k))
logic.Loginfo("统计结束--"+mod_name,mod_name_log);
logic.LogWrite("统计项目"+mod_name+"结束:"+strconv.Itoa(k),mod_name_log,1)
}
//最后关闭数据连接
d := dao.New()
d.Close() //关闭数据库连接
time.Sleep(60*time.Second)
}
fmt.Println("\r\n所有任务已经完成")
}
}
//队列监听
......@@ -96,10 +111,36 @@ func queues() {
//// 实现消费者 消费消息失败 自动进入延时尝试 尝试3次之后入库db
func (t *RecvPro) Consumer(dataByte []byte) error {
//转成json串
var rbm RabbitMsg
json.Unmarshal(dataByte,&rbm)
fmt.Println(string(dataByte))
return errors.New("顶顶顶顶")
//return nil
fmt.Print(rbm)
ctx := context.Background() //上下文
model_dong := dao.Model_dong //所有动态模型算法列表
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 := service.New()
svc.DongRun(ctx,k,rbm.ErpCompanyCode); //运行main
fmt.Println("统计结束:"+strconv.Itoa(k))
logic.Loginfo("统计结束--"+mod_name,mod_name_log);
}
//最后关闭数据连接
d := dao.New()
d.Close() //关闭数据库连接
//return errors.New("顶顶顶顶")
return nil
}
//消息已经消费3次 失败了 请进行处理
func (t *RecvPro) FailAction(dataByte []byte) error {
......
......@@ -5,9 +5,9 @@
active = 20
idle = 10
idleTimeout ="4h"
queryTimeout = "1000ms"
execTimeout = "1000ms"
tranTimeout = "1000ms"
queryTimeout = "5s"
execTimeout = "5s"
tranTimeout = "5s"
[Liexin_credit_source]
addr = "192.168.2.232:3306"
......@@ -16,6 +16,6 @@
active = 20
idle = 10
idleTimeout ="4h"
queryTimeout = "1000ms"
execTimeout = "1000ms"
tranTimeout = "1000ms"
\ No newline at end of file
queryTimeout = "5s"
execTimeout = "5s"
tranTimeout = "5s"
\ No newline at end of file
......@@ -69,7 +69,6 @@ func (d *dao) UpdateMoveSumScores(ctx context.Context,com_credits model.ComCredi
row.RowsAffected()
return
}
......
......@@ -35,8 +35,12 @@ type (
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)
<<<<<<< HEAD
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)
>>>>>>> 604a245ba1f6aa5be22837a9e9d0ce8ea80ddbfe
//---静态结束
//---动态开始
......
......@@ -49,32 +49,34 @@ var Model_dong_log = map[int]string{
//计算逾期金额率:延期支付时间超过平均账期的金额/收款总额:
func (d *dao) DongMain(ctx context.Context,project_id int,erp_company_code string) (r []map[string]interface{},err error) {
var (
weight float64 //权重
ladder_rate float64 //计算出来的各个动态分数率
ladder_score float64 =0; //对应梯度分数
_sql2 string; //
_sql2 string; //查询公司信息sql
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))
yuqilv_project,err := d.QueryOne(ctx,1,sql_str1)
if yuqilv_project == nil {
log3 := "不存在该项目配置lie_model ,project_id:"+strconv.Itoa(project_id)
fmt.Print(log3)
logic.Loginfo(log3,log_pre)
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(yuqilv_project["weight"],64)
weight,_ = strconv.ParseFloat(modelItem["weight"],64)
//查询逾期率项目详情
sql_str4 := fmt.Sprintf(_sql4,strconv.Itoa(project_id))
modelItems,err := d.QueryMany(ctx,1,sql_str4)
modelItems,_ = d.QueryMany(ctx,1,sql_str4)
if modelItems == nil {
log4 := "不存在该项目配置详情lie_model_items,project_id:"+strconv.Itoa(project_id)
logic.Loginfo(log4,log_pre)
fmt.Print(log4)
logic.LogWrite("不存在该项目配置详情lie_model_items,project_id:"+strconv.Itoa(project_id),log_pre,1)
return
}
}
//查询当前申请的所有公司
if erp_company_code == "" {
......@@ -85,14 +87,14 @@ func (d *dao) DongMain(ctx context.Context,project_id int,erp_company_code strin
company_info,err := d.QueryMany(ctx,1,_sql2);
if err != nil {
fmt.Println("\r\nerror:1004",err.Error())
logic.Loginfo("错误"+err.Error(),log_pre)
logic.LogWrite("错误"+err.Error(),log_pre,1)
return
}
for _,v := range company_info{ //循环当前公司,计算各个公司对应分数
if v["erp_company_code"] != "" {
if v["erp_company_code"] == "" {
continue;
}
//调用公共动态算法去查对应得分
switch project_id{
case 35: //逾期金额率
......@@ -113,44 +115,40 @@ func (d *dao) DongMain(ctx context.Context,project_id int,erp_company_code strin
ladder_rate,ladder_score,_ = d.DongReturnRate(ctx,v,modelItems,project_id)
case 999:
d.DongAddScore(ctx,logic.MyInt64(v["id"])) //总计所有分数
continue;
continue
default:
continue;
}
if ladder_score == 0 {
log1 := "统计"+mod_name+"--跳过,没有分数,公司编码:"+v["erp_company_code"]+" 计算率:"+logic.MyFloat64ToStr(ladder_rate)+"\r\n"
fmt.Print(log1)
logic.Loginfo(log1,log_pre)
logic.LogWrite("统计"+mod_name+"--没有梯度对应分数,公司编码:"+v["erp_company_code"]+" 计算率:"+logic.MyFloat64ToStr(ladder_rate),log_pre,1)
continue;
}
//计算得到的分数插入分数明细表
var scores model.Scores //插入分数结构体
ProjectPid := logic.MyInt8(modelItem["pid"])
ProjectId := logic.MyInt8(modelItem["id"])
scores.Type=2;
scores.ProjectPid = logic.MyInt8(yuqilv_project["pid"]);
scores.ProjectId = logic.MyInt8(yuqilv_project["id"]);
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"]);
//fmt.Print(scores)
//d := New()
insertid,err := d.InsertScores(ctx,scores)
if err != nil {
logic.Loginfo("错误:"+err.Error(),log_pre)
fmt.Print("错误:"+err.Error(),insertid,ladder_rate)
}
log2 := "统计"+mod_name+"--成功,公司编码:"+v["erp_company_code"]+" 计算得分:"+logic.MyFloat64ToStr(ladder_score)+" 最终得分:"+logic.MyFloat64ToStr(weight*ladder_score);
fmt.Print(log2)
logic.Loginfo(log2,log_pre)
}
fmt.Print("XIE:"+v["erp_company_code"])
//日志
logic.LogWrite("统计"+mod_name+"--成功,公司编码:"+v["erp_company_code"]+" 计算得分:"+logic.MyFloat64ToStr(ladder_score)+" 权重:"+logic.MyFloat64ToStr(weight)+" 最终得分:"+logic.MyFloat64ToStr(weight*ladder_score),log_pre,1)
}
//d.Close(); //关闭数据库连接
logic.Loginfo("统计"+mod_name+"完成",log_pre)
return
}
......
......@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"kaopu-server/internal/logic"
"kaopu-server/internal/model"
"strconv"
)
......@@ -20,7 +21,7 @@ const (
_sql13 = "select abs(sum(return_amount)) sum_tuihuo from lie_basic_detail where return_amount<0 and erp_company_code='%s'" //退货总金额 下单时间在1/1-1/30且下单金额为负数的金额合计
_sql14 = "select sum(order_amount) sum_chuhuo from lie_basic_detail where order_amount>0 and erp_company_code='%s'" //出货总金额 下单时间在1/1-1/30的下单总金额合计
_sql15 = "select sum(return_amount) sum_shou from lie_basic_detail where return_amount>0 and erp_company_code='%s'" //收款总额 应收日期在1/1-1/31的回款金额 下单时间在1/1-1/30的下单总金额合计
_sql16 = "select sum(final_score) sum_dong_score from lie_scores where type=2 and com_credits_id=%s"; //总计动态信用分
_sql16 = "select sum(final_score) sum_dong_score from lie_scores where type=2 and com_credits_id=%d"; //总计动态信用分
)
/*
......@@ -74,6 +75,7 @@ func (d *dao) DongYuqiBi(ctx context.Context,y map[string]string,modelItems []ma
score_one = logic.MyFloat64(y["score"]) //得到的分数
}
}
//fmt.Print(modelItems,birate,score_one)
ladder_rate = birate
ladder_score = score_one
......@@ -86,13 +88,13 @@ func (d *dao) DongYuqiDivDay(ctx context.Context,y map[string]string,modelItems
score_one float64 =0; //分数
)
//每笔逾期账款的逾期时间合计
yuqibi,_ := d.QueryOne(ctx,2,fmt.Sprintf(_sql8,y["erp_company_code"]))
if yuqibi["sum_delay_day"] == "0" { //没有结果
c1,_ := d.QueryOne(ctx,2,fmt.Sprintf(_sql8,y["erp_company_code"]))
if c1["sum_delay_day"] == "0" { //没有结果
return
}
//发生逾期总笔数
allbi,_ := d.QueryOne(ctx,2,fmt.Sprintf(_sql5,y["erp_company_code"]))
rate_res := logic.MyFloat64(yuqibi["sum_delay_day"])/logic.MyFloat64(allbi["allbi"])
c2,_ := d.QueryOne(ctx,2,fmt.Sprintf(_sql5,y["erp_company_code"]))
rate_res := logic.MyFloat64(c1["sum_delay_day"])/logic.MyFloat64(c2["yuqibi"])
//计算分数
for _,y := range modelItems{
......@@ -307,24 +309,24 @@ func (d *dao) DongReturnRate(ctx context.Context,y map[string]string,modelItems
func (d *dao) DongAddScore(ctx context.Context,com_credits_id int64)(affectNum int64) {
var(
execSql string
sum_dong_score float64 //动态模型总分
)
c1,_ := d.QueryOne(ctx,2,fmt.Sprintf(_sql16,com_credits_id))
c1,_ := d.QueryOne(ctx,1,fmt.Sprintf(_sql16,com_credits_id))
if c1["sum_dong_score"] == "0" || c1["sum_dong_score"] == "" { //没有结果
sum_dong_score = 0
}else{
sum_dong_score = logic.MyFloat64(c1["sum_dong_score"])
}
execSql = "update `lie_com_credits` set `dynamic_credit_score` = ? where id = ? "
row,err := d.db.Exec(ctx,execSql,sum_dong_score,com_credits_id)
if err != nil {
logic.Loginfo("更新动态总分出错"+err.Error(),"sum_dong")
}
affectNum,_ = row.RowsAffected()
//defer d.db.Close() 不能函数里面关闭数据库连接
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
}
......
......@@ -16,6 +16,8 @@ func (d *dao) InsertScores(ctx context.Context,score model.Scores) (insertId 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 = ? limit 0,1", score.Type,score.ProjectPid,score.ProjectId,score.ComCreditsId).Scan(&exitId)
if err != nil {
fmt.Print(err)
......
package logic
import (
"fmt"
"io"
"os"
"time"
......@@ -44,6 +45,15 @@ func Loginfo(writeString string,log_file_pre string) {
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)
}
/**
from: http://www.isharey.com/?p=143
......
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