|
@@ -6,462 +6,129 @@ import (
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/os/gfile"
|
|
"github.com/gogf/gf/v2/os/gfile"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
- "github.com/google/uuid"
|
|
|
|
- "strings"
|
|
|
|
"time"
|
|
"time"
|
|
|
|
+ "workTasks/saleFlush/util"
|
|
)
|
|
)
|
|
|
|
|
|
-var (
|
|
|
|
- deptMapping = `[
|
|
|
|
- {"oldCode":"010000","show":"销售一部","newId":"58435"},
|
|
|
|
- {"oldCode":"010100","show":"销售一部/电销部","newId":"26820"},
|
|
|
|
- {"oldCode":"010101","show":"销售一部/电销部/电销一组","newId":"26821"},
|
|
|
|
- {"oldCode":"010102","show":"销售一部/电销部/电销二组","newId":"26822"},
|
|
|
|
- {"oldCode":"010103","show":"销售一部/电销部/电销三组","newId":"26823"},
|
|
|
|
- {"oldCode":"010104","show":"销售一部/电销部/电销四组","newId":"26824"},
|
|
|
|
- {"oldCode":"010200","show":"销售一部/大客户部","newId":"27275"},
|
|
|
|
- {"oldCode":"010300","show":"销售一部/渠道部","newId":"-1"},
|
|
|
|
- {"oldCode":"020000","show":"产品部","newId":"26920"},
|
|
|
|
- {"oldCode":"020100","show":"产品部/售后服务组","newId":"58437"},
|
|
|
|
- {"oldCode":"020200","show":"产品部/客户成功组","newId":"27777"},
|
|
|
|
- {"oldCode":"030000","show":"销售二部","newId":"58416"},
|
|
|
|
- {"oldCode":"040000","show":"运营部","newId":"27103"},
|
|
|
|
- {"oldCode":"040100","show":"运营部/客户成功组","newId":"59005"},
|
|
|
|
- {"oldCode":"040200","show":"运营部/运营组","newId":"59028"},
|
|
|
|
- {"oldCode":"050000","show":"销售三部","newId":"27955"},
|
|
|
|
- {"oldCode":"060000","show":"市场部","newId":"59010"},
|
|
|
|
- {"oldCode":"060100","show":"市场部/市场组","newId":"59011"},
|
|
|
|
- {"oldCode":"060200","show":"市场部/大客组","newId":"59017"},
|
|
|
|
- {"oldCode":"070000","show":"数据事业部","newId":"59006"},
|
|
|
|
- {"oldCode":"070100","show":"数据事业部/销售组","newId":"59012"},
|
|
|
|
- {"oldCode":"070200","show":"数据事业部/售前与售后组","newId":"59007"}
|
|
|
|
- ]`
|
|
|
|
- codeDeptMapping = map[string]*newDept{}
|
|
|
|
- beforeMoneyMap = map[string]int{} //红冲单子
|
|
|
|
- hasSaleMap = map[string]bool{} //已存在业绩
|
|
|
|
- table = "order_sale_record"
|
|
|
|
-
|
|
|
|
- updateSaleTimeMapping = map[string]map[string]interface{}{}
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
-type (
|
|
|
|
- saleMoneyObj struct {
|
|
|
|
- Data []struct {
|
|
|
|
- Name string `json:"name"`
|
|
|
|
- Money float64 `json:"money"`
|
|
|
|
- } `json:"data"`
|
|
|
|
- }
|
|
|
|
- newDept struct {
|
|
|
|
- Name string
|
|
|
|
- Id int
|
|
|
|
- }
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
-func init() {
|
|
|
|
- //加载历史部门
|
|
|
|
- for _, m := range gconv.Maps(deptMapping) {
|
|
|
|
- codeDeptMapping[gconv.String(m["oldCode"])] = &newDept{
|
|
|
|
- Name: gconv.String(m["show"]),
|
|
|
|
- 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 orderCode='153906243232'")
|
|
|
|
- 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
|
|
|
|
- }
|
|
|
|
- ////加载已刷新过的业绩
|
|
|
|
- //res2, err := g.DB().Query(context.TODO(), fmt.Sprintf("SELECT ordercode from %s ", table))
|
|
|
|
- //if err != nil {
|
|
|
|
- // panic(err)
|
|
|
|
- //}
|
|
|
|
- //for _, row := range res2.List() {
|
|
|
|
- // var (
|
|
|
|
- // orderCode = gconv.String(row["ordercode"])
|
|
|
|
- // )
|
|
|
|
- // hasSaleMap[orderCode] = true
|
|
|
|
- //}
|
|
|
|
-}
|
|
|
|
|
|
+const orderUpdateTime = "2024-10-10 00:00:00"
|
|
|
|
|
|
func main() {
|
|
func main() {
|
|
- redRecord(context.TODO())
|
|
|
|
- //CreateSaleRecord(context.TODO())
|
|
|
|
|
|
+ flushOrderSaleTime(false)
|
|
|
|
+ supplementFlush(false)
|
|
}
|
|
}
|
|
|
|
|
|
-func CreateSaleRecord(ctx context.Context) {
|
|
|
|
- res, err := g.DB("release").Query(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 in ('153906243232')")
|
|
|
|
|
|
+// flushOrderSaleTime 订单表销售业绩同步
|
|
|
|
+func flushOrderSaleTime(flush bool) {
|
|
|
|
+ var (
|
|
|
|
+ ctx = context.TODO()
|
|
|
|
+ updateMapping = map[string]string{}
|
|
|
|
+ start = time.Now()
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ res, err := g.DB().Query(ctx, `SELECT ordercode,st,sale_time FROM
|
|
|
|
+ (SELECT ordercode,MIN(statistics_time)st FROM jianyu.order_sale_record
|
|
|
|
+ WHERE state IN (1,-1)
|
|
|
|
+ GROUP BY ordercode) ors
|
|
|
|
+ LEFT JOIN
|
|
|
|
+ (SELECT order_code,sale_time FROM jianyu.dataexport_order) dco
|
|
|
|
+ ON ors.ordercode=dco.order_code
|
|
|
|
+ WHERE IF(LEFT(ors.st,10)=LEFT(sale_time,10),1,0)=0`)
|
|
if err != nil {
|
|
if err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
- var insertArr []map[string]interface{}
|
|
|
|
- for _, m := range res.List() {
|
|
|
|
- var (
|
|
|
|
- pay_money = gconv.Int(m["pay_money"])
|
|
|
|
- order_money = gconv.Int(m["order_money"])
|
|
|
|
- is_backstage_order = gconv.Int(m["is_backstage_order"])
|
|
|
|
- sale_time = gconv.String(m["sale_time"])
|
|
|
|
- order_code = gconv.String(m["order_code"])
|
|
|
|
- order_status = gconv.Int(m["order_status"])
|
|
|
|
- refund_status = gconv.Int(m["refund_status"])
|
|
|
|
- salesperson_id = gconv.String(m["salesperson_id"])
|
|
|
|
- salesperson = gconv.String(m["salesperson"])
|
|
|
|
- saleDep = gconv.String(m["saleDep"])
|
|
|
|
- create_time = gconv.String(m["create_time"])
|
|
|
|
-
|
|
|
|
- uuidStr = uuid.New().String()
|
|
|
|
- reason = "" //协议归档
|
|
|
|
- statistics_time = ""
|
|
|
|
- )
|
|
|
|
- //if _, ok := beforeMoneyMap[order_code]; ok {
|
|
|
|
- // continue
|
|
|
|
- //}
|
|
|
|
- //if _, ok := hasSaleMap[order_code]; ok {
|
|
|
|
- // continue
|
|
|
|
- //}
|
|
|
|
- if is_backstage_order == 1 {
|
|
|
|
- //后台创建订单获取业绩时间
|
|
|
|
- if (refund_status == 1 || refund_status == 2 || order_status == 1) && pay_money > 0 {
|
|
|
|
- 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 && date.Year() == 2024 {
|
|
|
|
- //管理后台创建的订单:协议归档时间和首笔回款时间的最小值。
|
|
|
|
- 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 = "回款成功"
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- statistics_time = sale_time
|
|
|
|
- }
|
|
|
|
- if statistics_time == "" {
|
|
|
|
- statistics_time = sale_time
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- //线上单子获取业绩时间
|
|
|
|
- if pay_money > 0 {
|
|
|
|
- reason = "回款成功"
|
|
|
|
- statistics_time = gconv.String(m["pay_time"])
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if statistics_time != sale_time && statistics_time != "" {
|
|
|
|
- isSame := false
|
|
|
|
- if sale_time != "" {
|
|
|
|
- newData, old := "", ""
|
|
|
|
- if arr := strings.Split(statistics_time, " "); len(arr) == 2 {
|
|
|
|
- newData = arr[0]
|
|
|
|
- }
|
|
|
|
- if arr := strings.Split(sale_time, " "); len(arr) == 2 {
|
|
|
|
- old = arr[0]
|
|
|
|
- }
|
|
|
|
- if newData == old && newData != "" {
|
|
|
|
- isSame = true
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if !isSame {
|
|
|
|
- updateSaleTimeMapping[order_code] = map[string]interface{}{
|
|
|
|
- "old_sale_time": sale_time,
|
|
|
|
- "new_sale_time": statistics_time,
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
+ for i, m := range res.List() {
|
|
|
|
+ if i%1000 == 0 {
|
|
|
|
+ g.Log().Infof(ctx, "progress %d/%d", i, res.Len())
|
|
}
|
|
}
|
|
-
|
|
|
|
- if salesperson_id != "" {
|
|
|
|
- if strings.Contains(salesperson, ",") {
|
|
|
|
- sale := saleMoneyObj{}
|
|
|
|
- gconv.Struct(gconv.String(m["saleMoney"]), &sale)
|
|
|
|
- idArr := strings.Split(salesperson_id, ",")
|
|
|
|
- personArr := strings.Split(salesperson, ",")
|
|
|
|
- depArr := strings.Split(saleDep, ",")
|
|
|
|
- if len(sale.Data)-1 != len(idArr) || len(idArr) != len(personArr) {
|
|
|
|
- g.Log().Errorf(ctx, "%s 数据格式异常 %d %d %d %d", order_code, len(sale.Data)-1, len(idArr), len(personArr), len(depArr))
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- for index, name := range personArr {
|
|
|
|
- var (
|
|
|
|
- depCode string
|
|
|
|
- money int
|
|
|
|
- )
|
|
|
|
- if index > len(depArr)-1 {
|
|
|
|
- depCode = depArr[0]
|
|
|
|
- } else {
|
|
|
|
- depCode = depArr[index]
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- dept, ok := codeDeptMapping[depCode]
|
|
|
|
- if !ok {
|
|
|
|
- g.Log().Errorf(ctx, "%s 未找到 %s 部门对应关系 ", order_code, depCode)
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- for _, datum := range sale.Data {
|
|
|
|
- if datum.Name == name {
|
|
|
|
- money = gconv.Int(datum.Money * 100)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if money == 0 {
|
|
|
|
- g.Log().Errorf(ctx, "%s 未找到 %s 对应业绩 ", order_code, name)
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- m := map[string]interface{}{
|
|
|
|
- "state": 2,
|
|
|
|
- "ordercode": order_code,
|
|
|
|
- "saler_Id": idArr[index],
|
|
|
|
- "saler_name": name,
|
|
|
|
- "saler_dept": dept.Name,
|
|
|
|
- "saler_dept_id": dept.Id,
|
|
|
|
- "change_value": money,
|
|
|
|
- "money": money,
|
|
|
|
- "group_uuid": uuidStr,
|
|
|
|
- "operator": "系统自动",
|
|
|
|
- "create_time": create_time,
|
|
|
|
- }
|
|
|
|
- if statistics_time != "" {
|
|
|
|
- m["statistics_time"] = statistics_time
|
|
|
|
- m["state"] = 1
|
|
|
|
- m["change_reason"] = reason
|
|
|
|
- }
|
|
|
|
- insertArr = append(insertArr, m)
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- dept, ok := codeDeptMapping[saleDep]
|
|
|
|
- if !ok {
|
|
|
|
- g.Log().Errorf(ctx, "%s 未找到 %s 部门对应关系 ", order_code, saleDep)
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- var money = pay_money
|
|
|
|
- if is_backstage_order == 0 {
|
|
|
|
- money = order_money
|
|
|
|
- }
|
|
|
|
- m := map[string]interface{}{
|
|
|
|
- "state": 2,
|
|
|
|
- "ordercode": order_code,
|
|
|
|
- "saler_Id": salesperson_id,
|
|
|
|
- "saler_name": salesperson,
|
|
|
|
- "saler_dept": dept.Name,
|
|
|
|
- "saler_dept_id": dept.Id,
|
|
|
|
- "change_value": money,
|
|
|
|
- "money": money,
|
|
|
|
- "group_uuid": uuidStr,
|
|
|
|
- "operator": "系统自动",
|
|
|
|
- "change_reason": reason,
|
|
|
|
- "create_time": create_time,
|
|
|
|
- }
|
|
|
|
- if statistics_time != "" {
|
|
|
|
- m["statistics_time"] = statistics_time
|
|
|
|
- m["state"] = 1
|
|
|
|
- m["change_reason"] = reason
|
|
|
|
- }
|
|
|
|
- insertArr = append(insertArr, m)
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- money := order_money
|
|
|
|
- if is_backstage_order == 1 {
|
|
|
|
- money = pay_money
|
|
|
|
- }
|
|
|
|
- m := map[string]interface{}{
|
|
|
|
- "state": 2,
|
|
|
|
- "ordercode": order_code,
|
|
|
|
- "saler_Id": -1,
|
|
|
|
- "saler_name": "-",
|
|
|
|
- "saler_dept": "运营部",
|
|
|
|
- "saler_dept_id": 27103,
|
|
|
|
- "change_value": money,
|
|
|
|
- "money": money,
|
|
|
|
- "group_uuid": uuidStr,
|
|
|
|
- "operator": "系统自动",
|
|
|
|
- "create_time": create_time,
|
|
|
|
- }
|
|
|
|
- if statistics_time != "" {
|
|
|
|
- m["statistics_time"] = statistics_time
|
|
|
|
- m["state"] = 1
|
|
|
|
- m["change_reason"] = "回款成功"
|
|
|
|
- }
|
|
|
|
- insertArr = append(insertArr, m)
|
|
|
|
|
|
+ var (
|
|
|
|
+ orderCode = gconv.String(m["ordercode"])
|
|
|
|
+ st = gconv.String(m["st"])
|
|
|
|
+ )
|
|
|
|
+ if orderCode == "" || st == "" {
|
|
|
|
+ continue
|
|
}
|
|
}
|
|
- //save
|
|
|
|
- //if len(insertArr) >= 100 {
|
|
|
|
- // SaveDb(ctx, insertArr)
|
|
|
|
- // insertArr = []map[string]interface{}{}
|
|
|
|
- //}
|
|
|
|
|
|
+ updateMapping[orderCode] = st
|
|
}
|
|
}
|
|
- //save
|
|
|
|
- //if len(insertArr) > 0 {
|
|
|
|
- // SaveDb(ctx, insertArr)
|
|
|
|
- // insertArr = []map[string]interface{}{}
|
|
|
|
- //}
|
|
|
|
- //UpdateSaleTime(context.TODO())
|
|
|
|
-
|
|
|
|
- g.Log().Printf(ctx, "%d", len(updateSaleTimeMapping))
|
|
|
|
- if err := gfile.PutContents("./aaa.json", gconv.String(updateSaleTimeMapping)); err != nil {
|
|
|
|
- panic(err)
|
|
|
|
|
|
+ g.Log().Infof(ctx, "加载完成 耗时%v秒", time.Now().Sub(start).Seconds())
|
|
|
|
+ _ = gfile.PutContents("./update.json", gconv.String(updateMapping))
|
|
|
|
+ if !flush {
|
|
|
|
+ return
|
|
}
|
|
}
|
|
-}
|
|
|
|
-
|
|
|
|
-func SaveDb(ctx context.Context, data []map[string]interface{}) {
|
|
|
|
- return
|
|
|
|
- _, err := g.DB().Save(ctx, table, data, 10)
|
|
|
|
- if err != nil {
|
|
|
|
- g.Log().Errorf(ctx, "插入数据异常 %v", err)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func UpdateSaleTime(ctx context.Context) {
|
|
|
|
- return
|
|
|
|
- for orderCode, m := range updateSaleTimeMapping {
|
|
|
|
|
|
+ //更新销售时间
|
|
|
|
+ var (
|
|
|
|
+ total = len(updateMapping)
|
|
|
|
+ index = 0
|
|
|
|
+ updateTime = time.Now()
|
|
|
|
+ )
|
|
|
|
+ for orderCode, newTime := range updateMapping {
|
|
|
|
+ if index%1000 == 0 {
|
|
|
|
+ g.Log().Infof(ctx, "progress %d/%d", index, total)
|
|
|
|
+ }
|
|
_, err := g.DB().Update(ctx, "dataexport_order", map[string]interface{}{
|
|
_, err := g.DB().Update(ctx, "dataexport_order", map[string]interface{}{
|
|
- "sale_time": m["new_sale_time"],
|
|
|
|
|
|
+ "sale_time": newTime,
|
|
|
|
+ "autoUpdate": orderUpdateTime,
|
|
}, map[string]interface{}{
|
|
}, map[string]interface{}{
|
|
"order_code": orderCode,
|
|
"order_code": orderCode,
|
|
})
|
|
})
|
|
if err != nil {
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "%s err %v", orderCode, err)
|
|
g.Log().Errorf(ctx, "%s err %v", orderCode, err)
|
|
}
|
|
}
|
|
|
|
+ index++
|
|
}
|
|
}
|
|
|
|
+ g.Log().Infof(ctx, "更新完成 耗时%v秒", time.Now().Sub(updateTime).Seconds())
|
|
}
|
|
}
|
|
|
|
|
|
-// redRecord 红冲记录补全
|
|
|
|
-func redRecord(ctx context.Context) {
|
|
|
|
-
|
|
|
|
- for orderCode, money := range beforeMoneyMap {
|
|
|
|
- if _, ok := hasSaleMap[orderCode]; ok {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- 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)
|
|
|
|
|
|
+// supplementFlush 销售业绩补录表部门
|
|
|
|
+func supplementFlush(flush bool) {
|
|
|
|
+ var (
|
|
|
|
+ ctx = context.TODO()
|
|
|
|
+ updateMapping = map[string]int{}
|
|
|
|
+ start = time.Now()
|
|
|
|
+ )
|
|
|
|
+ res, err := g.DB().Query(ctx, "SELECT id,salesperson_id FROM supplement_sale_person")
|
|
|
|
+ if err != nil {
|
|
|
|
+ panic(err)
|
|
|
|
+ }
|
|
|
|
+ for i, m := range res.List() {
|
|
|
|
+ if i%1000 == 0 {
|
|
|
|
+ g.Log().Infof(ctx, "progress %d/%d", i, res.Len())
|
|
}
|
|
}
|
|
var (
|
|
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 = ""
|
|
|
|
|
|
+ orderId = gconv.String(m["id"])
|
|
|
|
+ salesperson_id = gconv.Int64(m["salesperson_id"])
|
|
)
|
|
)
|
|
-
|
|
|
|
- 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 && date.Year() == 2024 {
|
|
|
|
- //管理后台创建的订单:协议归档时间和首笔回款时间的最小值。
|
|
|
|
- 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 = "回款成功"
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- //用录入的业绩统计时间
|
|
|
|
- statistics_time = sale_time
|
|
|
|
- }
|
|
|
|
- if statistics_time == "" {
|
|
|
|
- statistics_time = sale_time
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- g.Log().Errorf(ctx, "线上单子", orderCode)
|
|
|
|
|
|
+ if orderId == "" || salesperson_id == 0 {
|
|
continue
|
|
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
|
|
|
|
|
|
+ deptId, _, _, _ := util.GetDeptInfoByAdminId(salesperson_id)
|
|
|
|
+ if deptId > 0 {
|
|
|
|
+ updateMapping[orderId] = deptId
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+ g.Log().Infof(ctx, "supplementFlush 加载完成 耗时%v秒", time.Now().Sub(start).Seconds())
|
|
|
|
+ if !flush {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
|
|
- //红冲记录插入
|
|
|
|
- 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)
|
|
|
|
|
|
+ var (
|
|
|
|
+ total = len(updateMapping)
|
|
|
|
+ index = 0
|
|
|
|
+ updateTime = time.Now()
|
|
|
|
+ )
|
|
|
|
+ for orderId, deptId := range updateMapping {
|
|
|
|
+ if index%1000 == 0 {
|
|
|
|
+ g.Log().Infof(ctx, "progress %d/%d", index, total)
|
|
}
|
|
}
|
|
-
|
|
|
|
- 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)
|
|
|
|
|
|
+ _, err := g.DB().Update(ctx, "supplement_sale_person", map[string]interface{}{
|
|
|
|
+ "saleDep": deptId,
|
|
|
|
+ }, map[string]interface{}{
|
|
|
|
+ "id": orderId,
|
|
|
|
+ })
|
|
|
|
+ if err != nil {
|
|
|
|
+ g.Log().Errorf(ctx, "%s err %v", orderId, err)
|
|
}
|
|
}
|
|
- SaveDb(ctx, insertArr)
|
|
|
|
|
|
+ index++
|
|
}
|
|
}
|
|
|
|
+ g.Log().Infof(ctx, "supplementFlush 更新完成 耗时%v秒", time.Now().Sub(updateTime).Seconds())
|
|
}
|
|
}
|