package com.ruoyi.quartz.task; import cn.hutool.core.codec.Base64; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.sign.Md5Utils; import com.ruoyi.quartz.domain.*; import com.ruoyi.quartz.service.*; import okhttp3.*; import org.apache.logging.log4j.util.Strings; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.File; import java.util.*; import java.util.concurrent.TimeUnit; @Component("attendanceJgwTask") public class AttendanceJgwTask { @Autowired private RedisCache redisCache; @Autowired private ISysNativeService sysNativeService; @Autowired IQuartzProjectAttendanceUserService attendanceUserService; @Autowired IQuartzProjectAttendanceCfgService attendanceCfgService; @Autowired IQuartzProjectAttendanceDataService attendanceDataService; @Autowired IQuartzProjectAttendanceGroupService attendanceGroupService; private String getNative(long id){ String ckey="attendance_jgw_native_"+id; Object obj=redisCache.getCacheObject(ckey); String tmp=""; if(obj!=null){ tmp=obj.toString(); if(StrUtil.isNotEmpty(tmp)){ return tmp; } } List list=sysNativeService.selectSysNativeListById(id); if(list.size()==0){ id=id/100*100; list=sysNativeService.selectSysNativeListById(id); if(list.size()==0){ id=id/10000*10000; list=sysNativeService.selectSysNativeListById(id); } } if(list.size()==0){ tmp=""; }else{ tmp= list.get(0).getAddress(); } redisCache.setCacheObject(ckey, tmp, Constants.BIGSCREEN_QUERY_CACHE, TimeUnit.DAYS); return tmp; } private String getWorkTypeName(String appid,String token,String type,String key){ String ckey="attendance_jgw_work_type_"+type; Object obj=redisCache.getCacheObject(ckey); HashMap map=null; if(obj==null){ map=getJobTypeData(appid,token,type); if(map!=null){ redisCache.setCacheObject(ckey, map, Constants.BIGSCREEN_QUERY_CACHE, TimeUnit.DAYS); }else{ return "未知"; } }else{ map=(HashMap)obj; } if(map.containsKey(key)){ return map.get(key); } return "未知"; } static String host="http://api.gongyoumishu.com:80/gomeetapi/"; //sign/photo/20240101/E24E76-C9A5CB-0000FF/1741751233297383424_8848.JPG public static String getToken(String appid,String secret){ String grantType="client_credential"; String path="/webapi/credential"; Map params = new HashMap<>(); params.put("appId",appid); params.put("secret",secret); params.put("grantType",grantType); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); JSONObject jo= JSON.parseObject(data); JSONObject joData= jo.getJSONObject("data"); if(joData!=null){ return joData.getString("token"); } return null; } private static RequestBody toFormBody(Map params ){ FormBody.Builder builder=new FormBody.Builder(); for(String key :params.keySet()){ builder.add(key,params.get(key).toString()); } return builder.build(); } public void clearAlllPhoto(){ String filePath= RuoYiConfig.getUploadPath(); String path=filePath+"/jgw"; long endTime=DateUtil.current(); for(int i=365;i>=0;i--) { Date dt = DateUtil.date(endTime - 3600l * 1000 * 24 * i); String clearPath=path +"/" + DateUtil.format(dt, "YYYY/MM/dd"); String url="/jgw/"+DateUtil.format(dt, "YYYY/MM/dd"); clearDatePhone(clearPath,url); } } public void clear3DayPhoto(){ String filePath= RuoYiConfig.getUploadPath(); String path=filePath+"/jgw"; long endTime=DateUtil.current(); for(int i=3;i>=0;i--) { Date dt = DateUtil.date(endTime - 3600l * 1000 * 24 * i); String clearPath=path +"/" + DateUtil.format(dt, "YYYY/MM/dd"); String url="/jgw/"+DateUtil.format(dt, "YYYY/MM/dd"); clearDatePhone(clearPath,url); } } public void clearToDayPhoto(){ String filePath= RuoYiConfig.getUploadPath(); String path=filePath+"/jgw"; long endTime=DateUtil.current(); Date dt = new Date(); String clearPath=path +"/" + DateUtil.format(dt, "YYYY/MM/dd"); String url="/jgw/"+DateUtil.format(dt, "YYYY/MM/dd"); clearDatePhone(clearPath,url); } private void clearDatePhone(String path,String url){ File file=new File(path); if(file.isDirectory()){ QuartzProjectAttendanceData where=new QuartzProjectAttendanceData(); where.setScanPhoto(url); List list=attendanceDataService.selectSurProjectAttendanceDataList(where); List names=new ArrayList<>(); for(QuartzProjectAttendanceData it:list){ names.add(it.getScanPhoto()); } for(String f : file.list()){ try{ String name= FileUtils.getName(f); if(!findInNames(names,name)){ FileUtil.del(path+"/"+f); } }catch (Exception ex){ } } } } private boolean findInNames(List names, String name) { for(String it :names){ if(it.indexOf(name)>=0){ return true; } } return false; } public static void main(String[] args){ String d="sxyzxx2024suc"; System.out.println(Base64.encode(d)); System.out.println(DateTime.now().year()); String appid="6a6f24fe35b04ee0bcf31cfb46ed1051"; String secret="c3h5enh4MjAyNHN1Yw=="; //String prjId="db955e11ef774e63968a47c3dc2acc15";//"b67f1baa6dca4558a16bf90a4681b82e";// //String prjId="cace2f676371427e8f6da20d2924f64e";//泾河新城荟锦坊二期 String prjId="209aa0c01d8248b6a56a0921d1b88c83";//泾河新城锦樾坊项目 String phone="15619028761"; String token= getToken(appid,secret); if(token==null || token.length()==0){ return; } System.out.println(token); System.out.println(DateUtil.format(DateTime.now(),"yyyy-MM-dd")); String subcontractorId=new AttendanceJgwTask().getSubcontractor(appid,token,phone); String leaderTeamId="b3774a8cd04c418dabf36bffbf276661"; System.out.println(subcontractorId); //findWorkerByLeader(appid,token,leaderTeamId); findDirectlyUnderTeam(appid,token,prjId,subcontractorId,0); //queryProject(appid,token,phone,0);; //findAddWorkerByProject(appid,token,prjId,0); //findUpdateWorkerByProject(appid,token,prjId,0); //findAttendanceByProject(appid,token,prjId,"0"); //findTeamByProjectId(appid,token,prjId); //findProContractorByProjectId(appid,token,prjId); //getJobTypeData(appid,token,"0"); //findDirectlyUnderTeam(appid,token,prjId); } public static void findDirectlyUnderTeam(String appId,String token,String projectId,String subcontractorId,int rowId){ String path="/webapi/project/findDirectlyUnderTeam"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; System.out.println(url); String tokenSign = Md5Utils.hash(url); System.out.println(tokenSign); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("projectId",projectId); params.put("subcontractorId",subcontractorId); params.put("rowId",rowId); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); System.out.println(data); JSONObject j= JSON.parseObject(data); JSONObject jd=j.getJSONObject("data"); JSONArray arr=jd.getJSONArray("teamList"); if(arr.size()>0){ for(int i=0;i"+jo.getString("teamName")); } } } public static void queryProject(String appId,String token,String phone,int rowId){ String path="/webapi/project/queryProject"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; System.out.println(url); String tokenSign = Md5Utils.hash(url); System.out.println(tokenSign); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("account",phone); params.put("rowId",rowId); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); System.out.println(data); JSONObject j= JSON.parseObject(data); JSONObject jd=j.getJSONObject("data"); JSONArray arr=jd.getJSONArray("projectList"); if(arr.size()>0){ JSONObject jo=arr.getJSONObject(0); } } public String getSubcontractor(String appId,String token,String phone){ String ckey = "attendance_jgw_Subcontractor_" + phone; if(redisCache!=null) { Object obj = redisCache.getCacheObject(ckey); if(obj!=null){ String str=(String)obj; if(StrUtil.isNotEmpty(str)){ return str; } } } String path="/webapi/project/querySubcontractorByPhone"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; System.out.println(url); String tokenSign = Md5Utils.hash(url); System.out.println(tokenSign); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("phone",phone); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); System.out.println(data); JSONObject j= JSON.parseObject(data); JSONObject jd=j.getJSONObject("data"); JSONArray arr=jd.getJSONArray("subcontractorList"); if(arr.size()>0){ JSONObject jo=arr.getJSONObject(0); String tmp=jo.getString("subcontractorId"); if(StrUtil.isNotEmpty(tmp) && redisCache!=null){ redisCache.setCacheObject(ckey, tmp, Constants.BIGSCREEN_QUERY_CACHE, TimeUnit.DAYS); return tmp; }else{ return tmp; } } return ""; } public static HashMap getJobTypeData(String appId,String token,String type){ String path="/webapi/dictInfo/getJobTypeData"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; System.out.println(url); String tokenSign = Md5Utils.hash(url); System.out.println(tokenSign); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("type",type); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); System.out.println(data); JSONObject j= JSON.parseObject(data); JSONObject jd=j.getJSONObject("data"); JSONArray arr=jd.getJSONArray("jobTypes"); HashMap map=new HashMap<>(); for(int i=0;i0){ for(int i=0;i"+sdata.getRemark()); } //sdata.setScanPhoto(photoUrl); } findAttendanceByProject(appId,token,projectId,endId); } } private static String getPhoto(String appId,String token, String photo) { String path="/webapi/dictInfo/getPhoyoAllPaths"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("filePath",photo); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject joData= j.getJSONObject("data"); String purl=joData.getString("result"); byte[] buffer= HttpUtil.downloadBytes(purl); String filePath= RuoYiConfig.getUploadPath(); try { String name=FileUtil.getName(photo); return FileUtils.writeBytes(buffer, filePath+"/jgw",name); }catch (Exception ex){ return ""; } } public static void findWorkerByLeader(String appId,String token,String leaderTeamId){ String path="/webapi/project/findWorkerByLeader"; String time = System.currentTimeMillis() + ""; String startId="0"; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("leaderTeamId",leaderTeamId); url=host+path; Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject jd=j.getJSONObject("data"); JSONArray arr=jd.getJSONArray("recordList"); for(int i=0;i0){ for(int i=0;i"+json.getString("teamName")); } } } public static void findTeamByProjectId(String appId,String token,String projectId){ String path="webapi/project/findTeamByProjectId"; String time = System.currentTimeMillis() + ""; String startId="0"; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("projectId",projectId); params.put("rowId",startId); url=host+path+"?appId="+appId+"&tokenSign="+tokenSign+"&projectId="+projectId+"×tamp="+time+"&rowId="+startId; Request request = new Request.Builder() .url(url) .get() .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject joData= j.getJSONObject("data"); JSONArray arr=joData.getJSONArray("teamList"); if(arr.size()>0){ for(int i=0;i params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("phone",phone); url=host+path+"?appId="+appId+"&tokenSign="+tokenSign+"&phone="+phone+"×tamp="+time; Request request = new Request.Builder() .url(url) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject joData= j.getJSONObject("data"); JSONArray arr=joData.getJSONArray("teamList"); if(arr.size()>0){ for(int i=0;i0){ for(int i=0;i0) { int cnt=0; for(int i=0;i0) { int cnt=0; for(int i=0;i list=attendanceCfgService.selectSurProjectAttendanceCfgList(where); for(QuartzProjectAttendanceCfg it :list){ String param= it.getVendorsParameter(); if(Strings.isNotEmpty(param)){ try{ JSONObject jo=JSON.parseObject(param); String appId=jo.getString("appId"); String secret=jo.getString("secret"); secret=Base64.encode(secret); jo.put("secret",secret); String token= getToken(appId,secret); jo.put("token",token); doSyncWorker(jo,0l,it); }catch (Exception ex){ ex.printStackTrace(); } } } syncWorkerByLeader(); } /** * 同步群组和人的关系 */ public void syncWorkerByLeader(){ QuartzProjectAttendanceCfg where =new QuartzProjectAttendanceCfg(); where.setEnabled(1l); where.setIsDel(0l); where.setVendorsCode("jgw"); List list=attendanceCfgService.selectSurProjectAttendanceCfgList(where); for(QuartzProjectAttendanceCfg it :list){ String param= it.getVendorsParameter(); if(Strings.isNotEmpty(param)){ try{ JSONObject jo=JSON.parseObject(param); String appId=jo.getString("appId"); String secret=jo.getString("secret"); secret=Base64.encode(secret); jo.put("secret",secret); String token= getToken(appId,secret); jo.put("token",token); QuartzProjectAttendanceGroup groupWhere=new QuartzProjectAttendanceGroup(); groupWhere.setCfgid(it.getId()); groupWhere.setLeaderPhone("directly"); List groupList=attendanceGroupService.selectSurProjectAttendanceGroupList(groupWhere); for(QuartzProjectAttendanceGroup g:groupList) { if(StrUtil.isNotEmpty(g.getLeaderName()) && StrUtil.isNotEmpty(g.getCompanyId())) { jo.put("subcontractorId", g.getLeaderName()); jo.put("leaderTeamId", g.getCompanyId()); jo.put("companyName", g.getCompanyName()); dosyncWorkerByLeader(jo, 0l, it); } } }catch (Exception ex){ ex.printStackTrace(); } } } } private void dosyncWorkerByLeader(JSONObject jo, long startId, QuartzProjectAttendanceCfg it){ String appId=jo.getString("appId"); String token=jo.getString("token"); String path="/webapi/project/findWorkerByLeader"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String leaderTeamId=jo.getString("leaderTeamId"); String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("leaderTeamId",leaderTeamId); params.put("subcontractorId",jo.getString("subcontractorId")); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject jd=j.getJSONObject("data"); JSONArray arr=jd.getJSONArray("recordList"); if(arr!=null && arr.size()>0){ for(int i=0;i userList=attendanceUserService.selectSurProjectAttendanceUserList(userWhere); if(userList.size()>0){ QuartzProjectAttendanceUser upUser=userList.get(0); upUser.setCompanyId(json.getString("leaderTeamId")); upUser.setWorkTypeName(json.getString("jobType")); upUser.setCompanyName(jo.getString("companyName")); attendanceUserService.updateSurProjectAttendanceUser(upUser); } } } } private void doSyncWorker(JSONObject jo, long startId, QuartzProjectAttendanceCfg it) { String appId=jo.getString("appId"); String token=jo.getString("token"); String projectId=jo.getString("projectId"); String path="/webapi/project/findAddWorkerByProject"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("projectId",projectId); params.put("startId",startId); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject joData= j.getJSONObject("data"); long endId= joData.getLong("endId"); JSONArray arr=joData.getJSONArray("workerList"); if(arr.size()>0) { for(int i=0;i6){ try { long idStr = Long.parseLong(idNumber.substring(0, 6)); String natstr=getNative(idStr); if(StrUtil.isNotEmpty(natstr)){ user.setNativePlace(natstr); } }catch (Exception ex){ } } attendanceUserService.add(user); } doSyncWorker(jo,endId,it); } } /** * 同步群组信息 */ public void syncGroup(){ QuartzProjectAttendanceCfg where =new QuartzProjectAttendanceCfg(); where.setEnabled(1l); where.setIsDel(0l); where.setVendorsCode("jgw"); List list=attendanceCfgService.selectSurProjectAttendanceCfgList(where); for(QuartzProjectAttendanceCfg it :list){ String param= it.getVendorsParameter(); if(Strings.isNotEmpty(param)){ try{ JSONObject jo=JSON.parseObject(param); String appId=jo.getString("appId"); String secret=jo.getString("secret"); secret=Base64.encode(secret); jo.put("secret",secret); String token= getToken(appId,secret); jo.put("token",token); //doSyncGroup(jo,0l,it); doSyncDirectlyUnderGroup(jo,0l,it); doSyncProContractor(jo,0l,it); }catch (Exception ex){ ex.printStackTrace(); } } } } /** * 查询参建单位 * @param jo * @param startId * @param it */ private void doSyncProContractor(JSONObject jo, long startId, QuartzProjectAttendanceCfg it) { String appId=jo.getString("appId"); String token=jo.getString("token"); String projectId=jo.getString("projectId"); String path="/webapi/project/findProContractorByProjectId"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("projectId",projectId); params.put("rowId",startId); url=host+path+"?appId="+appId+"&tokenSign="+tokenSign+"&projectId="+projectId+"×tamp="+time+"&rowId="+startId; Request request = new Request.Builder() .url(url) .get() .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject joData= j.getJSONObject("data"); JSONArray arr=joData.getJSONArray("proContractorList"); if(arr.size()>0){ long rowId=0; for(int i=0;i0){ doSyncProContractor(jo,rowId+1,it); } } } /** * 查询班组直隶 * @param jo * @param startId * @param it */ private void doSyncDirectlyUnderGroup(JSONObject jo, long startId, QuartzProjectAttendanceCfg it) { String appId=jo.getString("appId"); String token=jo.getString("token"); String projectId=jo.getString("projectId"); String phone=jo.getString("phone"); String subcontractorId=getSubcontractor(appId,token,phone); String path="/webapi/project/findDirectlyUnderTeam"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("projectId",projectId); params.put("subcontractorId",subcontractorId); params.put("rowId",startId); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject joData= j.getJSONObject("data"); JSONArray arr=joData.getJSONArray("teamList"); if(arr.size()>0){ long rowId=0; for(int i=0;i list=attendanceGroupService.selectSurProjectAttendanceGroupList(where); if(list.size()==0){ attendanceGroupService.add(group); }else{ group.setId(list.get(0).getId()); attendanceGroupService.updateSurProjectAttendanceGroup(group); } } if(rowId>0){ doSyncDirectlyUnderGroup(jo,rowId+1,it); } } } /** * 查询班组 * @param jo * @param startId * @param it */ private void doSyncGroup(JSONObject jo, long startId, QuartzProjectAttendanceCfg it) { String appId=jo.getString("appId"); String token=jo.getString("token"); String projectId=jo.getString("projectId"); String path="/webapi/project/findTeamByProjectId"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("projectId",projectId); params.put("rowId",startId); url=host+path+"?appId="+appId+"&tokenSign="+tokenSign+"&projectId="+projectId+"×tamp="+time+"&rowId="+startId; Request request = new Request.Builder() .url(url) .get() .build(); String data=AttendanceTask.getResult(request); JSONObject j= JSON.parseObject(data); JSONObject joData= j.getJSONObject("data"); JSONArray arr=joData.getJSONArray("teamList"); if(arr.size()>0){ long rowId=0; for(int i=0;i list=attendanceGroupService.selectSurProjectAttendanceGroupList(where); if(list.size()==0){ attendanceGroupService.add(group); } } if(rowId>0){ doSyncGroup(jo,rowId+1,it); } } } /** * 同步当天数据 */ public void syncAttendanceData(){ String dtStart=DateUtil.format(DateTime.now(),"yyyy-MM-dd"); String dtEnd=dtStart; syncAttendanceData(dtStart,dtEnd); clearToDayPhoto(); } /** * 同步7天之内数据 */ public void syncLastWeekAttendanceData(){ String dtEnd=DateUtil.format(DateTime.now(),"yyyy-MM-dd"); String dtStart=DateUtil.format(DateUtil.offsetDay(DateTime.now(),-7),"yyyy-MM-dd"); syncAttendanceData(dtStart,dtEnd); } /** * 同步30天内数据 */ public void syncLast30DayAttendanceData(){ String dtEnd=DateUtil.format(DateTime.now(),"yyyy-MM-dd"); String dtStart=DateUtil.format(DateUtil.offsetDay(DateTime.now(),-30),"yyyy-MM-dd"); syncAttendanceData(dtStart,dtEnd); syncAttendanceData(dtStart,dtEnd); } private void syncAttendanceData(String dtStart,String dtEnd){ QuartzProjectAttendanceCfg where =new QuartzProjectAttendanceCfg(); where.setEnabled(1l); where.setIsDel(0l); where.setVendorsCode("jgw"); List list=attendanceCfgService.selectSurProjectAttendanceCfgList(where); for(QuartzProjectAttendanceCfg it :list){ String param= it.getVendorsParameter(); if(Strings.isNotEmpty(param)){ try{ JSONObject jo=JSON.parseObject(param); String appId=jo.getString("appId"); String secret=jo.getString("secret"); secret=Base64.encode(secret); jo.put("secret",secret); String token= getToken(appId,secret); jo.put("token",token); jo.put("startTime",dtStart); jo.put("endTime",dtEnd); doSyncAttendanceData(jo,"0",it); }catch (Exception ex){ ex.printStackTrace(); } } } } private void doSyncAttendanceData(JSONObject jo, String startId, QuartzProjectAttendanceCfg it) { String appId=jo.getString("appId"); String token=jo.getString("token"); String projectId=jo.getString("projectId"); String startTime=jo.getString("startTime"); String endTime=jo.getString("endTime"); String path="/webapi/project/findAttendanceByProject"; String time = System.currentTimeMillis() + ""; String url=host+path+"?appId=" + appId + "&tokenSign=" + token +"×tamp=" + time; String tokenSign = Md5Utils.hash(url); Map params = new HashMap<>(); params.put("appId",appId); params.put("timestamp",time); params.put("tokenSign",tokenSign); params.put("projectId",projectId); params.put("startId",startId); params.put("startTime",startTime); params.put("endTime",endTime); Request request = new Request.Builder() .url(host+path) .post(toFormBody(params)) .build(); String data=AttendanceTask.getResult(request); System.out.println(data); JSONObject j= JSON.parseObject(data); JSONObject joData= j.getJSONObject("data"); String endId= joData.getString("endId"); JSONArray arr=joData.getJSONArray("workerAttList"); //List addList=new ArrayList<>(); if(arr!=null && arr.size()>0){ for(int i=0;i"+sdata.getRemark()); } sdata.setVendorsCode(it.getVendorsCode()); attendanceDataService.add(sdata); //addList.add(sdata); } //attendanceDataService.addList(addList); doSyncAttendanceData(jo,endId,it); } } }