diff --git a/ruoyi-ui/src/views/project/attendanceConfig/attendanceConfigDialog.vue b/ruoyi-ui/src/views/project/attendanceConfig/attendanceConfigDialog.vue index d79063e1..e4293bfa 100644 --- a/ruoyi-ui/src/views/project/attendanceConfig/attendanceConfigDialog.vue +++ b/ruoyi-ui/src/views/project/attendanceConfig/attendanceConfigDialog.vue @@ -1,7 +1,7 @@ + @@ -96,6 +101,7 @@ export default { vendorsCode:'gld', appProjectId: '', appTenantId:'', + phone:'', enabled: 0 }, // 表单校验 @@ -135,6 +141,7 @@ export default { this.form.secret=""; this.form.appProjectId=""; this.form.appTenantId=""; + this.form.phone=""; } }); @@ -145,6 +152,7 @@ export default { this.form.secret=""; this.form.appProjectId=""; this.form.appTenantId=""; + this.form.phone=""; } }, /** 提交按钮 */ @@ -156,6 +164,7 @@ export default { secret: this.form.secret, projectId: this.form.appProjectId, tenantId:this.form.appTenantId, + phone:this.form.phone }; let obj = { projectId: this.form.projectId, @@ -230,6 +239,7 @@ export default { vendorsCode:'gld', appProjectId: '', appTenantId:'', + phone:'', enabled: 0 }; this.resetForm("form"); @@ -244,6 +254,16 @@ export default { appProjectId: [{ required: true, trigger: "blur", message: "请输入" }], enabled: [{ required: true, trigger: "blur", message: "请选择" }] } + }else if(this.form.vendorsCode=='jgw'){ + this.rules = { + projectId: [{ required: true, trigger: "blur", message: "请选择" }], + subDeptId: [{ required: true, trigger: "blur", message: "请选择" }], + appId: [{ required: true, trigger: "blur", message: "请输入" }], + secret: [{ required: true, trigger: "blur", message: "请输入" }], + appProjectId: [{ required: true, trigger: "blur", message: "请输入" }], + enabled: [{ required: true, trigger: "blur", message: "请选择" }], + phone: [{ required: true, trigger: "blur", message: "输入" }] + } }else{ this.rules = { projectId: [{ required: true, trigger: "blur", message: "请选择" }], @@ -292,6 +312,7 @@ export default { obj.secret = p.secret || '', obj.appProjectId = p.projectId || ''; obj.appTenantId=p.tenantId||''; + obj.phone=p.phone||''; this.form = obj; this.open = true; this.title = "修改劳务实名制配置"; diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceGroup.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceGroup.java index dfe7075c..e4a8c3a9 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceGroup.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceGroup.java @@ -123,16 +123,22 @@ public class SurProjectAttendanceGroup extends BaseEntity return g; } - public static SurProjectAttendanceGroup createJgw(JSONObject j) { + public static SurProjectAttendanceGroup createJgw(JSONObject j,boolean isDirectlyUnder) { SurProjectAttendanceGroup g=new SurProjectAttendanceGroup(); g.serverid=j.getString("id"); - g.companyId=j.getString("subcontractorId"); + if(isDirectlyUnder) { + g.companyId = j.getString("leaderTeamId"); + g.leaderPhone="directly"; + }else{ + g.companyId=j.getString("subcontractorId"); + } g.companyName=j.getString("corpName"); g.teamName=j.getString("teamName"); + g.bizLicense=j.getString("corpCode"); g.companyCode=j.getString("teamJobtype"); - g.companyTypeId=""; + g.companyTypeId="0"; g.enterDate=0l; g.exitDate=0l; g.isDel=0l; diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceUser.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceUser.java index a4ff3f06..6f75b83d 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceUser.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceUser.java @@ -196,7 +196,6 @@ public class SurProjectAttendanceUser extends BaseEntity u.companyId=""+j.getLongValue("unitId",0); u.companyName=j.getString("unitName"); u.teamName=j.getString("teamName"); - u.other=j.toJSONString(); return u; } @@ -232,7 +231,6 @@ public class SurProjectAttendanceUser extends BaseEntity u.companyId=j.getString("subcontractorId"); u.companyName=""; u.teamName=""; - u.other=j.toJSONString(); u.isDel=0l; JSONArray ja=j.getJSONArray("corpName"); if(ja!=null && ja.size()>0){ @@ -348,7 +346,6 @@ public class SurProjectAttendanceUser extends BaseEntity u.teamId=json.getInteger("teamId"); u.teamName=json.getString("teamName"); u.enterType=json.getString("enterType"); - u.other=json.toJSONString(); u.isDel=0l; return u; } diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceDataServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceDataServiceImpl.java index 5aad8f37..6b465918 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceDataServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceDataServiceImpl.java @@ -6,6 +6,7 @@ import java.util.stream.Collectors; import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; @@ -188,6 +189,7 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc if(StrUtil.isEmpty(photo)){ photo=user.getRecentPhoto(); } + sdata.setWorkerPhoto(photo); sdata.setWorkerGender(user.getGender());; sdata.setGroupName(user.getGroupName()); @@ -196,6 +198,9 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc sdata.setNativePlace(user.getNativePlace()); sdata.setPhone(user.getPhone()); sdata.setSpecWorkType(user.getSpecWorkType()); + if("jgw".equals(sdata.getVendorsCode())) { + sdata.setCompanyId(user.getCompanyId()); + } //查询分组信息 SurProjectAttendanceGroup groupWhere=new SurProjectAttendanceGroup(); groupWhere.setCfgid(sdata.getCfgid()); @@ -215,6 +220,8 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc if("jgw".equals(sdata.getVendorsCode())){ //sdata.setWorkTypeName(group.getCompanyCode()); sdata.setCompanyName(user.getCompanyName()); + sdata.setWorkTypeName(user.getWorkTypeName()); + //sdata.setCompanyName(group.getCompanyName()); sdata.setGroupName(group.getTeamName()); } //查询项目部门信息 @@ -236,7 +243,35 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc }else{ sdata.setId(list.get(0).getId()); SurProjectAttendanceData upData=list.get(0); - upData.setAttendanceOutTime(sdata.getAttendanceTime()); + String dt1=upData.getAttendanceTime(); // + String dt2=upData.getAttendanceOutTime(); + String dt3=sdata.getAttendanceTime(); + if (StrUtil.isEmpty(dt3)) { + return; + } + long time3=DateUtil.parse(dt3).getTime(); + if(StrUtil.isEmpty(dt2)){ + upData.setAttendanceOutTime(dt3); + //比较 dt1,dt2 进行交换 + long time2=DateUtil.parse(dt3).getTime(); + long time1=DateUtil.parse(dt1).getTime(); + if(time1>time2){ + upData.setAttendanceTime(dt3); + upData.setAttendanceOutTime(dt1); + } + }else{ + long time2=DateUtil.parse(dt2).getTime(); + long time1=DateUtil.parse(dt1).getTime(); + //比较 dt3dt3 + if(time3dt2 out->dt3 + if(time3>time2){ + upData.setAttendanceOutTime(dt3); + } + } + //upData.setAttendanceOutTime(sdata.getAttendanceTime()); updateSurProjectAttendanceData(upData); } } diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceJgwTask.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceJgwTask.java index ee54758e..d1439a09 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceJgwTask.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceJgwTask.java @@ -30,10 +30,7 @@ import org.apache.logging.log4j.util.Strings; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.concurrent.TimeUnit; @Component("attendanceJgwTask") @@ -111,18 +108,128 @@ public class AttendanceJgwTask { String appid="6a6f24fe35b04ee0bcf31cfb46ed1051"; String secret="c3h5enh4MjAyNHN1Yw=="; String prjId="db955e11ef774e63968a47c3dc2acc15";//"b67f1baa6dca4558a16bf90a4681b82e";// + String phone="18171295380"; 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")); - findAddWorkerByProject(appid,token,prjId,0); + String subcontractorId=new AttendanceJgwTask().getSubcontractor(appid,token,phone); + String leaderTeamId="a643aaf5fdeb4c8fb0d8c7307881ce97"; + System.out.println(subcontractorId); + findWorkerByLeader(appid,token,leaderTeamId); + //findDirectlyUnderTeam(appid,token,prjId,subcontractorId,0); + //queryProject(appid,token,phone,0);; + //findAddWorkerByProject(appid,token,prjId,0); //findAttendanceByProject(appid,token,prjId); //findTeamByProjectId(appid,token,prjId); //findProContractorByProjectId(appid,token,prjId); //getJobTypeData(appid,token,"0"); } + 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() + ""; @@ -218,6 +325,30 @@ public class AttendanceJgwTask { } } + 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"); + JSONObject jo=arr.getJSONObject(0); + } public static void findProContractorByProjectId(String appId,String token,String projectId){ String path="/webapi/project/findProContractorByProjectId"; String time = System.currentTimeMillis() + ""; @@ -244,7 +375,7 @@ public class AttendanceJgwTask { if(arr.size()>0){ for(int i=0;i"+json.getString("teamName")); } } } @@ -274,7 +405,7 @@ public class AttendanceJgwTask { if(arr.size()>0){ for(int i=0;i list=attendanceCfgService.selectSurProjectAttendanceCfgList(where); + for(SurProjectAttendanceCfg 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); + SurProjectAttendanceGroup groupWhere=new SurProjectAttendanceGroup(); + groupWhere.setCfgid(it.getId()); + groupWhere.setLeaderPhone("directly"); + List groupList=attendanceGroupService.selectSurProjectAttendanceGroupList(groupWhere); + for(SurProjectAttendanceGroup g:groupList) { + jo.put("leaderTeamId",g.getCompanyId()); + dosyncWorkerByLeader(jo, 0l, it); + } + }catch (Exception ex){ + ex.printStackTrace(); + } + } + } + } + + private void dosyncWorkerByLeader(JSONObject jo, long startId, SurProjectAttendanceCfg 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); + 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){ + SurProjectAttendanceUser upUser=userList.get(0); + upUser.setCompanyId(json.getString("leaderTeamId")); + upUser.setWorkTypeName(json.getString("jobType")); + attendanceUserService.updateSurProjectAttendanceUser(upUser); + } + } + } + } private void doSyncWorker(JSONObject jo, long startId, SurProjectAttendanceCfg it) { String appId=jo.getString("appId"); String token=jo.getString("token"); @@ -391,7 +596,6 @@ public class AttendanceJgwTask { JSONObject json=arr.getJSONObject(i); SurProjectAttendanceUser user=SurProjectAttendanceUser.createFromJgw(json); user.setVendorsCode(it.getVendorsCode()); - user.setCfgid(it.getId()); user.setAppId(appId); attendanceUserService.add(user); @@ -421,6 +625,7 @@ public class AttendanceJgwTask { 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(); @@ -465,7 +670,7 @@ public class AttendanceJgwTask { for(int i=0;i0){ + 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); + } + } + } + /** * 查询班组 * @param jo @@ -520,11 +782,17 @@ public class AttendanceJgwTask { 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); diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceTask.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceTask.java index 34842ab7..79df7046 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceTask.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceTask.java @@ -1,5 +1,6 @@ package com.yanzhu.jh.project.task; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; @@ -214,6 +215,7 @@ public class AttendanceTask { } } public static void main(String[] args){ + System.out.println("-------1--------->AttendanceUserTask.syncWorker"); Map params = new HashMap<>(); params.put("projectId", "824959117494784");