master
huanghai 5 years ago
parent 9a55357615
commit 568e795fe1

@ -16,6 +16,9 @@ import (
var db = DbUtil.Engine
//每次获取的条数
var limit = 100
// 日志文件路径
var progressFilePath = "/usr/local/SyncDataLogs/"
@ -68,6 +71,52 @@ func init() {
2020-07-16
*/
func DataExchange() {
//是不是进行过首次上报,如果没有话,需要执行一次组织机构上报
//日志文件位置
logName := progressFilePath + "orgInit.log"
//判断文件是不是存在
if !FileUtil.PathExists(logName) {
//上报组织机构,读取t_base_organization的SQL脚本
//SQL内容
sql := FileUtil.ReadFileContent("./Sql/t_base_organization.sql")
//组织机构是需要按org_type,area_code排序
orgSql := sql + " order by t1.org_type,t1.area_code"
list, _ := db.SQL(orgSql).Query().List()
var t tableStruct
for i := range sqlDict {
if sqlDict[i].TableName == "t_base_organization" {
t = sqlDict[i]
break
}
}
var count = 0
var isFinish = false
for {
if isFinish {
break
}
//利用切片分批次上报
if len(list) > limit {
success:=PostToServer(t, list[0:limit])
if !success{
continue
}
count = count + limit
list = list[limit:]
} else if len(list) > 0 {
PostToServer(t, list)
count = count + len(list)
isFinish = true
} else {
isFinish = true
}
fmt.Println(CommonUtil.GetCurrentTime() + " 同步:成功完成组织机构初始化上报,本次完成" + CommonUtil.ConvertIntToString(count) + "条!")
}
//记录日志,内容为1表示组织机构初始化上报过了~
FileUtil.WriteContent(logName, "ok")
}
for {
//本轮上报的数量如果是0休息5秒后再继续上传
postCount := UploadData()
@ -117,29 +166,8 @@ func UploadData() int {
break
}
//上报到Http Api--->Body--->Post
var ps postStruct
ps.DataSource = sqlDict[i].DataSource
ps.AuthToken = "DSDataex_Token_eb4ab2fea87161dc08fa794a648584c4"
ps.SystemId = "BASE_GO"
var dsMap = make([]dataStruct, 0)
for k := range list {
var ds dataStruct
ds.Data, _ = CommonUtil.MapToJson(list[k])
ds.DataId = list[k][sqlDict[i].PrimaryKey].(string)
ds.DelFlag = list[k]["del_flag"].(int64)
ds.OrgId = list[k]["bureau_id"].(string)
dsMap = append(dsMap, ds)
}
ps.Datas = dsMap
//将Struct转为json
jsonBytes, _ := json.Marshal(ps)
msg := string(jsonBytes)
//提交到汇集中心
p := httpDo("POST", ConfigUtil.DataExchangeUrl, msg)
if !p.Success {
fmt.Println(CommonUtil.GetCurrentTime() + " 同步上报到数据汇集中心失败将休息5秒后重试错误原因"+p.Message)
time.Sleep(5 * 1e9)
success := PostToServer(sqlDict[i], list)
if !success {
continue
}
//记录上报数量
@ -162,16 +190,47 @@ func UploadData() int {
return postCount
}
/**
2020-07-17
*/
func PostToServer(t tableStruct, list []map[string]interface{}) bool {
//上报到Http Api--->Body--->Post
var ps postStruct
ps.DataSource = t.DataSource
ps.AuthToken = "DSDataex_Token_eb4ab2fea87161dc08fa794a648584c4"
ps.SystemId = "BASE_GO"
var dsMap = make([]dataStruct, 0)
for k := range list {
var ds dataStruct
ds.Data, _ = CommonUtil.MapToJson(list[k])
ds.DataId = list[k][t.PrimaryKey].(string)
ds.DelFlag = list[k]["del_flag"].(int64)
ds.OrgId = list[k]["bureau_id"].(string)
dsMap = append(dsMap, ds)
}
ps.Datas = dsMap
//将Struct转为json
jsonBytes, _ := json.Marshal(ps)
msg := string(jsonBytes)
//提交到汇集中心
p := httpDo("POST", ConfigUtil.DataExchangeUrl, msg)
fmt.Println(CommonUtil.GetCurrentTime() + " 同步上报到数据汇集中心失败将休息5秒后重试错误原因" + p.Message)
time.Sleep(5 * 1e9)
return p.Success
}
/**
*
*
* 2019-01-16
*/
func getRecord(tableName string, lastUpdatedTime string, idInt int64) (string, int64, []map[string]interface{}) {
//每次获取的条数
limit := 100
//SQL内容
sqlPublic := FileUtil.ReadFileContent("./Sql/" + tableName + ".sql")
//时间戳相等的SQL
eqSql := sqlPublic + " where t1.last_updated_time =? and t1.id_int>? order by t1.last_updated_time,t1.id_int limit ?"
//时间戳大于的SQL
@ -245,8 +304,8 @@ type ResultStruct struct {
// 基础方法这里多用于访问webapi配合上json转换。此方法可以运行但是不算完善。
func httpDo(method string, url string, msg string) ResultStruct {
var p ResultStruct
p.Success=false
p.Message="上报到汇集系统失败!"
p.Success = false
p.Message = "上报到汇集系统失败!"
client := &http.Client{}
body := bytes.NewBuffer([]byte(msg))
req, err := http.NewRequest(method,

@ -88,7 +88,7 @@ func PageBaseClass(in *BaseClassProto.QueryArg) ([]map[string]interface{}, int32
myBuilder.And(builder.Eq{"t1.stage_id": in.StageId})
myBuilder.And(builder.Eq{"t1.bureau_id": in.BureauId})
//排除某个班级,用在将学生进行调整班级时的需求
if in.RemoveClassId!=""{
if in.RemoveClassId != "" {
myBuilder.And(builder.Neq{"t1.class_id": in.RemoveClassId})
}
//获取拼接完成的SQL语句
@ -152,3 +152,38 @@ func GetRxnf(schoolId string, stageId string) ([]map[string]interface{}, int32,
}
return SqlKit.QueryForPk(sql)
}
/**
2020-07-17
*/
func ClearPersonBzr(teacherIds []string) error {
var myBuilder = builder.Dialect(builder.MYSQL).Select("class_id").
From("t_base_class").
Where(builder.In("teacher_id", teacherIds)).
And(builder.Eq{"b_use": 1})
sql, err := myBuilder.ToBoundSQL()
if err != nil {
return err
}
list, _, err := SqlKit.QueryForPk(sql)
if err != nil {
return err
}
var ClassIds []string
for i := range list {
id := list[i]["class_id"].(string)
ClassIds = append(ClassIds, id)
//删除班主任
tbc := new(models.TBaseClass)
_, err := db.Table(tbc).ID(id).Update(map[string]interface{}{"teacher_id": ""})
if err != nil {
return err
}
}
//清除Redis缓存
var selector = SqlKit.GetBean("t_base_class")
SqlKit.DeleteCacheByIds(ClassIds, selector)
return nil
}

@ -4,6 +4,7 @@ import (
"context"
"dsBaseRpc/Const"
"dsBaseRpc/Const/ErrorConst"
"dsBaseRpc/RpcService/BaseClass/BaseClassDao"
"dsBaseRpc/RpcService/BaseOrganization/BaseOrganizationDao"
"dsBaseRpc/RpcService/BaseOrganizationManager/BaseOrganizationManagerDao"
"dsBaseRpc/RpcService/BaseTeacher/BaseTeacherDao"
@ -189,6 +190,14 @@ func (s *Rpc) DeleteBaseTeacher(ctx context.Context, in *BaseTeacherProto.Delete
reply.Message = Const.DataBaseActionError
return &reply, err
}
//删除人员时,对应的班主任,也要删除一下~
err=BaseClassDao.ClearPersonBzr(in.Ids)
if err != nil {
LogUtil.Error(ErrorConst.SqlUpdateError, "执行ClearPersonBzr时发生严重错误"+err.Error())
reply.Success = false
reply.Message = Const.DataBaseActionError
return &reply, err
}
//记录日志
ms, err := BaseTeacherDao.GetByIds(in.Ids)
if err != nil {

Loading…
Cancel
Save