|
@@ -9,17 +9,20 @@ import com.dingtalk.api.DingTalkClient;
|
|
|
import com.dingtalk.api.request.OapiAttendanceVacationTypeListRequest;
|
|
|
import com.dingtalk.api.response.OapiAttendanceVacationTypeListResponse;
|
|
|
import com.management.platform.entity.*;
|
|
|
+import com.management.platform.entity.vo.DdLeaveQtVo;
|
|
|
import com.management.platform.entity.vo.SysRichFunction;
|
|
|
import com.management.platform.mapper.*;
|
|
|
import com.management.platform.service.CompanyDingdingService;
|
|
|
import com.management.platform.service.DingDingService;
|
|
|
import com.management.platform.service.ExcelExportService;
|
|
|
import com.management.platform.service.UserYearleaveSettingService;
|
|
|
+import com.management.platform.service.impl.ProjectServiceImpl;
|
|
|
import com.management.platform.util.HttpRespMsg;
|
|
|
import com.management.platform.util.ListUtil;
|
|
|
import com.management.platform.util.MessageUtils;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
@@ -27,10 +30,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Optional;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -117,17 +117,19 @@ public class UserYearleaveSettingController {
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
- * @param leaveCode 请假类型代码
|
|
|
- * @param companyId 公司id (必传
|
|
|
- * @param departmentId 部门id
|
|
|
- * @param userId 员工id
|
|
|
+ * @param ddLeaveQtVo 请求相关参数
|
|
|
* @param pageIndex 页码
|
|
|
* @return
|
|
|
*/
|
|
|
@RequestMapping("/getDingDingLeaveQt")
|
|
|
- public HttpRespMsg getDingDingLeaveQt(String leaveCode, Integer companyId, Integer departmentId, String userId,@RequestParam(required = false, defaultValue = "1") Integer pageIndex) {
|
|
|
+ public HttpRespMsg getDingDingLeaveQt(DdLeaveQtVo ddLeaveQtVo, @RequestParam(required = false, defaultValue = "1") Integer pageIndex) {
|
|
|
QueryWrapper<LeaveQuotaNum> quotaNumQueryWrapper = new QueryWrapper<>();
|
|
|
+ String leaveCode = ddLeaveQtVo.getLeaveCode();
|
|
|
+ Integer[] departmentId = ddLeaveQtVo.getDepartmentId();
|
|
|
+ String userId = ddLeaveQtVo.getUserId();
|
|
|
+ Integer companyId = ddLeaveQtVo.getCompanyId();
|
|
|
quotaNumQueryWrapper.eq("company_id", companyId);
|
|
|
+ ArrayList<Integer> deptList = null;
|
|
|
HashMap map = new HashMap();
|
|
|
if (leaveCode == null) {
|
|
|
List<LeaveType> typeList = leaveTypeMapper.selectList(new QueryWrapper<LeaveType>().eq("company_id", companyId));
|
|
@@ -166,15 +168,22 @@ public class UserYearleaveSettingController {
|
|
|
if (userId != null) {
|
|
|
String dingdingUserid = userMapper.selectById(userId).getDingdingUserid();
|
|
|
quotaNumQueryWrapper.eq("user_dingding_id", dingdingUserid);
|
|
|
- } else if (departmentId != null) {
|
|
|
+ } else if (departmentId!=null) {
|
|
|
+ deptList = new ArrayList<>(Arrays.asList(departmentId));
|
|
|
//指定部门
|
|
|
- Department dept = departmentMapper.selectById(departmentId);
|
|
|
+ List<Department> dept = departmentMapper.selectBatchIds(deptList);
|
|
|
List<Department> allDept = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
- List<Department> allSubDepts = getSubDeptList(allDept, dept);
|
|
|
+ List<Department> allSubDepts = new ArrayList<>();
|
|
|
+ for (Department department : dept) {
|
|
|
+ allSubDepts.addAll(getSubDeptList(allDept, department));
|
|
|
+ }
|
|
|
List<User> userList = userMapper.selectList(
|
|
|
new QueryWrapper<User>()
|
|
|
.in("department_id", allSubDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList())));
|
|
|
List<String> userDDIds = userList.stream().map(User::getDingdingUserid).collect(Collectors.toList());
|
|
|
+ if (userDDIds.size() == 0){
|
|
|
+ userDDIds.add("");
|
|
|
+ }
|
|
|
quotaNumQueryWrapper.in("user_dingding_id", userDDIds);
|
|
|
}
|
|
|
}
|
|
@@ -192,17 +201,56 @@ public class UserYearleaveSettingController {
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
+ //递归获取所有上级部门字符串,格式:"上级部门/上级部门/部门"
|
|
|
+ private String getSupDepartment(Department department) {
|
|
|
+ String depHierarchy = department.getDepartmentName();
|
|
|
+ //搜到父部门进行添加
|
|
|
+ if (department.getSuperiorId()==null) {
|
|
|
+ return depHierarchy;
|
|
|
+ } else {
|
|
|
+ Department supDep = departmentMapper.selectById(department.getSuperiorId());
|
|
|
+ return getSupDepartment(supDep) + "/" + depHierarchy;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //递归获取企业微信所有上级部门字符串,格式:"上级部门/上级部门/部门"
|
|
|
+ private String getWxDepartment(Department department) {
|
|
|
+ String depHierarchy = "$departmentName="+department.getCorpwxDeptid()+"$";
|
|
|
+ //搜到父部门进行添加
|
|
|
+ if (department.getCorpwxDeptpid()==null || department.getCorpwxDeptpid()==1) {
|
|
|
+ return depHierarchy;
|
|
|
+ }else{
|
|
|
+ Department supDep = departmentMapper.selectOne(new QueryWrapper<Department>().eq("corpwx_deptid",department.getCorpwxDeptpid()));
|
|
|
+ return getWxDepartment(supDep) + "/" + depHierarchy;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//导出剩余假期
|
|
|
@RequestMapping("/exportDingDingLeaveQt")
|
|
|
- public HttpRespMsg exportDingDingLeaveQt(String leaveCode, Integer companyId, Integer departmentId, String userId){
|
|
|
+ public HttpRespMsg exportDingDingLeaveQt(DdLeaveQtVo ddLeaveQtVo){
|
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ Integer companyId = ddLeaveQtVo.getCompanyId();
|
|
|
WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",companyId));
|
|
|
List<String> headList = new ArrayList<>();
|
|
|
List<List<String>> allList = new ArrayList<>();
|
|
|
- HttpRespMsg dingDingLeaveQt = getDingDingLeaveQt(leaveCode, companyId, departmentId, userId, 1);
|
|
|
+ HttpRespMsg dingDingLeaveQt = getDingDingLeaveQt(ddLeaveQtVo, 1);
|
|
|
HashMap map = (HashMap)dingDingLeaveQt.data;
|
|
|
List<LeaveQuotaNum> records = (List<LeaveQuotaNum>)map.get("records");
|
|
|
Long total = (Long) map.get("total");
|
|
|
+ List<Department> deptName = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
+ List<User> user = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
|
|
|
+ List<HashMap<String,Object>> deptMap = new ArrayList<>();
|
|
|
+ for (Department department : deptName) {
|
|
|
+ department.setDepartmentName(getSupDepartment(department));
|
|
|
+ for (User userItem : user) {
|
|
|
+ if (userItem.getDepartmentId().equals(department.getDepartmentId())){
|
|
|
+ HashMap<String, Object> mapItem = new HashMap<>();
|
|
|
+ mapItem.put("ddUserId",userItem.getDingdingUserid());
|
|
|
+ mapItem.put("deptName",department.getDepartmentName());
|
|
|
+ deptMap.add(mapItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
Long j = 0L;
|
|
|
if (total!=0){
|
|
|
j = total / 50;
|
|
@@ -210,12 +258,14 @@ public class UserYearleaveSettingController {
|
|
|
j += 1;
|
|
|
}
|
|
|
}
|
|
|
+ // headList.add("部门");
|
|
|
// headList.add("员工姓名");
|
|
|
// headList.add("有效期");
|
|
|
// headList.add("总额度");
|
|
|
// headList.add("已使用");
|
|
|
// headList.add("剩余额度");
|
|
|
headList.add(MessageUtils.message("entry.staffName"));
|
|
|
+ headList.add(MessageUtils.message("excel.department"));
|
|
|
headList.add(MessageUtils.message("excel.validity"));
|
|
|
headList.add(MessageUtils.message("leave.totalAmount"));
|
|
|
headList.add(MessageUtils.message("leave.used"));
|
|
@@ -226,15 +276,21 @@ public class UserYearleaveSettingController {
|
|
|
break;
|
|
|
}
|
|
|
for (LeaveQuotaNum record : records) {
|
|
|
+ for (HashMap<String, Object> stringMap : deptMap) {
|
|
|
+ if (record.getUserDingdingId().equals(stringMap.get("ddUserId"))){
|
|
|
+ record.setDepartment(stringMap.get("deptName").toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
ArrayList<String> data = new ArrayList<>();
|
|
|
data.add(record.getName());
|
|
|
+ data.add(record.getDepartment()==null?"未分配":record.getDepartment());
|
|
|
data.add(record.getStartTime()+" - "+record.getEndTime());
|
|
|
data.add(record.getQuotaInHours()+"h");
|
|
|
data.add(record.getUsedInHours()+"h");
|
|
|
data.add(record.getLeftInHours()+"h");
|
|
|
allList.add(data);
|
|
|
}
|
|
|
- dingDingLeaveQt = getDingDingLeaveQt(leaveCode, companyId, departmentId, userId, i);
|
|
|
+ dingDingLeaveQt = getDingDingLeaveQt(ddLeaveQtVo, i);
|
|
|
map = (HashMap)dingDingLeaveQt.data;
|
|
|
records = (List<LeaveQuotaNum>)map.get("records");
|
|
|
}
|