本教程提供了二种解决方案,都提供同步文件下载,数据更新自20210525号数据

方案一

来源

国家统计局官网

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/

数据下载

CSDN

关注微信公众号:程序工厂

回复:国家统计局省市区 获取下载链接

方式

从国家统计局网站爬取数据

缺点

数据更新慢,一年更新一次

参考代码

package org.jeecg.modules.ls;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;/*** 从国家统计局网站爬取省级到村级别的行政区划代码*/
public class Area {public static final String baseUrl = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/";//设置utf-8发现有部分字符有乱码public static final String CHARSET = "GBK";public static StringBuffer result = new StringBuffer();/*** 读省的信息* @param args* @throws Exception*/public static void main(String[] args) throws Exception {String url = baseUrl + "index.html";//如果需要设置代理//initProxy("10.10.13.200", "80");String str = getContent(url).toUpperCase();String[] arrs = str.split("<A");for (String s : arrs) {if (s.indexOf("HREF") != -1 && s.indexOf(".HTML") != -1) {String a = s.substring(7, s.indexOf("'>"));String name = s.substring(s.indexOf("'>")+2, s.indexOf("<BR/>"));System.out.println(name);if(!"浙江省".equals(name)){continue;}System.out.println("爬取:"+name);boolean success = false;while(!success) {try {readShi(a,name);success = true;} catch (IOException e) {e.printStackTrace();success = false;Thread.sleep(60000);}}}}}/*** 读市的数据* @param -list* @throws Exception*/public static void readShi(String url,String paretid) throws Exception{String content = getContent(baseUrl+url).toUpperCase();String[] citys = content.split("CITYTR");//'><TD><A HREF='11/1101.HTML'>110100000000</A></TD><TD><A HREF='11/1101.HTML'>市辖区</A></TD></td><TR CLASS='for(int c=1,len=citys.length; c<len; c++){String[] strs = citys[c].split("<A HREF='");String cityUrl = null;String areaid = "";String areaname = "";for(int si = 1; si < 3; si++){if(si==1){//取链接和编码cityUrl = strs[si].substring(0, strs[si].indexOf("'>"));areaid = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));}else{areaname = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));System.out.println("爬取:"+strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")));}}saveCity(areaid, areaname, paretid, 2);boolean success = false;while(!success) {try {readXian(cityUrl.substring(0, cityUrl.indexOf("/")+1),cityUrl,areaid);success = true;} catch (IOException e) {e.printStackTrace();success = false;Thread.sleep(60000);}}}}/*** 读县的数据* @param url* @throws Exception*/public static void readXian(String prix,String url,String paretid) throws Exception{String content = getContent(baseUrl+url).toUpperCase();String[] citys = content.split("COUNTYTR");for(int i=1; i<citys.length; i++){String cityUrl = null;String areaid = "";String areaname = "";//发现石家庄有一个县居然没超链接,特殊处理if(citys[i].indexOf("<A HREF='")==-1){areaid = citys[i].substring(6, 18);areaname = citys[i].substring(citys[i].indexOf("</TD><TD>")+9,citys[i].lastIndexOf("</TD>"));}else{String[] strs = citys[i].split("<A HREF='");for(int si = 1; si<3; si++){if(si==1){//取链接和编码cityUrl = strs[si].substring(0, strs[si].indexOf("'>"));areaid = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));}else{areaname = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));}}}saveCity(areaid, areaname, paretid, 3);boolean success = false;while(!success) {try {if(null!=cityUrl){readZhen(prix,cityUrl,areaid);}success = true;} catch (IOException e) {e.printStackTrace();success = false;Thread.sleep(60000);}}}}/*** 读镇的数据* @param url* @throws Exception*/public static void readZhen(String prix,String url,String paretid) throws Exception{String content = getContent(baseUrl+prix+url).toUpperCase();String myPrix = (prix+url).substring(0, (prix+url).lastIndexOf("/")+1);String[] citys = content.split("TOWNTR");for(int i=1; i<citys.length; i++){String[] strs = citys[i].split("<A HREF='");String cityUrl = null;String areaid = "";String areaname = "";for(int si = 1; si<3; si++){if(si==1){//取链接和编码cityUrl = strs[si].substring(0, strs[si].indexOf("'>"));areaid = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));}else{areaname = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>"));}}saveCity(areaid, areaname, paretid, 4);}}/*** 读村/街道的数据* @param url* @throws Exception*/public static void readCun(String prix,String url,BufferedWriter bw) throws Exception{String content = getContent(baseUrl+prix+url).toUpperCase();String[] citys = content.split("VILLAGETR");for(int i=1; i<citys.length; i++){String[] strs = citys[i].split("<TD>");bw.write("<tr><td>");bw.write(strs[1].substring(0, strs[1].indexOf("</TD>")));bw.write("</td>");bw.write("<td></td><td></td><td></td><td></td>");bw.write("<td>");bw.write(strs[2].substring(0, strs[2].indexOf("</TD>")));bw.write("</td><td>");bw.write(strs[3].substring(0, strs[3].indexOf("</TD>")));bw.write("</td></tr>");}}//设置代理public static void initProxy(String host, String port) {System.setProperty("http.proxyType", "4");System.setProperty("http.proxyPort", port);System.setProperty("http.proxyHost", host);System.setProperty("http.proxySet", "true");}//获取网页的内容public static String getContent(String strUrl) throws Exception {try {URL url = new URL(strUrl);BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(CHARSET)));String s = "";StringBuffer sb = new StringBuffer("");while ((s = br.readLine()) != null) {sb.append(s);}br.close();return sb.toString();} catch (Exception e) {System.out.println("can't open url:"+strUrl);throw e;}}public static void saveCity(String areaid, String areaname, String paretid, int level) {try {String URL="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";String USER="root";String PASSWORD="123456";//1.加载驱动程序Class.forName("com.mysql.jdbc.Driver");//2.获得数据库链接Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);//3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)String s = "insert into area(areacode,areaname,p_areacode, level) values(?,?,?,?)";PreparedStatement pst = conn.prepareStatement(s);pst.setString(1, areaid.substring(0,9));pst.setString(2, areaname);pst.setString(3, paretid);pst.setInt(4, level);pst.execute();//关闭资源pst.close();conn.close();} catch (Exception e) {e.printStackTrace();}}
}

方案二

来源

高德地图

https://lbs.amap.com/api/webservice/guide/api/district

数据下载

CSDN

关注微信公众号:程序工厂

回复:高德地图省市区 获取下载链接

方式

通过高德地图接口获取数据

参考代码

代码省市区街道数据更新一次大约二分钟左右

我代码写在动态定时任务里,然后创建一个每月执行一次的定时任务,每一个月和高德地图同步一次数据,维持数据准确率

动态定时任务可以看我另外一篇博客

https://blog.csdn.net/tangcv/article/details/109206837


import cn.hutool.core.convert.Convert;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.job.ThreadPoolUtil;
import org.jeecg.modules.job.entity.District;
import org.jeecg.modules.job.entity.DistrictGD;
import org.jeecg.modules.ls.Util.BadRequestException;
import org.jeecg.modules.masterData.entity.ZsjDictionaryDetail;
import org.jeecg.modules.masterData.service.IZsjDictionaryDetailService;
import org.jeecg.modules.masterData.service.IZsjPublicDictionaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.List;/*** 高德地图 省市区街道数据数据更新* @author 唐正锋* @Date 2021/05/25 14:38*/
@Slf4j
@Component
public class RegionTask {@Autowiredprivate IZsjDictionaryDetailService zsjDictionaryDetailService;@Autowiredprivate IZsjPublicDictionaryService zsjPublicDictionaryService;//采集地址接口 key地址需要在高德地图申请,申请地址 https://console.amap.com/dev/key/apppublic static final String url = "https://restapi.amap.com/v3/config/district?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&subdistrict=4";public static final String SZZQZXSTQ = "H10331";//省自治区直辖市特区public static final String DQZ = "H12890";//地区州public static final String XSQ = "H11279";//县市区public static final String XZJDBSC = "H12892";//乡镇街道办事处public void run() {try {long start = System.currentTimeMillis();String result= HttpUtil.get(url);long end = System.currentTimeMillis();log.info("-------请求文件用时---{}ms-------",(start - end));DistrictGD districtGD = new DistrictGD();districtGD = Convert.toList(DistrictGD.class,JSONObject.parseObject(result)).get(0);if(!"OK".equals(districtGD.getInfo())){throw new BadRequestException("查询出错");}//第一层国家 第二层 省List<District> districts = districtGD.getDistricts().get(0).getDistricts();Integer maxNumber = zsjDictionaryDetailService.getMaxNumber(SZZQZXSTQ);maxNumber = maxNumber == null || "".equals(maxNumber) ? 1 : maxNumber + 1;String publicDictionaryId = zsjPublicDictionaryService.getIdOnCategoryCoding(SZZQZXSTQ);ZsjDictionaryDetail zsjDictionaryDetail = new ZsjDictionaryDetail();for (District district: districts ) {List<ZsjDictionaryDetail> zsjDictionaryDetails = zsjDictionaryDetailService.getDictionaryDetailList(district.getAdcode(),SZZQZXSTQ);zsjDictionaryDetail = new ZsjDictionaryDetail();if(zsjDictionaryDetails.size() == 0 ){//新增zsjDictionaryDetail = new ZsjDictionaryDetail(publicDictionaryId,district.getAdcode(),district.getName(),district.getCenter(),maxNumber,district.getLevel());zsjDictionaryDetailService.saveTo(zsjDictionaryDetail);maxNumber += 1;}else if(zsjDictionaryDetails.size() != 0 ){//编辑zsjDictionaryDetail = zsjDictionaryDetails.get(0);ZsjDictionaryDetail update = new ZsjDictionaryDetail(publicDictionaryId,district.getAdcode(),district.getName(),district.getCenter(),district.getLevel());zsjDictionaryDetail.copy(update);zsjDictionaryDetailService.updateById(zsjDictionaryDetail);}//市addressCity(district.getDistricts(),DQZ,zsjDictionaryDetail.getId(),zsjDictionaryDetail.getNationalStandardValues());}}catch (Exception e){log.info("----------同步失败-----{}------",e.getMessage());}}//市private void addressCity(List<District> districts,String dictCode,String pidA,String codeA) {Integer maxNumber = zsjDictionaryDetailService.getMaxNumber(dictCode);maxNumber = maxNumber == null || "".equals(maxNumber) ? 1 : maxNumber + 1;String publicDictionaryId = zsjPublicDictionaryService.getIdOnCategoryCoding(dictCode);for (District district: districts ) {List<ZsjDictionaryDetail> zsjDictionaryDetails = zsjDictionaryDetailService.getDictionaryDetailList(district.getAdcode(),dictCode);ZsjDictionaryDetail zsjDictionaryDetail = new ZsjDictionaryDetail();if(zsjDictionaryDetails.size() == 0 ){//新增zsjDictionaryDetail = new ZsjDictionaryDetail(publicDictionaryId,pidA,district.getAdcode(),district.getName(),district.getCenter(),maxNumber,district.getLevel(),pidA,null,null,null,codeA,null,null,null);zsjDictionaryDetailService.saveTo(zsjDictionaryDetail);maxNumber += 1;}else if(zsjDictionaryDetails.size() != 0 ){//编辑zsjDictionaryDetail = zsjDictionaryDetails.get(0);ZsjDictionaryDetail update = new ZsjDictionaryDetail(publicDictionaryId,pidA,district.getAdcode(),district.getName(),district.getCenter(),district.getLevel(),pidA,null,null,null,codeA,null,null,null);zsjDictionaryDetail.copy(update);zsjDictionaryDetailService.updateById(zsjDictionaryDetail);}final String id = zsjDictionaryDetail.getId();final String code = zsjDictionaryDetail.getNationalStandardValues();//hutool 多线程执行,ThreadUtil.concurrencyTest(200, () -> {addressArea(district.getDistricts(),XSQ,pidA,codeA,id,code);});//也可以替换成单线程执行// addressArea(district.getDistricts(),XSQ,pidA,codeA,id,code);}}//区public void addressArea(List<District> districts,String dictCode,String pidA,String codeA,String pidB,String codeB) {Integer maxNumber = zsjDictionaryDetailService.getMaxNumber(dictCode);maxNumber = maxNumber == null || "".equals(maxNumber) ? 1 : maxNumber + 1;String publicDictionaryId = zsjPublicDictionaryService.getIdOnCategoryCoding(dictCode);for (District district: districts ) {List<ZsjDictionaryDetail> zsjDictionaryDetails = zsjDictionaryDetailService.getDictionaryDetailList(district.getAdcode(),dictCode);ZsjDictionaryDetail zsjDictionaryDetail = new ZsjDictionaryDetail();if(zsjDictionaryDetails.size() == 0 ){//新增zsjDictionaryDetail = new ZsjDictionaryDetail(publicDictionaryId,pidB,district.getAdcode(),district.getName(),district.getCenter(),maxNumber,district.getLevel(),pidA,pidB,null,null,codeA,codeB,null,null);zsjDictionaryDetailService.saveTo(zsjDictionaryDetail);maxNumber += 1;}else if(zsjDictionaryDetails.size() != 0 ){//编辑zsjDictionaryDetail = zsjDictionaryDetails.get(0);ZsjDictionaryDetail update = new ZsjDictionaryDetail(publicDictionaryId,pidB,district.getAdcode(),district.getName(),district.getCenter(),district.getLevel(),pidA,pidB,null,null,codeA,codeB,null,null);zsjDictionaryDetail.copy(update);zsjDictionaryDetailService.updateById(zsjDictionaryDetail);}final String id = zsjDictionaryDetail.getId();final String code = zsjDictionaryDetail.getNationalStandardValues();addressStreet(district.getDistricts(),XZJDBSC,pidA,codeA,pidB,codeB,id,code);}}//街道public void addressStreet(List<District> districts,String dictCode,String pidA,String codeA,String pidB,String codeB,String pidC,String codeC) {Integer maxNumber = zsjDictionaryDetailService.getMaxNumberPid(pidC);maxNumber = maxNumber == null || "".equals(maxNumber) ? 1 : maxNumber + 1;String publicDictionaryId = zsjPublicDictionaryService.getIdOnCategoryCoding(dictCode);for (District district: districts ) {//名称和pid查询是否存在List<ZsjDictionaryDetail> zsjDictionaryDetails = zsjDictionaryDetailService.getDictionaryPidList(district.getName(),pidC);ZsjDictionaryDetail zsjDictionaryDetail = new ZsjDictionaryDetail();String code = maxNumber + "";code = code.length() == 1 ? codeC + "000" + code :code.length() == 2 ? codeC + "00" + code :code.length() == 3 ? codeC + "0" + code : codeC + code;if(zsjDictionaryDetails.size() == 0 ){//新增zsjDictionaryDetail = new ZsjDictionaryDetail(publicDictionaryId,pidC,code,district.getName(),district.getCenter(),maxNumber,district.getLevel(),pidA,pidB,pidC,null,codeA,codeB,codeC,null);zsjDictionaryDetailService.saveTo(zsjDictionaryDetail);maxNumber += 1;}else if(zsjDictionaryDetails.size() != 0 ){//编辑zsjDictionaryDetail = zsjDictionaryDetails.get(0);ZsjDictionaryDetail update = new ZsjDictionaryDetail(publicDictionaryId,pidC,code,district.getName(),district.getCenter(),district.getLevel(),pidA,pidB,pidC,null,codeA,codeB,codeC,null);zsjDictionaryDetail.copy(update);zsjDictionaryDetailService.updateById(zsjDictionaryDetail);}}}public static void main(String[] args) {long start = System.currentTimeMillis();//key地址需要在高德地图申请,申请地址 https://console.amap.com/dev/key/appString result = HttpUtil.get("https://restapi.amap.com/v3/config/district?key=XXXXXXXXXXXXXXXXX&subdistrict=4");long end = System.currentTimeMillis();log.info("-------返回内容---{}-------",result);log.info("-------请求文件用时---{}ms-------",(start - end));DistrictGD districtGD = new DistrictGD();districtGD = Convert.toList(DistrictGD.class,JSONObject.parseObject(result)).get(0);log.info("-------状态---{}-------",districtGD.getInfo());}
}

高德地图返回参数格式,我转化成自己写的类方便我读取处理

DistrictGD
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.util.ArrayList;
import java.util.List;@Data
public class DistrictGD {@ApiModelProperty(value = "状态值 值为0或1,0表示失败;1表示成功")private String status;@ApiModelProperty(value = "状态说明 status为0时,info返回错误原因,否则返回“OK” ")private String info;@ApiModelProperty(value = "状态码  返回状态说明,10000代表正确,详情参阅info状态表 ")private String infocode;@ApiModelProperty(value = "count")private String count;@ApiModelProperty(value = "建议结果列表")private Object suggestion;@ApiModelProperty(value = "行政区列表")private List<District> districts = new ArrayList<>();}
District
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.util.ArrayList;/*** 行政区列表*/
@Data
public class District {@ApiModelProperty(value = "城市编码")private String citycode;@ApiModelProperty(value = "区域编码 街道没有独有的adcode,均继承父类(区县)的adcode ")private String adcode;@ApiModelProperty(value = "行政区名称")private String name;@ApiModelProperty(value = "行政区边界坐标点 \n" +"当一个行政区范围,由完全分隔两块或者多块的地块组成,每块地的 polyline 坐标串以 | 分隔 。如北京 的 朝阳区")private String polyline;@ApiModelProperty(value = "区域中心点")private String center;@ApiModelProperty(value = "行政区划级别 \n" +"country:国家 \n" +"province:省份(直辖市会在province和city显示)\n" +"city:市(直辖市会在province和city显示)\n" +"district:区县\n" +"street:街道")private String level;@ApiModelProperty(value = "下级行政区列表,包含district元素")private ArrayList<District> districts = new ArrayList<>();}

校验查询,不用的可以省略

实体类 ZsjDictionaryDetail、ZsjPublicDictionary

package org.jeecg.modules.masterData.entity;import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** @Description: 公共字典明细* @Author: 唐正锋* @Date:   2021-05-07* @Version: V1.0*/
@Data
@TableName("zsj_dictionary_detail")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="zsj_dictionary_detail对象", description="公共字典明细")
public class ZsjDictionaryDetail implements Serializable {private static final long serialVersionUID = 1L;/**主键*/@TableId(type = IdType.ASSIGN_ID)@ApiModelProperty(value = "主键")private String id;/**创建人*/@ApiModelProperty(value = "创建人")private String createBy;/**创建日期*/@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")@ApiModelProperty(value = "创建日期")private Date createTime;/**更新人*/@ApiModelProperty(value = "更新人")private String updateBy;/**更新日期*/@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")@ApiModelProperty(value = "更新日期")private Date updateTime;/**公共字典维护表id*/@Excel(name = "公共字典维护表id", width = 15)@ApiModelProperty(value = "公共字典维护表id")private String publicDictionaryId;/**上级id*/@ApiModelProperty(value = "上级id【新增编辑 前段不用传递】")private String pid;/**国标值*/@Excel(name = "国标值", width = 15)@ApiModelProperty(value = "国标值")private String nationalStandardValues;/**国标值含义*/@Excel(name = "国标值含义", width = 15)@ApiModelProperty(value = "国标值含义")private String nationalStandardMeaning;/**拼音码*/@Excel(name = "拼音码", width = 15)@ApiModelProperty(value = "拼音码")private String pinyinCode;/**五笔码*/@Excel(name = "五笔码", width = 15)@ApiModelProperty(value = "五笔码")private String wubiCode;/**数据元标识符*/@Excel(name = "数据元标识符", width = 15)@ApiModelProperty(value = "数据元标识符")private String dataElementIdentifier;/**排列序号*/@Excel(name = "排列序号", width = 15)@ApiModelProperty(value = "排列序号")private Integer arrangeSerialNumber;/**备注*/@Excel(name = "备注", width = 15)@ApiModelProperty(value = "备注")private String remark;/**状态*/@Excel(name = "状态", width = 15)@ApiModelProperty(value = "状态")private Integer status;/**动态Id*/@Excel(name = "动态Id1", width = 15)@ApiModelProperty(value = "动态Id1")private String dynamicIdA;/**动态参数*/@Excel(name = "动态参数1", width = 15)@ApiModelProperty(value = "动态参数1")private String dynamicValueA;@Excel(name = "动态Id2", width = 15)@ApiModelProperty(value = "动态Id2")private String dynamicIdB;@Excel(name = "动态参数2", width = 15)@ApiModelProperty(value = "动态参数2")private String dynamicValueB;@Excel(name = "动态Id3", width = 15)@ApiModelProperty(value = "动态Id3")private String dynamicIdC;@Excel(name = "动态参数3", width = 15)@ApiModelProperty(value = "动态参数3")private String dynamicValueC;@Excel(name = "动态Id4", width = 15)@ApiModelProperty(value = "动态Id4")private String dynamicIdD;@Excel(name = "动态参数4", width = 15)@ApiModelProperty(value = "动态参数4")private String dynamicValueD;@Excel(name = "动态Id5", width = 15)@ApiModelProperty(value = "动态Id5")private String dynamicIdE;@Excel(name = "动态参数5", width = 15)@ApiModelProperty(value = "动态参数5")private String dynamicValueE;@Excel(name = "动态Id6", width = 15)@ApiModelProperty(value = "动态Id6")private String dynamicIdF;@Excel(name = "动态参数6", width = 15)@ApiModelProperty(value = "动态Id6")private String dynamicValueF;public void copy(ZsjDictionaryDetailFind source){BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));}public void copy(DictDetailImport source){BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));}public void copy(ZsjDictionaryDetail source){BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));}/*** 新增* @param nationalStandardValues 国标值* @param nationalStandardMeaning 国标值含义* @param dataElementIdentifier 数据元标识符 存坐标* @param arrangeSerialNumber 排列序号* @param remark 备注*/public ZsjDictionaryDetail(String publicDictionaryId,String nationalStandardValues,String nationalStandardMeaning,String dataElementIdentifier,Integer arrangeSerialNumber,String remark){this.publicDictionaryId = publicDictionaryId;this.nationalStandardValues = nationalStandardValues;this.nationalStandardMeaning = nationalStandardMeaning;this.dataElementIdentifier = dataElementIdentifier;this.arrangeSerialNumber = arrangeSerialNumber;this.remark = remark;}/*** 编辑* @param nationalStandardValues 国标值* @param nationalStandardMeaning 国标值含义* @param dataElementIdentifier 数据元标识符 存坐标* @param remark 备注*/public ZsjDictionaryDetail(String publicDictionaryId,String nationalStandardValues,String nationalStandardMeaning,String dataElementIdentifier,String remark){this.publicDictionaryId = publicDictionaryId;this.nationalStandardValues = nationalStandardValues;this.nationalStandardMeaning = nationalStandardMeaning;this.dataElementIdentifier = dataElementIdentifier;this.remark = remark;}/*** 新增* @param pid 上级id* @param nationalStandardValues 国标值* @param nationalStandardMeaning 国标值含义* @param dataElementIdentifier 数据元标识符 存坐标* @param arrangeSerialNumber 排列序号* @param remark 备注*/public ZsjDictionaryDetail(String publicDictionaryId,String pid,String nationalStandardValues,String nationalStandardMeaning,String dataElementIdentifier,Integer arrangeSerialNumber,String remark,String dynamicIdA,String dynamicIdB,String dynamicIdC,String dynamicIdD,String dynamicValueA,String dynamicValueB,String dynamicValueC,String dynamicValueD){this.publicDictionaryId = publicDictionaryId;this.pid = pid;this.nationalStandardValues = nationalStandardValues;this.nationalStandardMeaning = nationalStandardMeaning;this.dataElementIdentifier = dataElementIdentifier;this.arrangeSerialNumber = arrangeSerialNumber;this.remark = remark;this.dynamicIdA = dynamicIdA;this.dynamicIdB = dynamicIdB;this.dynamicIdC = dynamicIdC;this.dynamicIdD = dynamicIdD;this.dynamicValueA = dynamicValueA;this.dynamicValueB = dynamicValueB;this.dynamicValueC = dynamicValueC;this.dynamicValueD = dynamicValueD;}/*** 编辑* @param pid 上级id* @param nationalStandardValues 国标值* @param nationalStandardMeaning 国标值含义* @param dataElementIdentifier 数据元标识符 存坐标* @param remark 备注*/public ZsjDictionaryDetail(String publicDictionaryId,String pid,String nationalStandardValues,String nationalStandardMeaning,String dataElementIdentifier,String remark,String dynamicIdA,String dynamicIdB,String dynamicIdC,String dynamicIdD,String dynamicValueA,String dynamicValueB,String dynamicValueC,String dynamicValueD){this.publicDictionaryId = publicDictionaryId;this.pid = pid;this.nationalStandardValues = nationalStandardValues;this.nationalStandardMeaning = nationalStandardMeaning;this.dataElementIdentifier = dataElementIdentifier;this.remark = remark;this.dynamicIdA = dynamicIdA;this.dynamicIdB = dynamicIdB;this.dynamicIdC = dynamicIdC;this.dynamicIdD = dynamicIdD;this.dynamicValueA = dynamicValueA;this.dynamicValueB = dynamicValueB;this.dynamicValueC = dynamicValueC;this.dynamicValueD = dynamicValueD;}public ZsjDictionaryDetail(){}
}
package org.jeecg.modules.masterData.entity;import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.modules.ls.entity.LsWechatCustomer;
import org.jeecg.modules.masterData.entityTool.ZsjPublicDictionaryAdd;
import org.jeecg.modules.masterData.entityTool.ZsjPublicDictionaryUpdate;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** @Description: 公共字典维护* @Author: 唐正锋* @Date:   2021-05-07* @Version: V1.0*/
@Data
@TableName("zsj_public_dictionary")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="zsj_public_dictionary对象", description="公共字典维护")
public class ZsjPublicDictionary implements Serializable {private static final long serialVersionUID = 1L;/**主键*/@TableId(type = IdType.ASSIGN_ID)@ApiModelProperty(value = "主键")private String id;/**创建人*/@ApiModelProperty(value = "创建人")private String createBy;/**创建日期*/@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")@ApiModelProperty(value = "创建日期")private Date createTime;/**更新人*/@ApiModelProperty(value = "更新人")private String updateBy;/**更新日期*/@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")@ApiModelProperty(value = "更新日期")private Date updateTime;/**类别编码*/@Excel(name = "类别编码", width = 15)@ApiModelProperty(value = "类别编码")private String categoryCoding;/**类别含义*/@Excel(name = "类别含义", width = 15)@ApiModelProperty(value = "类别含义")private String categoryMeaning;/**拼音码*/@Excel(name = "拼音码", width = 15)@ApiModelProperty(value = "拼音码")private String pinyinCode;/**五笔码*/@Excel(name = "五笔码", width = 15)@ApiModelProperty(value = "五笔码")private String wubiCode;/**数据元标识符*/@Excel(name = "数据元标识符", width = 15)@ApiModelProperty(value = "数据元标识符")private String dataElementIdentifier;/**排列序号*/@Excel(name = "排列序号", width = 15)@ApiModelProperty(value = "排列序号")private Integer arrangeSerialNumber;/**备注*/@Excel(name = "备注", width = 15)@ApiModelProperty(value = "备注")private String remark;/**状态*/@Excel(name = "状态", width = 15)@ApiModelProperty(value = "状态")private Integer status;public void copy(ZsjPublicDictionaryAdd source){BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));}public void copy(ZsjPublicDictionaryUpdate source){BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));}
}

IZsjPublicDictionaryService

package org.jeecg.modules.masterData.service;import org.jeecg.modules.masterData.entity.ZsjPublicDictionary;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.masterData.entityTool.ZsjPublicDictionaryAdd;
import org.jeecg.modules.masterData.entityTool.ZsjPublicDictionaryUpdate;import java.util.List;public interface IZsjPublicDictionaryService extends IService<ZsjPublicDictionary> {/*** 根据Code查询ID* @return*/String getIdOnCategoryCoding(String code);}

....省略Impl

ZsjPublicDictionaryMapper

 /*** 根据CODE查询Id* @param code* @return*/@Select(" SELECT id  FROM zsj_public_dictionary WHERE status = 1 and category_coding = #{code}  ")String getIdOnCategoryCoding(String code);
IZsjDictionaryDetailService 有些多余的方法自己删除
import org.jeecg.modules.ls.Util.UtilsExcel.ErrorExcel;
import org.jeecg.modules.masterData.entity.ZsjDictionaryDetail;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.masterData.entity.ZsjPublicDictionary;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;/*** @Description: 公共字典明细* @Author: 唐正锋* @Date:   2021-05-07* @Version: V1.0*/
public interface IZsjDictionaryDetailService extends IService<ZsjDictionaryDetail> {void saveTo(ZsjDictionaryDetail zsjDictionaryDetail);void updateTo(ZsjDictionaryDetail zsjDictionaryDetail);/*** 查询最大排序值* @param categoryCoding* @return*/Integer getMaxNumber(String categoryCoding);Integer getMaxNumberPid(String pid);/*** 查询是否存在* @param nationalStandardValues 字典明细编码* @param categoryCoding 字典编码* @return*/List<ZsjDictionaryDetail> getDictionaryDetailList(String nationalStandardValues,String categoryCoding);/*** 查询是否存在* @param meaning 字典明细含义* @param pid 上级编码* @return*/List<ZsjDictionaryDetail> getDictionaryPidList(String meaning,String pid);/*** 查询是否存在* @param nationalStandardValues 字典明细编码* @param publicDictionaryId 公共字典维护表id* @return*/List<ZsjDictionaryDetail> getDictionaryDetailIdList(String nationalStandardValues,String publicDictionaryId);}
ZsjDictionaryDetailServiceImpl
import cn.hutool.core.convert.Convert;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.ls.Util.BadRequestException;
import org.jeecg.modules.ls.Util.SecurityUtils;
import org.jeecg.modules.ls.Util.StringUtils;
import org.jeecg.modules.ls.Util.UtilsExcel.ErrorExcel;
import org.jeecg.modules.ls.Util.UtilsExcel.ImplExcel;
import org.jeecg.modules.ls.Util.UtilsExcel.ImportEnum;
import org.jeecg.modules.ls.Util.UtilsExcel.ImportExcelUtil;
import org.jeecg.modules.masterData.entity.DictDetailImport;
import org.jeecg.modules.masterData.entity.ZsjDictionaryDetail;
import org.jeecg.modules.masterData.entity.ZsjEmployee;
import org.jeecg.modules.masterData.entity.ZsjPublicDictionary;
import org.jeecg.modules.masterData.mapper.ZsjDictionaryDetailMapper;
import org.jeecg.modules.masterData.service.IZsjDictionaryDetailService;
import org.jeecg.modules.masterData.service.IZsjPublicDictionaryService;
import org.jeecg.modules.util.CnToWBUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;/*** @Description: 公共字典明细* @Author: 唐正锋* @Date:   2021-05-07* @Version: V1.0*/
@Slf4j
@Service
public class ZsjDictionaryDetailServiceImpl extends ServiceImpl<ZsjDictionaryDetailMapper, ZsjDictionaryDetail> implements IZsjDictionaryDetailService {@Autowiredprivate ZsjDictionaryDetailMapper zsjDictionaryDetailMapper;@Autowiredprivate IZsjPublicDictionaryService zsjPublicDictionaryService;@Overridepublic void saveTo(ZsjDictionaryDetail zsjDictionaryDetail) {if(zsjDictionaryDetail.getWubiCode() == null || "".equals(zsjDictionaryDetail.getWubiCode())) {zsjDictionaryDetail.setWubiCode(CnToWBUtil.getWBCode(zsjDictionaryDetail.getNationalStandardMeaning()));}if(zsjDictionaryDetail.getPinyinCode() == null || "".equals(zsjDictionaryDetail.getPinyinCode())) {zsjDictionaryDetail.setPinyinCode(CnToWBUtil.getPinyinCode(zsjDictionaryDetail.getNationalStandardMeaning()));}String pid = "";if(zsjDictionaryDetail.getDynamicIdA() != null && !"".equals(zsjDictionaryDetail.getDynamicIdA())){pid = zsjDictionaryDetail.getDynamicIdA();zsjDictionaryDetail.setDynamicValueA(getById(zsjDictionaryDetail.getDynamicIdA()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdB() != null && !"".equals(zsjDictionaryDetail.getDynamicIdB())){pid = zsjDictionaryDetail.getDynamicIdB();zsjDictionaryDetail.setDynamicValueB(getById(zsjDictionaryDetail.getDynamicIdB()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdC() != null && !"".equals(zsjDictionaryDetail.getDynamicIdC())){pid = zsjDictionaryDetail.getDynamicIdC();zsjDictionaryDetail.setDynamicValueC(getById(zsjDictionaryDetail.getDynamicIdC()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdD() != null && !"".equals(zsjDictionaryDetail.getDynamicIdD())){pid = zsjDictionaryDetail.getDynamicIdD();zsjDictionaryDetail.setDynamicValueD(getById(zsjDictionaryDetail.getDynamicIdD()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdE() != null && !"".equals(zsjDictionaryDetail.getDynamicIdE())){pid = zsjDictionaryDetail.getDynamicIdE();zsjDictionaryDetail.setDynamicValueE(getById(zsjDictionaryDetail.getDynamicIdE()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdF() != null && !"".equals(zsjDictionaryDetail.getDynamicIdF())){pid = zsjDictionaryDetail.getDynamicIdF();zsjDictionaryDetail.setDynamicValueF(getById(zsjDictionaryDetail.getDynamicIdF()).getNationalStandardValues());}zsjDictionaryDetail.setPid(pid);zsjDictionaryDetail.setStatus(1);save(zsjDictionaryDetail);}@Overridepublic void updateTo(ZsjDictionaryDetail zsjDictionaryDetail) {if(zsjDictionaryDetail.getWubiCode() == null || "".equals(zsjDictionaryDetail.getWubiCode())) {zsjDictionaryDetail.setWubiCode(CnToWBUtil.getWBCode(zsjDictionaryDetail.getNationalStandardMeaning()));}if(zsjDictionaryDetail.getPinyinCode() == null || "".equals(zsjDictionaryDetail.getPinyinCode())) {zsjDictionaryDetail.setPinyinCode(CnToWBUtil.getPinyinCode(zsjDictionaryDetail.getNationalStandardMeaning()));}String pid = "";if(zsjDictionaryDetail.getDynamicIdA() != null && !"".equals(zsjDictionaryDetail.getDynamicIdA())){pid = zsjDictionaryDetail.getDynamicIdA();zsjDictionaryDetail.setDynamicValueA(getById(zsjDictionaryDetail.getDynamicIdA()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdB() != null && !"".equals(zsjDictionaryDetail.getDynamicIdB())){pid = zsjDictionaryDetail.getDynamicIdB();zsjDictionaryDetail.setDynamicValueB(getById(zsjDictionaryDetail.getDynamicIdB()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdC() != null && !"".equals(zsjDictionaryDetail.getDynamicIdC())){pid = zsjDictionaryDetail.getDynamicIdC();zsjDictionaryDetail.setDynamicValueC(getById(zsjDictionaryDetail.getDynamicIdC()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdD() != null && !"".equals(zsjDictionaryDetail.getDynamicIdD())){pid = zsjDictionaryDetail.getDynamicIdD();zsjDictionaryDetail.setDynamicValueD(getById(zsjDictionaryDetail.getDynamicIdD()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdE() != null && !"".equals(zsjDictionaryDetail.getDynamicIdE())){pid = zsjDictionaryDetail.getDynamicIdE();zsjDictionaryDetail.setDynamicValueE(getById(zsjDictionaryDetail.getDynamicIdE()).getNationalStandardValues());}if(zsjDictionaryDetail.getDynamicIdF() != null && !"".equals(zsjDictionaryDetail.getDynamicIdF())){pid = zsjDictionaryDetail.getDynamicIdF();zsjDictionaryDetail.setDynamicValueF(getById(zsjDictionaryDetail.getDynamicIdF()).getNationalStandardValues());}zsjDictionaryDetail.setPid(pid);zsjDictionaryDetail.setStatus(1);updateById(zsjDictionaryDetail);}@Overridepublic List<ZsjDictionaryDetail> getDictionaryDetailList(String nationalStandardValues,String categoryCoding) {return zsjDictionaryDetailMapper.getCategoryCodingList(nationalStandardValues,categoryCoding);}@Overridepublic List<ZsjDictionaryDetail> getDictionaryDetailIdList(String nationalStandardValues,String publicDictionaryId) {return zsjDictionaryDetailMapper.getDictionaryDetailIdList(nationalStandardValues,publicDictionaryId);}@Overridepublic Integer getMaxNumber(String categoryCoding) {return zsjDictionaryDetailMapper.getMaxNumber(categoryCoding);}@Overridepublic Integer getMaxNumberPid(String pid) {return zsjDictionaryDetailMapper.getMaxNumberPid(pid);}@Overridepublic List<ZsjDictionaryDetail> getDictionaryPidList(String meaning,String pid) {return zsjDictionaryDetailMapper.getDictionaryPidList(meaning,pid);}}
ZsjDictionaryDetailMapper
package org.jeecg.modules.masterData.mapper;import java.util.List;import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.masterData.entity.ZsjDictionaryDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.masterData.entity.ZsjPublicDictionary;/*** @Description: 公共字典明细* @Author: 唐正锋* @Date:   2021-05-07* @Version: V1.0*/
public interface ZsjDictionaryDetailMapper extends BaseMapper<ZsjDictionaryDetail> {@Select(" SELECT zsj_dictionary_detail.* FROM zsj_dictionary_detail  " +" LEFT JOIN zsj_public_dictionary ON zsj_public_dictionary.id = public_dictionary_id  " +" WHERE national_standard_values = #{nationalStandardValues} AND category_coding = #{categoryCoding} " +" and zsj_dictionary_detail.status = 1 and zsj_public_dictionary.status = 1 ")List<ZsjDictionaryDetail> getCategoryCodingList(String nationalStandardValues,String categoryCoding);@Select(" SELECT * FROM zsj_dictionary_detail  " +" WHERE national_standard_values = #{nationalStandardValues} AND public_dictionary_id = #{publicDictionaryId} " +" and status = 1 ")List<ZsjDictionaryDetail> getDictionaryDetailIdList(String nationalStandardValues,String publicDictionaryId);/*** 查询最大id* @param categoryCoding* @return*/@Select(" SELECT MAX(zsj_dictionary_detail.arrange_serial_number) FROM zsj_dictionary_detail   " +" LEFT JOIN zsj_public_dictionary ON zsj_public_dictionary.id = public_dictionary_id  " +" WHERE zsj_public_dictionary.`status` = 1 AND zsj_dictionary_detail.`status` = 1   " +" and category_coding = #{categoryCoding}  ")Integer getMaxNumber(String categoryCoding);/*** 查询最大id* @param pid* @return*/@Select(" SELECT MAX(arrange_serial_number) FROM zsj_dictionary_detail   " +" WHERE status = 1 and pid = #{pid}  ")Integer getMaxNumberPid(String pid);@Select(" SELECT * FROM zsj_dictionary_detail " +" WHERE status = 1 " +" and national_standard_meaning = #{meaning} and pid = #{pid}  ")List<ZsjDictionaryDetail> getDictionaryPidList(String meaning,String pid);}

关注微信公众号: 回复:“高德地图省市区”获取省市区街道数据

2021年全国省市区街道代码自动同步(包含解决方案)相关推荐

  1. 2020最新全国省市区街道居委会五级地址

    (1)2020最新全国省市区街道居委五级区划代码数据库(来自国家统计局2020年6月20日爬取数据)绝对真实完整 (2)2020-9-19日青风百草修定版 (3)如果您发现了地址库存在的问题,也请加以 ...

  2. 小玩意.包含全国省市区街道邮编的数据库

    这个数据库是我2009年春季整理的比较全.有180W+的街道邮编信息. 可作为商城的辅助工具,如输入邮编自动填写收货人街道信息等. 数据截图: 下载地址(三个压缩包) 1./Files/rohan/全 ...

  3. Gerrit平台代码自动同步到Gitlab

    Gerrit平台代码自动同步到Gitlab 本文介绍如何将Gerrit代码托管平台上的代码自动同步到Gitlab平台 Gerrit服务器192.168.1.161,版本gerrit-3.1.2.war ...

  4. 全国省市区区划代码以及邮政编码数据最新版--Mysql版(下)

    全国地区区划代码以及邮政编码数据–Mysql版(下) 参考资料:中华人民共和国行政区划统计表2019:http://xzqh.mca.gov.cn/statistics/ 全部贴出超出字数,分为上下两 ...

  5. 全国省市区街道最新数据获取

    一.效果 二.相关代码 1.引入包 pom: <?xml version="1.0" encoding="UTF-8"?><project x ...

  6. PHPStorm 配置远程服务器文件夹在本地windows镜像,实现代码自动同步(类似于Samba架构文件同步功能)

    场景介绍: 这是一种类似samba架构,也和 filezilla+xshell 模式相类似的代码文件同步的模式,但是却更加优雅,也更加方便简洁. 环境介绍: 本地windows端:编辑器phpstor ...

  7. 提交代码到远程GIT仓库,代码自动同步到远程服务器上。

    现在一般都会通过github,gitlab,gitee来管理我们的代码.我们希望只要我本地push了代码,远程服务器能自动拉取git仓库的代码,进行同步. 这就需要用到各仓库为我们提供的webhook ...

  8. 2019年最新全国省市区街道数据(统计局MySQL数据库)

    本文转载于:君哥聊编程 对应sql文件 https://pan.baidu.com/s/1fDeEp5C-WGx-6Z1xPDjwGg 提取码:9ki4 省份表: 城市表: 地区表 街道表

  9. Coding代码自动同步推送gitee、github

    替换成下方配置 pipeline {agent anystages {stage('检出') {steps {checkout([$class: 'GitSCM',branches: [[name: ...

  10. linux svn上传目录_Linux系统下svn更新自动同步到web目录

    一.在web目录中checkout版本库 这一步算是比较关键的一步了,当时我搭建的时候试了无数次,就是缺少了这一步.把刚才checkout的版本库删掉,我们来一次比较正式的checkout: svn ...

最新文章

  1. win下修改mysql默认的字符集以防止乱码出现
  2. 献给开发者的大礼--打造CSDN论坛专用阅读器(电脑报2006年11月6日 第44期)
  3. Linux高可用性方案之Heartbeat的CRM节点得分计算(原创)
  4. asp.net core mvc接口,请求响应统一日志管理
  5. android界面元素识别,Android 10不能使用uiautomatorviewer定位元素的终极解决方法
  6. Power BI 的 最佳搭档 Excel(基础数据分析)
  7. vmware安装找不到虚拟网卡解决方案
  8. Longest Ordered Subsequence 最长上升子序列+DP
  9. 【回文串2】LeetCode 9. Palindrome Number
  10. Serial Interface之I2C:关于DS1624 2线通信SDA保持时间的说明
  11. 研究了一下WORD的斜体,角度约20度
  12. LaTex数学符号公式
  13. 实验五 Flash在线编程实验
  14. 罗马数字 java_Java算法练习——整数转罗马数字
  15. php设置图片文字布局,Word如何排版图片和文字
  16. iLife '09测评
  17. 1076: 三位数求解 Python
  18. 微信小程序改变页面背景颜色
  19. HyperLynx(九)HDMI仿真实例
  20. 2019电商生意经(三):内容化,跨界与反击

热门文章

  1. 使用国密函数读取金税盘信息
  2. Excel小技巧之:如何在表格内插入水印
  3. 内网服务器软件共享文件,服务器共享文件夹设置软件、局域网共享文件夹加密工具、文件共享服务器软件的选择...
  4. 萤石云平台使用 - IPC接入
  5. 计算机工业机器人编程,15个你不知道的工业机器人编程冷知识
  6. Python爬取网上文章并发表到微信公众号
  7. kux格式 linux,怎么把1080P的kux视频转换成mp4呢
  8. GPS经纬度 转化为 M
  9. 【博学谷学习记录】超强总结,用心分享 | 产品经理电商项目知识点总结与回顾
  10. 8大数据库性能优化方案,YYDS!