Commit 9bf11347 by Joneq

增加动态银行算法

parent 5b2b8ec9
package bank_dong
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{
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.BankDongRun(ctx,k,""); //运行main
logic.LogWrite("统计项目"+mod_name+"结束:"+strconv.Itoa(k),mod_name_log,1)
}
svc.Close() //关闭数据库连接
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
}
\ No newline at end of file
......@@ -24,6 +24,7 @@ func HistoryBussiness()(finalScore float64) {
modelInfo := GetModelTopsetByProjectId(4)
h_weight = StringTurnFloat64(modelInfo["weight"])
h_totalScore := [20]float64{0}
finalScore = SetProjectScore(h_totalScore,h_weight,StringTurnFloat64(modelInfo["full_score"]))
SetInsertScoreChanFooter(1,0,4)
return finalScore
......
package dao
import (
"context"
"fmt"
"kaopu-server/internal/logic"
"kaopu-server/internal/model"
"strconv"
"strings"
"time"
)
const (
bank_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)" //基础数据
bank_sql5 = "select sum(final_score) sum_dong_score from lie_scores where type=2 and com_credits_id=%d and month in(%s)"; //总计动态信用分
bank_sql6 = "select * from lie_basic_month where erp_company_code='%s' and month in(%s)" //获取详情
bank_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 "
)
//计算逾期金额率:延期支付时间超过平均账期的金额/收款总额:
func (d *dao) BankDongMain(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.BankDongAddScore(ctx,logic.MyInt64(v["id"]),month_six_zi) //总计所有分数
continue
}else{
ladder_rate,ladder_score,remark,_ = d.BankDongRate(ctx,v,modelItems,project_id,month_six) //调用公共动态算法去查对应得分
}
//计算得到的分数插入分数明细表
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
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
}
/*
@param current_rate 对应梯度 率 或天
@param ladder_score 分数,最终对应哪个梯度得分
*/
func (d *dao) BankDongRate(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(bank_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(bank_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(bank_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) BankDongAddScore(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(bank_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
}
......@@ -47,6 +47,10 @@ type (
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) //统计动态分数,更新到每个公司
//---动态结束
//--银行动态开始
BankDongMain(ctx context.Context,project_id int,erp_company_code string) (r []map[string]interface{},err error) //动态模型调用主函数
//--银行动态结束
}
)
......
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 service
import (
"context"
)
//动态模型服务
func (s *Service) BankDongRun(ctx context.Context,project_id int,erp_company_code string) (res []map[string]interface{}, err error) {
res, err = s.dao.BankDongMain(ctx,project_id,erp_company_code)
return
}
\ No newline at end of file
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