package com.shuhaiwifi.task; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class DistributeSMD { private final static Log logger = LogFactory.getLog(DistributeSMD.class); public static void main(String[] args) { List> devlists = new ArrayList>(); long sevenDaysAgo = System.currentTimeMillis() - (12 * 60 * 60 * 1000); for (int i = 0; i < 32; i++) { String devsql = "SELECT * from device"+i+" where devgrpid=1 and lastcntm > "+sevenDaysAgo; List> devlist=RCPService.getMifiService().getMapList(devsql); if (devlist!=null&&devlist.size()>0) { devlists.addAll(devlist); } } // 特定设备分配 /*String devid0="18042509130631"; String devsql = "SELECT * from device"+(Long.parseLong(devid0)%32)+" where devid='"+devid0+"'"; List> devlist=RCPService.getMifiService().getMapList(devsql); if (devlist!=null&&devlist.size()>0) { devlists.addAll(devlist); }*/ // String devids=devlists.stream().map(m -> "'"+String.valueOf(m.get("devid"))+"'").collect(Collectors.joining(", ")); // logger.info(devids); logger.info(devlists.size()); Map devidmap = new HashMap(); for (Map map : devlists) { String devid=String.valueOf(map.get("devid")); String devstat=String.valueOf(map.get("devstat")); devidmap.put(devid, devstat); } String smdSql="select sn,iccid from smd"; List> smdlist=RCPService.getBaseService().getMapList(smdSql); Map smdmap = new HashMap(); Map iccidmap0 = new HashMap(); smdlist.stream().forEach(item->{ String sn=String.valueOf(item.get("sn")); String iccid=String.valueOf(item.get("iccid")); iccidmap0.put(iccid, sn); if (devidmap.get(sn)!=null) { String v=smdmap.get(sn); if (v==null) { smdmap.put(sn, iccid); } else { smdmap.put(sn, v+","+iccid); } } }); List> simlist=RCPService.getSimpService().getMapList("select iccid,scgrpid from sim where imsi like '46001%' or imsi like '46006%' or imsi like '46009%'"); Map iccidmap = new HashMap(); Map iccidCuMap = new HashMap(); simlist.stream().forEach(item->{ String iccid=String.valueOf(item.get("iccid")); String scgrpid=String.valueOf(item.get("scgrpid")); iccidCuMap.put(iccid, iccid); if ("14".equals(scgrpid)) { iccidmap.put(iccid, iccid); } }); Map targeticcidmap = new HashMap(); List sqList = new ArrayList(); List sqList2 = new ArrayList(); for (Map map : devlists) { String sn=String.valueOf(map.get("devid")); String v=smdmap.get(sn); boolean isDistr=true; if (v!=null) { String[] vs=v.split(","); for (String item : vs) { String devstat=devidmap.get(sn); if (iccidCuMap.get(item)!=null) { isDistr=false; break; } } } String iccid; if (isDistr) { boolean have=false; Iterator it=iccidmap.keySet().iterator(); while (it.hasNext()) { String ki = it.next(); if (iccidmap0.get(ki)==null&&targeticcidmap.get(ki)==null) { iccid=ki; targeticcidmap.put(iccid, iccid); String sqli="insert into smd(sn,iccid,orgid,rmode,flag) values('"+sn+"','"+iccid+"',3,1,2);"; String sqli2="update device"+(Long.parseLong(sn)%32)+" set devstat=4 where devid='"+sn+"';"; sqList.add(sqli); sqList2.add(sqli2); have=true; // logger.info(sqli); // logger.info(sqli2); break; } } if (!have){ logger.info("设备【"+sn+"】没有可用的iccid"); /*try { logger.info("开始删除无实名的iccid"); HN.deleteNoRealNameSmd(); logger.info("删除成功"); } catch (IOException e) { e.printStackTrace(); logger.info("删除失败:"+e.getMessage()); }*/ } } } if (sqList.size()>0) { logger.info(sqList); logger.info(sqList2); RCPService.getBaseService().execBatch(sqList); RCPService.getMifiService().execBatch(sqList2); } String sql = "SELECT min(iccid) iccid,sn,rmode FROM `smd` where `rmode` in (5,6,7,8,1) group by sn,rmode having count(*)>1"; List> smdList2=RCPService.getBaseService().getMapList(sql); if (smdList2!=null) { for (Map map : smdList2) { logger.info(map); String iccid = String.valueOf(map.get("iccid")); String sn = String.valueOf(map.get("sn")); String delsql = "delete from smd where sn='"+sn+"' and iccid='"+iccid+"'"; logger.info(delsql); RCPService.getBaseService().execSql(delsql); } } } }