package service import ( "database/sql" "log" "math" "time" common "app.yhyue.com/moapp/jybase/common" . "bp.jydev.jianyu360.cn/BaseService/biService/entity" "bp.jydev.jianyu360.cn/BaseService/biService/rpc/biservice" ) func DrawClue(this *biservice.DrawClueReq) *biservice.AddProjectResp { count, status := DrawClueSync(this) log.Println("领取数量 ", count) return &biservice.AddProjectResp{ ErrorCode: 0, Data: &biservice.AddProject{ Status: int64(status), Count: int64(count), }, } } func DrawClueSync(this *biservice.DrawClueReq) (int, int) { if DataLock.TryLock() { defer DataLock.Unlock() count1 := JyBiTidb.Count("dwd_f_crm_open_sea", map[string]interface{}{"level": 1}) count2 := JyBiTidb.Count("dwd_f_crm_open_sea", map[string]interface{}{"level": 2}) // count3 := JyBiTidb.Count("dwd_f_crm_open_sea", map[string]interface{}{"level": 3}) counts1, counts2, counts3 := int64(0), int64(0), int64(0) counts1 = int64(math.Ceil(float64(this.Count) / float64(10) * 2)) if this.Count-counts1 == 0 { counts2 = 0 counts3 = 0 } else { counts2 = int64(math.Ceil(float64(this.Count) / float64(10) * 4)) if this.Count-counts1-counts2 == 0 { counts3 = 0 } else { counts3 = this.Count - counts1 - counts2 } } if counts1 > count1 { counts2 += counts1 - count1 counts1 = count1 } if counts2 > count2 { counts3 += counts2 - count2 counts2 = count2 } log.Println(count1, count2) log.Println(counts1, counts2, counts3) return DrawClues(this.PositionId, counts1, counts2, counts3), 1 } else { return 0, 2 } } func DrawClues(positionId, count1, count2, count3 int64) int { data1, data2, data3, drawCount := &[]map[string]interface{}{}, &[]map[string]interface{}{}, &[]map[string]interface{}{}, 0 if count1 > 0 { data1 = JyBiTidb.Find("dwd_f_crm_open_sea", map[string]interface{}{"level": 1}, "", "", 0, int(count1)) } if count2 > 0 { data2 = JyBiTidb.Find("dwd_f_crm_open_sea", map[string]interface{}{"level": 2}, "", "", 0, int(count2)) } if count3 > 0 { data3 = JyBiTidb.Find("dwd_f_crm_open_sea", map[string]interface{}{"level": 3}, "", "", 0, int(count3)) } nowTime := time.Now().Format("2006-01-02 15:04:05") seatNumber, name := getSeatNumber(positionId) if data1 != nil && len(*data1) > 0 { for _, v := range *data1 { //update postionid and update record clueId := common.Int64All(v["clue_id"]) trailstatus := "" cluedata := JyBiTidb.FindOne("dwd_f_crm_clue_info", map[string]interface{}{"id": clueId}, "", "") if cluedata != nil && len(*cluedata) > 0 { trailstatus = common.ObjToString((*cluedata)["trailstatus"]) } if JyBiMysql.ExecTx("领取线索等", func(tx *sql.Tx) bool { updateClue := map[string]interface{}{ "position_id": positionId, "seatNumber": seatNumber, "is_assign": 1, "updatetime": nowTime, "comeintime": nowTime, } if trailstatus != "08" { updateClue["trailstatus"] = "01" } ok1 := JyBiTidb.UpdateByTx(tx, "dwd_f_crm_clue_info", map[string]interface{}{"id": clueId}, updateClue) ok2 := JyBiTidb.DeleteByTx(tx, "dwd_f_crm_open_sea", map[string]interface{}{"clue_id": clueId}) seaId := JyBiTidb.InsertByTx(tx, "dwd_f_crm_private_sea", map[string]interface{}{ "clue_id": clueId, "seatNumber": seatNumber, "position_id": positionId, "comeintime": nowTime, "comeinsource": 3, "is_task": 1, "task_time": nowTime, "tasktime": nowTime, "taskstatus": 0, "tasksource": "领取公海线索", }) recordId := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "position_id", "change_type": "所属人变更", "old_value": "/", "new_value": name, "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId1 := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_type": "领取公海线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId2 := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_type": "加入任务车", "new_value": "领取公海线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId3, recordId4 := int64(0), int64(0) if trailstatus != "08" { recordId3 = JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "trailstatus", "change_type": "基本信息变更", "old_value": "商机线索", "new_value": "新增", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId4 = JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "trailstatus", "change_type": "基本信息变更", "old_value": CodeTrail[trailstatus], "new_value": "商机线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) } return ok1 && ok2 && seaId > 0 && recordId > 0 && recordId1 > 0 && recordId2 > 0 && recordId3 > -1 && recordId4 > -1 }) { drawCount++ log.Println("领取线索1成功") } else { log.Println("领取线索1失败") } } } if data2 != nil && len(*data2) > 0 { for _, v := range *data2 { clueId := common.Int64All(v["clue_id"]) trailstatus := "" cluedata := JyBiTidb.FindOne("dwd_f_crm_clue_info", map[string]interface{}{"id": clueId}, "", "") if cluedata != nil && len(*cluedata) > 0 { trailstatus = common.ObjToString((*cluedata)["trailstatus"]) } if JyBiMysql.ExecTx("领取线索等", func(tx *sql.Tx) bool { updateClue := map[string]interface{}{ "position_id": positionId, "seatNumber": seatNumber, "is_assign": 1, "updatetime": nowTime, "comeintime": nowTime, } if trailstatus != "08" { updateClue["trailstatus"] = "01" } ok1 := JyBiTidb.UpdateByTx(tx, "dwd_f_crm_clue_info", map[string]interface{}{"id": clueId}, updateClue) ok2 := JyBiTidb.DeleteByTx(tx, "dwd_f_crm_open_sea", map[string]interface{}{"clue_id": clueId}) seaId := JyBiTidb.InsertByTx(tx, "dwd_f_crm_private_sea", map[string]interface{}{ "clue_id": clueId, "seatNumber": seatNumber, "position_id": positionId, "comeintime": nowTime, "comeinsource": 3, "is_task": 1, "task_time": nowTime, "tasktime": nowTime, "taskstatus": 0, "tasksource": "领取公海线索", }) recordId := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "position_id", "change_type": "所属人变更", "old_value": "/", "new_value": name, "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId1 := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_type": "领取公海线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId2 := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_type": "加入任务车", "new_value": "领取公海线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId3, recordId4 := int64(0), int64(0) if trailstatus != "08" { recordId3 = JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "trailstatus", "change_type": "基本信息变更", "old_value": "商机线索", "new_value": "新增", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId4 = JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "trailstatus", "change_type": "基本信息变更", "old_value": CodeTrail[trailstatus], "new_value": "商机线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) } return ok1 && ok2 && seaId > 0 && recordId > 0 && recordId1 > 0 && recordId2 > 0 && recordId3 > -1 && recordId4 > -1 }) { drawCount++ log.Println("领取线索2成功") } else { log.Println("领取线索2失败") } } } if data3 != nil && len(*data3) > 0 { for _, v := range *data3 { clueId := common.Int64All(v["clue_id"]) trailstatus := "" cluedata := JyBiTidb.FindOne("dwd_f_crm_clue_info", map[string]interface{}{"id": clueId}, "", "") if cluedata != nil && len(*cluedata) > 0 { trailstatus = common.ObjToString((*cluedata)["trailstatus"]) } if JyBiMysql.ExecTx("领取线索等", func(tx *sql.Tx) bool { updateClue := map[string]interface{}{ "position_id": positionId, "seatNumber": seatNumber, "is_assign": 1, "updatetime": nowTime, "comeintime": nowTime, } if trailstatus != "08" { updateClue["trailstatus"] = "01" } ok1 := JyBiTidb.UpdateByTx(tx, "dwd_f_crm_clue_info", map[string]interface{}{"id": clueId}, updateClue) ok2 := JyBiTidb.DeleteByTx(tx, "dwd_f_crm_open_sea", map[string]interface{}{"clue_id": clueId}) seaId := JyBiTidb.InsertByTx(tx, "dwd_f_crm_private_sea", map[string]interface{}{ "clue_id": clueId, "seatNumber": seatNumber, "position_id": positionId, "comeintime": nowTime, "comeinsource": 3, "is_task": 1, "task_time": nowTime, "tasktime": nowTime, "taskstatus": 0, "tasksource": "领取公海线索", }) recordId := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "position_id", "change_type": "所属人变更", "old_value": "/", "new_value": name, "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId1 := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_type": "领取公海线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId2 := JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_type": "加入任务车", "new_value": "领取公海线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId3, recordId4 := int64(0), int64(0) if trailstatus != "08" { recordId3 = JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "trailstatus", "change_type": "基本信息变更", "old_value": "商机线索", "new_value": "新增", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) recordId4 = JyBiTidb.InsertByTx(tx, "dwd_f_crm_clue_change_record", map[string]interface{}{ "clue_id": clueId, "position_id": positionId, "change_field": "trailstatus", "change_type": "基本信息变更", "old_value": CodeTrail[trailstatus], "new_value": "商机线索", "createtime": nowTime, "BCPCID": common.GetRandom(32), "operator_id": positionId, }) } return ok1 && ok2 && seaId > 0 && recordId > 0 && recordId1 > 0 && recordId2 > 0 && recordId3 > -1 && recordId4 > -1 }) { drawCount++ log.Println("领取线索3成功") } else { log.Println("领取线索3失败") } } } return drawCount } func getSeatNumber(positionId int64) (seatNumber, name string) { positionData := JyTidb.FindOne("base_position", map[string]interface{}{"id": positionId}, "", "") if positionData != nil && len(*positionData) > 0 { userId := common.Int64All((*positionData)["user_id"]) if userId > 0 { userData, ok := Mgo.FindOne("user", map[string]interface{}{"base_user_id": userId}) if ok && userData != nil && len(*userData) > 0 { s_phone := common.ObjToString((*userData)["s_phone"]) if s_phone == "" { s_phone = common.ObjToString((*userData)["s_m_phone"]) } saleData := JyBiTidb.FindOne("jy_salesperson_info", map[string]interface{}{"phone": s_phone}, "", "") if saleData != nil && len(*saleData) > 0 { seatNumber = common.ObjToString((*saleData)["seatNumber"]) name = common.ObjToString((*saleData)["name"]) } } } } return }