package cn.com.lzt.dingding.service.impl; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.daju.mix.dao.entity.TBusAttendanceTotal; import com.daju.mix.dao.entity.TSBaseUser; import com.daju.mix.dao.mapper.TBCarMapper; import com.daju.mix.dao.mapper.TBusAttendanceTotalMapper; import com.daju.mix.dao.mapper.TSBaseUserMapper; import com.daju.mix.dto.UserClockDto; import com.dingtalk.api.response.OapiAttendanceGetcolumnvalResponse; import org.apache.commons.lang.xwork.StringUtils; import org.jeecgframework.core.common.service.impl.CommonServiceImpl; import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.web.system.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import cn.com.lzt.arrangeduty.service.ArrangeDutyServiceI; import cn.com.lzt.attendancetemp.service.AttendanceTempServiceI; import cn.com.lzt.calendar.service.CalendarServiceI; import cn.com.lzt.common.util.dingding.DingTool; import cn.com.lzt.dingattendanceinfo.service.DingAttendanceinfoServiceI; import cn.com.lzt.dingding.service.DingdingService; import cn.com.lzt.projarrangedetail.service.ProjarrangeDetailServiceI; import cn.com.lzt.userarrangedetail.service.UserArrangeDetailServiceI; import com.dingtalk.open.client.api.model.corp.CorpUserDetail; import com.dingtalk.open.client.api.model.corp.Department; import javax.annotation.Resource; @Service("DingdingService") @Transactional public class DingdingServiceImpl extends CommonServiceImpl implements DingdingService{ @Autowired private UserService userService; @Autowired private DingAttendanceinfoServiceI dingAttendanceinfoService; @Autowired private SystemService systemService; @Autowired private CalendarServiceI calendarService; @Autowired private AttendanceTempServiceI attendanceTempService; @Autowired private ProjarrangeDetailServiceI projarrangeDetailService; @Autowired private UserArrangeDetailServiceI userArrangeDetailService; @Autowired private ArrangeDutyServiceI arrangeDutyService; @Resource private TSBaseUserMapper tsBaseUserMapper; @Resource private TBCarMapper tbCarMapper; @Resource private TBusAttendanceTotalMapper tBusAttendanceTotalMapper; /** * 创建部门 * * @param name 部门名称 * @param parentId 父部门ID * @return 部门ID(创建失败,返回"") */ public String createDepartment(String name, String parentId){ DingTool dingTool = new DingTool(); if("".equals(parentId)) { parentId = "1"; } return dingTool.createDepartment(name, parentId, "1", false); } /** * 查询部门详情 * * @param deptId 部门ID * */ public Department getDepartment(String deptId) { DingTool dingTool = new DingTool(); return dingTool.getDepartment(deptId); } /** * 查询子部门信息 * * @param parentDeptId 父部门ID * @return deptList 子部门信息List */ public List listDepartments(String parentDeptId) { DingTool dingTool = new DingTool(); return dingTool.listDepartments(parentDeptId); } /** * 更新部门信息 * * @param id 部门Id * @param name 部门名 * @param parentId 父部门Id * * @return returnFlg 更新成败flg * * */ public boolean updateDepartment(long id, String name, String parentId) { if("".equals(parentId)) { parentId = "1"; } DingTool dingTool = new DingTool(); return dingTool.updateDepartment(id, name, parentId, "1", false, true, "", false, "", "", false, "", "", ""); } /** * 删除部门 * * @param id 部门Id * * @return returnFlg 删除成败flg * */ public boolean deleteDepartment(long id) { DingTool dingTool = new DingTool(); return dingTool.deleteDepartment(id); } /** * 新建人员 * * @param userid String 人员编号 * @param name String 人员姓名 * @param department List 成员所属部门id列表 * @param mobile String 手机号码 * @param jobnumber String 工号 * @return boolean */ public boolean createUser(String userid, String name, List department, String mobile, String jobnumber) { DingTool dingTool = new DingTool(); CorpUserDetail userDetail = new CorpUserDetail(); userDetail.setUserid(userid); userDetail.setName(name); userDetail.setDepartment(department); if(mobile != null && mobile.length()>0){ StringBuffer sb = new StringBuffer(); String endString = mobile.substring(4); sb.append("1444"); sb.append(endString); userDetail.setMobile(sb.toString()); } userDetail.setJobnumber(jobnumber); boolean success = dingTool.createUser(userDetail); if(success) { return success; }else { return recreateUserWithDiffMobile(userDetail); } } /** * 1444开头的手机号可能重复导致无法更新用户信息 * @param userDetail */ private boolean recreateUserWithDiffMobile(CorpUserDetail userDetail) { String mobile = userDetail.getMobile(); if(mobile != null && mobile.length()>0){ StringBuffer sb = new StringBuffer(); String endString = mobile.substring(4); sb.append("1446"); sb.append(endString); userDetail.setMobile(sb.toString()); } DingTool dingTool = new DingTool(); boolean r = dingTool.createUser(userDetail); if(r) { System.out.println("userid:"+userDetail.getUserid()+"1446手机号同步成功"); } return r; } /** * 获取用户信息 * * @param userid * @return 返回对象中的active表示该用户是否激活,false为未激活。 */ public CorpUserDetail getUser(String userid) { DingTool dingTool = new DingTool(); return dingTool.getUser(userid); } /** * 更新用户信息 * * @param userid String 人员编号 * @param name String 人员姓名 * @param department List 成员所属部门id列表 * @param mobile String 手机号码 * @param jobnumber String 工号 * @return boolean * @return */ public boolean updateUser(String userid, String name, List department, String mobile, String jobnumber) { DingTool dingTool = new DingTool(); CorpUserDetail userDetail = new CorpUserDetail(); userDetail.setUserid(userid); userDetail.setName(name); userDetail.setDepartment(department); if(mobile != null && mobile.length()>0){ StringBuffer sb = new StringBuffer(); String endString = mobile.substring(4); sb.append("1444"); sb.append(endString); userDetail.setMobile(sb.toString()); } userDetail.setJobnumber(jobnumber); boolean success = dingTool.updateUser(userDetail); if(success) { return success; }else { return reupdateUserWithDiffMobile(userDetail); } } /** * 1444开头的手机号可能重复导致无法更新用户信息 * @param userDetail */ private boolean reupdateUserWithDiffMobile(CorpUserDetail userDetail) { String mobile = userDetail.getMobile(); if(mobile != null && mobile.length()>0){ StringBuffer sb = new StringBuffer(); String endString = mobile.substring(4); sb.append("1446"); sb.append(endString); userDetail.setMobile(sb.toString()); } DingTool dingTool = new DingTool(); boolean r = dingTool.updateUser(userDetail); if(r) { System.out.println("userid:"+userDetail.getUserid()+"1446手机号同步成功"); } return r; } /** * 批量删除用户 * * @param useridlist * @return 如果有一个用户删除失败,都不会删除 * 删除用户时,会将考勤记录一并删除,删除用户之前需要先把考勤记录同步到本地数据库 */ public boolean batchDeleteUser(List useridlist) { DingTool dingTool = new DingTool(); return dingTool.batchDeleteUser(useridlist); } /** * 根据手机号获取userId,并更新至数据库 */ //@Transactional(rollbackFor = Exception.class) public boolean getUserIdByPhone(){ DingTool dingTool = new DingTool(); ArrayList list = tbCarMapper.getUserPhone(); for (String li : list) { String userId = dingTool.getUserIdByPhone(li); if(StringUtils.isNotBlank(userId)){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TSBaseUser::getUsername, li); TSBaseUser tsBaseUser = tsBaseUserMapper.selectOne(wrapper); tsBaseUser.setDid(userId); tsBaseUserMapper.updateById(tsBaseUser); } } return Boolean.TRUE; } public boolean getColumnVal(){ DingTool dingTool = new DingTool(); List list = tbCarMapper.getUserDid(); for (UserClockDto li : list) { List dList = dingTool.getColumnVal(li.getDid()); HashMap hashMap = new HashMap<>(); for (OapiAttendanceGetcolumnvalResponse.ColumnValForTopVo d : dList) { double num = 0; for (OapiAttendanceGetcolumnvalResponse.ColumnDayAndVal value : d.getColumnVals()) { num += Double.valueOf(value.getValue()); } hashMap.put(d.getColumnVo().getId().toString(), num); } int year = DateUtil.year(new Date()); int month = DateUtil.month(new Date()) + 1; String tMonth = new StringBuilder().append(year).append("-").append(month).toString(); String a = DateUtil.parse(DateUtil.now(), "yyyy-MM").toString(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TBusAttendanceTotal::getTMonth, tMonth); wrapper.eq(TBusAttendanceTotal::getUserId, li.getUserId()); TBusAttendanceTotal total = tBusAttendanceTotalMapper.selectOne(wrapper); if (total != null){ total.setShouldTime(hashMap.get("290802238").toString()); total.setRealityTime(hashMap.get("290802241").toString()); total.setNumOfLate(hashMap.get("290802244").toString()); total.setNumLeaveEarly(hashMap.get("290802249").toString()); tBusAttendanceTotalMapper.updateById(total); } else { TBusAttendanceTotal tBusAttendanceTotal = new TBusAttendanceTotal(); tBusAttendanceTotal.setUserId(li.getUserId()); tBusAttendanceTotal.setUserCode(li.getCode()); tBusAttendanceTotal.setRealname(li.getName()); tBusAttendanceTotal.setTMonth(tMonth); tBusAttendanceTotal.setDepart(li.getDepart()); tBusAttendanceTotal.setPost(li.getPost()); tBusAttendanceTotal.setShouldTime(hashMap.get("290802238").toString()); tBusAttendanceTotal.setRealityTime(hashMap.get("290802241").toString()); tBusAttendanceTotal.setNumOfLate(hashMap.get("290802244").toString()); tBusAttendanceTotal.setNumLeaveEarly(hashMap.get("290802249").toString()); tBusAttendanceTotalMapper.insert(tBusAttendanceTotal); } } return Boolean.TRUE; } }