package initdata import ( "git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals/api" ) func TruncateTable(db *dao.DaoDB, tableName string) (err error) { _, err = dao.ExecuteSQL(db, "TRUNCATE TABLE "+tableName) return err } func insertPlace(ctx *jxcontext.Context, db *dao.DaoDB, parent *autonavi.District, placeList []*autonavi.District) (err error) { for _, v := range placeList { if v.Level <= autonavi.DistrictLevelDistrict { place := &model.Place{ Code: int(utils.Str2Int64(v.Adcode)), Name: v.Name, Level: int8(v.Level), TelCode: v.Citycode, Enabled: 1, } if parent != nil { place.ParentCode = int(utils.Str2Int64(parent.Adcode)) } dao.WrapAddIDCULEntity(place, ctx.GetUserName()) if err = dao.CreateEntity(db, place); err != nil { return err } if err = insertPlace(ctx, db, v, v.Districts); err != nil { return err } } } return nil } func InitPlace(ctx *jxcontext.Context) (err error) { db := dao.GetDB() if err = TruncateTable(db, "place"); err == nil { placeList, err2 := api.AutonaviAPI.GetDistricts(autonavi.DistrictLevelDistrict, "") if err = err2; err != nil { return err } placeList = placeList[0].Districts dao.Begin(db) defer func() { dao.Rollback(db) }() if err = insertPlace(ctx, db, nil, placeList); err != nil { return err } updateSqls := []string{ ` UPDATE place t1 JOIN jde_city t2 ON t1.code = t2.col_tencentAddressCode SET t1.jd_code = t2.col_areaCode; `, ` UPDATE place t1 JOIN place t2 ON t1.parent_code = t2.code AND t2.jd_code != 0 JOIN jde_district t3 ON t1.name = t3.col_areaName AND t2.jd_code = t3.col_cityCode SET t1.jd_code = t3.col_areaCode WHERE t1.level = 3; `, ` UPDATE place t1 JOIN ebde_places t2 ON t1.name = t2.col_city_name SET t1.ebai_code = t2.col_city_id WHERE t1.level = 1 OR t1.level = 2; `, ` UPDATE place t1 JOIN place t1p ON t1.parent_code = t1p.code JOIN ebde_places t2 ON t1.name = t2.col_city_name JOIN ebde_places t2p ON t2.col_parent_id = t2p.col_city_id AND t1p.ebai_code = t2p.col_city_id SET t1.ebai_code = t2.col_city_id WHERE t1.level = 3; `, ` UPDATE place t1 JOIN mtpsdeliveryprice t2 ON t1.code = t2.citycode SET t1.mtps_price = t2.price; `, ` UPDATE place t1 JOIN mtpsdeliveryprice t2 ON t1.name LIKE CONCAT(t2.cityname, '%') SET t1.mtps_price = t2.price WHERE t1.level = 2 AND t1.mtps_price = 0; `, ` UPDATE place t1 LEFT JOIN ( SELECT DISTINCT city_code FROM store UNION DISTINCT SELECT DISTINCT place_code city_code FROM sku_name_place_bind ) t2 ON t1.code = t2.city_code SET t1.enabled = 0 WHERE t1.level = 2 AND t2.city_code IS NULL; `, } for _, v := range updateSqls { if _, err = dao.ExecuteSQL(db, v); err != nil { return err } } dao.Commit(db) } return err }