| | |
| | | import com.gitee.sunchenbin.mybatis.actable.annotation.Column; |
| | | import com.gitee.sunchenbin.mybatis.actable.annotation.Table; |
| | | import com.hx.common.annotations.MysqlHexAes; |
| | | import com.hx.common.dao.CommonMapper; |
| | | import com.hx.common.dao.mapper.CommonMapper; |
| | | import com.hx.common.service.CommonService; |
| | | import com.hx.exception.ServiceException; |
| | | import com.hx.mybatisTool.SqlSentence; |
| | |
| | | import javax.annotation.PostConstruct; |
| | | import java.lang.reflect.Field; |
| | | import java.util.*; |
| | | import java.util.concurrent.ExecutorService; |
| | | import java.util.concurrent.Executors; |
| | | |
| | | public class InitMysqlData { |
| | | |
| | |
| | | //解析表数据 |
| | | List<FieldData> fieldDatas = entityhandle(classes); |
| | | |
| | | StringBuilder selectField; |
| | | StringBuilder setField; |
| | | for(FieldData fieldData:fieldDatas){ |
| | | //获取条数 |
| | | sqlSentence.sqlSentence("SELECT COUNT(0) FROM "+fieldData.getTableName(),values); |
| | | int total = commonService.selectCountSql(sqlSentence); |
| | | |
| | | //查询数据 |
| | | selectField = new StringBuilder(); |
| | | selectField.append(fieldData.getId()); |
| | | for(String fieldName:fieldData.getEncrypFields()){ |
| | | selectField.append(","+fieldName); |
| | | } |
| | | sqlSentence.sqlSentence("SELECT "+selectField.toString()+" FROM "+fieldData.getTableName(),values); |
| | | |
| | | //更新数据 |
| | | List<Map<String,Object>> list = commonService.selectListMap(CommonMapper.class,sqlSentence); |
| | | for (Map<String,Object> map:list){ |
| | | setField = new StringBuilder(); |
| | | for (Map.Entry<String, Object> entry : map.entrySet()) { |
| | | String mapKey = entry.getKey(); |
| | | String mapValue = (String) entry.getValue(); |
| | | if(StringUtils.isEmpty(mapValue)){ |
| | | continue; |
| | | } |
| | | if(mapValue.length()%32==0 && MysqlHexAesTool.isHexStrValid(mapValue)){ |
| | | continue; |
| | | } |
| | | if(setField.length()>0){ |
| | | setField.append(","); |
| | | } |
| | | setField.append(mapKey+" = #{m."+mapKey+"}"); |
| | | int pageSize = 500; |
| | | //创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 |
| | | ExecutorService fixedThreadPool = Executors.newFixedThreadPool(20); |
| | | try{ |
| | | for(FieldData fieldData:fieldDatas){ |
| | | //获取条数 |
| | | sqlSentence.sqlSentence("SELECT COUNT(0) FROM "+fieldData.getTableName(),values); |
| | | int total = commonService.selectCountSql(sqlSentence); |
| | | if(total ==0 ){ |
| | | continue; |
| | | } |
| | | |
| | | values = map; |
| | | sqlSentence.sqlSentence("UPDATE "+fieldData.getTableName()+" SET "+setField.toString()+" WHERE id = #{m.id}",values); |
| | | if(commonService.updateSentence(sqlSentence)!=1){ |
| | | throw new ServiceException("更新超过1条,更新失败!"); |
| | | int pageTotal = total/pageSize+1; |
| | | for(int i= 0;i<pageTotal;i++){ |
| | | int finalI = i; |
| | | fixedThreadPool.execute(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | //更新数据 |
| | | updateData(fieldData,commonService, finalI,pageSize); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | }finally { |
| | | fixedThreadPool.shutdown(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /**更新数据*/ |
| | | public static void updateData(FieldData fieldData,CommonService commonService,int pageNum,int pageSize){ |
| | | SqlSentence sqlSentence = new SqlSentence(); |
| | | Map<String,Object> values = new HashMap<>(); |
| | | |
| | | //查询数据 |
| | | StringBuilder selectField = new StringBuilder(); |
| | | selectField.append(fieldData.getId()); |
| | | for(String fieldName:fieldData.getEncrypFields()){ |
| | | selectField.append(","+fieldName); |
| | | } |
| | | sqlSentence.sqlSentence("SELECT "+selectField.toString()+" FROM "+fieldData.getTableName()+" LIMIT "+pageNum+","+pageSize,values); |
| | | List<Map<String,Object>> list = commonService.selectListMap(CommonMapper.class,sqlSentence); |
| | | |
| | | for (Map<String,Object> map:list){ |
| | | StringBuilder setField = new StringBuilder(); |
| | | for (Map.Entry<String, Object> entry : map.entrySet()) { |
| | | String mapKey = entry.getKey(); |
| | | String mapValue = (String) entry.getValue(); |
| | | if(StringUtils.isEmpty(mapValue)){ |
| | | continue; |
| | | } |
| | | if(mapValue.length()%32==0 && MysqlHexAesTool.isHexStrValid(mapValue)){ |
| | | continue; |
| | | } |
| | | if(fieldData.getId().equals(mapKey)){ |
| | | continue; |
| | | } |
| | | if(setField.length()>0){ |
| | | setField.append(","); |
| | | } |
| | | setField.append(mapKey+" = #{m."+mapKey+"}"); |
| | | } |
| | | |
| | | values = map; |
| | | sqlSentence.sqlSentence("UPDATE "+fieldData.getTableName()+" SET "+setField.toString()+" WHERE "+fieldData.getId()+" = #{m."+fieldData.getId()+"}",values); |
| | | |
| | | if(commonService.updateSentence(sqlSentence)!=1){ |
| | | throw new ServiceException("更新超过1条,更新失败!"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /**获取到表的数据*/ |
| | | public static List<FieldData> entityhandle(Set<Class<?>> classes){ |
| | | |