소스 검색

wip:销售业绩刷库程序提交

wangkaiyue 11 달 전
부모
커밋
524d3dc199
2개의 변경된 파일140개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 1
      saleFlush/config.yaml
  2. 139 2
      saleFlush/main.go

+ 1 - 1
saleFlush/config.yaml

@@ -1,7 +1,7 @@
 database:
   release:
     link: "mysql:readuser:jyTi_R202403@tcp(192.168.3.71:4003)/jianyu"
-    #debug: true
+    debug: true
   default:
     link: "mysql:root:=PDT49#80Z!RVv52_z@tcp(192.168.3.14:4000)/jianyu"
     #debug: true

+ 139 - 2
saleFlush/main.go

@@ -36,6 +36,7 @@ var (
 	{"oldCode":"070200","show":"数据事业部/售前与售后组","newId":"59007"}
 	]`
 	codeDeptMapping = map[string]*newDept{}
+	beforeMoneyMap  = map[string]int{}
 )
 
 type (
@@ -58,9 +59,22 @@ func init() {
 			Id:   gconv.Int(m["newId"]),
 		}
 	}
+	res, err := g.DB("release").Query(context.TODO(), "SELECT createTime,orderCode,payMoney from moneyCorrection WHERE redType='金额红冲' and payMoney!=0 AND createTime >'2024-01-01 00:00:00' and createTime < '2024-09-10 00:00:00'")
+	if err != nil {
+		panic(err)
+	}
+	//计算原金额
+	for _, row := range res.List() {
+		var (
+			orderCode = gconv.String(row["orderCode"])
+			payMoney  = gconv.Int(row["payMoney"])
+		)
+		beforeMoneyMap[orderCode] = beforeMoneyMap[orderCode] - payMoney
+	}
 }
 
 func main() {
+	redRecord(context.TODO())
 	CreateSaleRecord(context.TODO())
 	//fmt.Println(int(time.Now().Month()))
 }
@@ -88,7 +102,9 @@ func CreateSaleRecord(ctx context.Context) {
 			reason          = "" //协议归档
 			statistics_time = ""
 		)
-
+		if _, ok := beforeMoneyMap[order_code]; ok {
+			continue
+		}
 		if is_backstage_order == 1 {
 			//后台创建订单获取业绩时间
 			if (refund_status == 1 || refund_status == 2 || order_status == 1) && pay_money > 0 {
@@ -252,8 +268,129 @@ func CreateSaleRecord(ctx context.Context) {
 }
 
 func SaveDb(ctx context.Context, data []map[string]interface{}) {
-	_, err := g.DB().Save(ctx, "order_sale_record_release", data, 10)
+	_, err := g.DB().Save(ctx, "order_sale_record_release1", data, 10)
 	if err != nil {
 		g.Log().Errorf(ctx, "插入数据异常 %v", err)
 	}
 }
+
+// redRecord 红冲记录补全
+func redRecord(ctx context.Context) {
+	for orderCode, money := range beforeMoneyMap {
+		var insertArr []map[string]interface{}
+		m, err := g.DB("release").GetOne(ctx, "SELECT order_status,order_money,order_code,pay_money,saleDep,salesperson_id,salesperson,saleMoney,is_backstage_order,sale_time,pay_time,refund_status,create_time FROM dataexport_order WHERE order_code=?", orderCode)
+		if err != nil || m.IsEmpty() {
+			g.Log().Errorf(ctx, "查询订单异常 %s", orderCode)
+		}
+		var (
+			is_backstage_order = gconv.Int(m["is_backstage_order"])
+			sale_time          = gconv.String(m["sale_time"])
+			order_code         = gconv.String(m["order_code"])
+			salesperson_id     = gconv.String(m["salesperson_id"])
+			salesperson        = gconv.String(m["salesperson"])
+			saleDep            = gconv.String(m["saleDep"])
+			create_time        = gconv.String(m["create_time"])
+			pay_money          = gconv.Int(m["pay_money"])
+
+			uuidStr         = uuid.New().String()
+			reason          = "" //协议归档
+			statistics_time = ""
+		)
+
+		if is_backstage_order == 1 {
+			date, err := time.ParseInLocation(time.DateTime, sale_time, time.Local)
+			if err != nil {
+				g.Log().Printf(ctx, "格式化销售时间异常 %s %s", order_code, sale_time)
+				continue
+			}
+			if date.Month() <= 3 {
+				//用录入的业绩统计时间
+				statistics_time = sale_time
+			} else {
+				//管理后台创建的订单:协议归档时间和首笔回款时间的最小值。
+				res, _ := g.DB("release").GetOne(ctx, "SELECT * FROM (SELECT * FROM(SELECT contract_archive_time as t ,'0' as v  FROM contract WHERE order_code=? and contract_archive_time is NOT NULL) as t1 UNION ALL SELECT * FROM(SELECT return_time as t ,'1' as v FROM return_money_record WHERE order_code=? AND state=1) as t2) as d ORDER BY t asc LIMIT 1", order_code, order_code)
+				if !res.IsEmpty() {
+					var (
+						tStr = gconv.String(res.Map()["t"])
+						v    = gconv.String(res.Map()["v"])
+					)
+					if tStr != "" {
+						statistics_time = tStr
+					}
+					if v == "1" {
+						reason = "协议归档"
+					} else {
+						reason = "回款成功"
+					}
+				}
+			}
+			if statistics_time == "" {
+				statistics_time = sale_time
+			}
+		} else {
+			g.Log().Errorf(ctx, "线上单子", orderCode)
+			continue
+		}
+
+		var lastRecord map[string]interface{}
+		if strings.Contains(salesperson, ",") {
+			g.Log().Errorf(ctx, "撞单单", orderCode)
+			continue
+		} else {
+			dept, ok := codeDeptMapping[saleDep]
+			if !ok {
+				g.Log().Errorf(ctx, "%s 未找到 %s 部门对应关系 ", order_code, saleDep)
+				continue
+			}
+			record := map[string]interface{}{
+				"state":           -1,
+				"ordercode":       order_code,
+				"saler_Id":        salesperson_id,
+				"saler_name":      salesperson,
+				"saler_dept":      dept.Name,
+				"saler_dept_id":   dept.Id,
+				"change_value":    pay_money + money,
+				"money":           pay_money + money,
+				"group_uuid":      uuidStr,
+				"operator":        "系统自动",
+				"change_reason":   reason,
+				"statistics_time": statistics_time,
+				"create_time":     create_time,
+			}
+			insertArr = append(insertArr, record)
+			lastRecord = record
+		}
+
+		//红冲记录插入
+		res, err := g.DB("release").Query(ctx, "SELECT createTime,orderCode,payMoney from moneyCorrection WHERE redType='金额红冲' and payMoney!=0 AND orderCode=? order by createTime asc", orderCode)
+		if err != nil {
+			panic(err)
+		}
+
+		for index, row := range res.List() {
+			var (
+				createTime = gconv.String(row["createTime"])
+				payMoney   = gconv.Int(row["payMoney"])
+				newRecord  = map[string]interface{}{}
+			)
+			for key, value := range lastRecord {
+				newRecord[key] = value
+			}
+			lastUUid := lastRecord["group_uuid"]
+			newRecord["change_value"] = payMoney
+			newRecord["money"] = gconv.Int(lastRecord["money"]) + payMoney
+			newRecord["group_uuid"] = uuid.New().String()
+			newRecord["last_group_uuid"] = lastUUid
+			newRecord["operator"] = "系统自动"
+			newRecord["change_reason"] = "业绩红冲"
+			newRecord["statistics_time"] = createTime
+			newRecord["create_time"] = createTime
+			if index == res.Len()-1 {
+				newRecord["state"] = 1
+			}
+			lastRecord = newRecord
+			insertArr = append(insertArr, newRecord)
+		}
+		SaveDb(ctx, insertArr)
+	}
+}