|
|
@@ -14,6 +14,7 @@ import com.management.platform.service.*;
|
|
|
import com.management.platform.util.*;
|
|
|
import com.management.platform.webservice.po.*;
|
|
|
import lombok.SneakyThrows;
|
|
|
+import lombok.Synchronized;
|
|
|
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
|
|
|
import me.chanjar.weixin.mp.api.WxMpService;
|
|
|
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
|
|
|
@@ -340,14 +341,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//再根据人分别获取当天的报告
|
|
|
List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
|
|
|
BigDecimal total = new BigDecimal(0);
|
|
|
+ boolean abnormalTime = false;
|
|
|
for (Map<String, Object> report : reportList) {
|
|
|
if (((String)report.get("creatorId")).equals((String)memb.get("id"))) {
|
|
|
rList.add(report);
|
|
|
total = total.add((BigDecimal) report.get("cost"));
|
|
|
+ if(report.get("extraField1") != null && (int)report.get("extraField1") == 1) {
|
|
|
+ abnormalTime = true;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
memb.put("data", rList);
|
|
|
memb.put("cost", total);
|
|
|
+ memb.put("abnormalTime", abnormalTime);
|
|
|
double reportTime = 0;
|
|
|
if (rList.size() > 0) {
|
|
|
int state = 1;
|
|
|
@@ -1236,6 +1242,90 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取工作日考勤缺失的用户列表
|
|
|
+ * @param startDate
|
|
|
+ * @param endDate
|
|
|
+ * @param request
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getMissingCardTimeUserList(String startDate, String endDate, HttpServletRequest request) {
|
|
|
+ String token = request.getHeader("TOKEN");
|
|
|
+ User user = userMapper.selectById(token);
|
|
|
+ int companyId = user.getCompanyId();
|
|
|
+ TimeType timeType = timeTypeMapper.selectById(companyId);
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ LocalDate start = LocalDate.parse(startDate);
|
|
|
+ LocalDate end = LocalDate.parse(endDate);
|
|
|
+ //间隔不能超过31天
|
|
|
+ if (start.until(end, ChronoUnit.DAYS) > 31) {
|
|
|
+ msg.setError("日期间隔不能超过31天");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId)
|
|
|
+ .and(wrapper->wrapper.eq("is_active", 1)
|
|
|
+ .or(w2->w2.eq("is_active", 0).ge("inactive_date", startDate))));
|
|
|
+ List<UserWorkDayVO> retDataList = new ArrayList<>();
|
|
|
+ DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ if (timeType.getShowDdCardtime() == 1) {
|
|
|
+ List<UserDingdingTime> dingdingTimeList = userDingdingTimeMapper.selectList(new QueryWrapper<UserDingdingTime>().eq("company_id", companyId)
|
|
|
+ .between("work_date", startDate, endDate));
|
|
|
+ while (!start.isAfter(end)) {
|
|
|
+ if (WorkDayCalculateUtils.isWorkDay(start)) {
|
|
|
+ String startStr = df.format(start);
|
|
|
+ for (User curUser : userList) {
|
|
|
+ boolean find = dingdingTimeList.stream().anyMatch(time->time.getUserId().equals(curUser.getId()) && df.format(time.getWorkDate()).equals(startStr));
|
|
|
+ if (!find) {
|
|
|
+ UserWorkDayVO userCorpwxTime = new UserWorkDayVO();
|
|
|
+ userCorpwxTime.setUserId(curUser.getId());
|
|
|
+ userCorpwxTime.setUserName(curUser.getName());
|
|
|
+ userCorpwxTime.setWorkDate(startStr);
|
|
|
+ retDataList.add(userCorpwxTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ start = start.plusDays(1);
|
|
|
+ }
|
|
|
+ }else if(timeType.getSyncFanwei()==1){
|
|
|
+ List<UserFvTime> userFvTimeList = userFvTimeMapper.selectList(new QueryWrapper<UserFvTime>().eq("company_id", companyId)
|
|
|
+ .between("work_date", startDate, endDate));
|
|
|
+ while (start.isBefore(end)) {
|
|
|
+ String startStr = df.format(start);
|
|
|
+ for (User curUser : userList) {
|
|
|
+ boolean find = userFvTimeList.stream().anyMatch(time->time.getUserId().equals(curUser.getId()) && df.format(time.getWorkDate()).equals(startStr));
|
|
|
+ if (!find) {
|
|
|
+ UserWorkDayVO userCorpwxTime = new UserWorkDayVO();
|
|
|
+ userCorpwxTime.setUserId(curUser.getId());
|
|
|
+ userCorpwxTime.setUserName(curUser.getName());
|
|
|
+ userCorpwxTime.setWorkDate(startStr);
|
|
|
+ retDataList.add(userCorpwxTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ start = start.plusDays(1);
|
|
|
+ }
|
|
|
+ }else if (timeType.getSyncCorpwxTime() == 1) {
|
|
|
+ List<UserCorpwxTime> corpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("company_id", companyId)
|
|
|
+ .between("create_date", startDate, endDate));
|
|
|
+ while (start.isBefore(end)) {
|
|
|
+ String startStr = df.format(start);
|
|
|
+ for (User curUser : userList) {
|
|
|
+ boolean find = corpwxTimeList.stream().anyMatch(time -> time.getCorpwxUserid().equals(curUser.getCorpwxUserid()) && df.format(time.getCreateDate()).equals(startStr));
|
|
|
+ if (!find) {
|
|
|
+ UserWorkDayVO userCorpwxTime = new UserWorkDayVO();
|
|
|
+ userCorpwxTime.setUserId(curUser.getId());
|
|
|
+ userCorpwxTime.setUserName(curUser.getName());
|
|
|
+ userCorpwxTime.setWorkDate(startStr);
|
|
|
+ retDataList.add(userCorpwxTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ start = start.plusDays(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ msg.setData(retDataList);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
//新增或编辑报告
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@@ -1834,6 +1924,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
String name = (String)a.get("name");
|
|
|
String uid = (String)a.get("userId");
|
|
|
String corpwxUserid = (String)a.get("corpwxUserid");
|
|
|
+ boolean abnormalTime = a.get("extraField1") != null && (int)a.get("extraField1") == 1;
|
|
|
|
|
|
if (lastName == null || !(lastName.get("name").equals(name) && lastName.get("dateStr").equals(createDate))) {
|
|
|
lastName = new HashMap<String, Object>();
|
|
|
@@ -1841,6 +1932,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
lastName.put("name", name);
|
|
|
lastName.put("userId", uid);
|
|
|
lastName.put("corpwxUserid", corpwxUserid);
|
|
|
+ lastName.put("abnormalTime", abnormalTime);
|
|
|
nameList.add(lastName);
|
|
|
userDailyReportList = new ArrayList<>();
|
|
|
lastName.put("data", userDailyReportList);
|
|
|
@@ -2188,6 +2280,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
String uid = (String)a.get("userId");
|
|
|
String corpwxUserid = (String)a.get("corpwxUserid");
|
|
|
String fillUserName = (String)a.get("fillUserName");
|
|
|
+ boolean abnormalTime = a.get("extraField1") != null && (int)a.get("extraField1") == 1;
|
|
|
+
|
|
|
if (lastName == null || !(lastName.get("name").equals(name) && lastName.get("dateStr").equals(createDate))) {
|
|
|
lastName = new HashMap<String, Object>();
|
|
|
lastName.put("dateStr", createDate);
|
|
|
@@ -2195,6 +2289,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
lastName.put("userId", uid);
|
|
|
lastName.put("corpwxUserid", corpwxUserid);
|
|
|
lastName.put("fillUserName", fillUserName);
|
|
|
+ lastName.put("abnormalTime", abnormalTime);
|
|
|
nameList.add(lastName);
|
|
|
userDailyReportList = new ArrayList<>();
|
|
|
lastName.put("data", userDailyReportList);
|
|
|
@@ -2369,6 +2464,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
String multiDegrId = (String)report.get("multiDegrId");
|
|
|
if (multiDegrId != null) {
|
|
|
multiDegrId = multiDegrId.replace("@", ",");
|
|
|
+ System.out.println("multiDegrId=="+multiDegrId+", date="+map.get("dateStr")+", user="+map.get("userId")+", "+map.get("name"));
|
|
|
JSONArray array = JSONArray.parseArray(multiDegrId);
|
|
|
String s = "";
|
|
|
for (int i=0;i<array.size(); i++) {
|
|
|
@@ -4986,6 +5082,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
msg.data =reportFillStatus;
|
|
|
return msg;
|
|
|
@@ -5278,10 +5375,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
needRangeUserList.add(u);
|
|
|
}
|
|
|
}
|
|
|
- System.out.println("needRangeUserList:"+needRangeUserList.size());
|
|
|
List<UserMonthWork> userMonthWorks = new ArrayList<UserMonthWork>();
|
|
|
+ TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
|
|
|
//获取所有同步的企业微信数据
|
|
|
- List<UserCorpwxTime> userCorpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().between("create_date", LocalDate.parse(startDate, df), LocalDate.parse(endDate, df)).eq("company_id", user.getCompanyId()));
|
|
|
+ List<UserCorpwxTime> userCorpwxTimeList = new ArrayList<>();
|
|
|
+ List<UserDingdingTime> userDingdingTimeList = new ArrayList<>();
|
|
|
+ if (timeType.getSyncCorpwxTime() == 1) {
|
|
|
+ userCorpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().between("create_date", LocalDate.parse(startDate, df), LocalDate.parse(endDate, df)).eq("company_id", user.getCompanyId()));
|
|
|
+ } else if (timeType.getSyncDingding() == 1) {
|
|
|
+ userDingdingTimeList = userDingdingTimeMapper.selectList(new QueryWrapper<UserDingdingTime>().between("work_date", LocalDate.parse(startDate, df), LocalDate.parse(endDate, df)).eq("company_id", user.getCompanyId()));
|
|
|
+ }
|
|
|
String lastUserId = null;
|
|
|
UserMonthWork lastUserData = null;
|
|
|
for (Map<String, Object> data : list) {
|
|
|
@@ -5337,7 +5440,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
//对于全部的用户已填日报,对比请假的数据,进行填充
|
|
|
- TimeType timeType = timeTypeMapper.selectById(companyId);
|
|
|
//获取请假数据(本系统内的、钉钉和泛微同步的)
|
|
|
List<LeaveSheet> leaveSheets = null;
|
|
|
if (timeType.getSyncDingding() == 1||timeType.getSyncFanwei()==1 || company.getPackageOa() == 1) {
|
|
|
@@ -5353,35 +5455,69 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
for (UserMonthWork userMonthWork : userMonthWorks) {
|
|
|
List<Map<String, Object>> worktimeList = userMonthWork.worktimeList;
|
|
|
//获取到该员工请假的数据
|
|
|
- List<UserCorpwxTime> curUserCorpTime = userCorpwxTimeList.stream().filter(s->s.getCorpwxUserid() != null && s.getCorpwxUserid().equals(userMonthWork.corpwxUserId)).collect(Collectors.toList());
|
|
|
- curUserCorpTime.forEach(corpTime->{
|
|
|
- LocalDate wDate = corpTime.getCreateDate();
|
|
|
- String curWDateStr = df.format(wDate);
|
|
|
- double askLeaveTime = corpTime.getAskLeaveTime();
|
|
|
- Optional<Map<String, Object>> find = worktimeList.stream().filter(w->((String)w.get("createDate")).equals(curWDateStr)).findFirst();
|
|
|
- if (find.isPresent()) {
|
|
|
- //打卡的有记录,如果有请假,加上请假
|
|
|
- if (askLeaveTime > 0) {
|
|
|
- String newStr = (double)find.get().get("workingTime")+"("+MessageUtils.message("leave.leave")+(corpTime.getAskLeaveTime())+"h)";
|
|
|
- find.get().put("workingTime", newStr);
|
|
|
+ if (timeType.getSyncCorpwxTime() == 1) {
|
|
|
+ List<UserCorpwxTime> curUserCorpTime = userCorpwxTimeList.stream().filter(s->s.getCorpwxUserid() != null && s.getCorpwxUserid().equals(userMonthWork.corpwxUserId)).collect(Collectors.toList());
|
|
|
+ curUserCorpTime.forEach(corpTime->{
|
|
|
+ LocalDate wDate = corpTime.getCreateDate();
|
|
|
+ String curWDateStr = df.format(wDate);
|
|
|
+ double askLeaveTime = corpTime.getAskLeaveTime();
|
|
|
+ Optional<Map<String, Object>> find = worktimeList.stream().filter(w->((String)w.get("createDate")).equals(curWDateStr)).findFirst();
|
|
|
+ if (find.isPresent()) {
|
|
|
+ //打卡的有记录,如果有请假,加上请假
|
|
|
+ if (askLeaveTime > 0) {
|
|
|
+ String newStr = (double)find.get().get("workingTime")+"("+MessageUtils.message("leave.leave")+(corpTime.getAskLeaveTime())+"h)";
|
|
|
+ find.get().put("workingTime", newStr);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //没有对应的打卡记录,直接加上当天请假
|
|
|
+ if (askLeaveTime > 0) {
|
|
|
+ Map<String, Object> leaveMap = new HashMap<>();
|
|
|
+ leaveMap.put("createDate", curWDateStr);
|
|
|
+ leaveMap.put("workingTime", MessageUtils.message("leave.leaveOfDay")+corpTime.getAskLeaveTime()+"h");
|
|
|
+ worktimeList.add(leaveMap);
|
|
|
+ } else {
|
|
|
+ Map<String, Object> leaveMap = new HashMap<>();
|
|
|
+ leaveMap.put("createDate", curWDateStr);
|
|
|
+ leaveMap.put("workingTime", "漏填");
|
|
|
+ leaveMap.put("missReport", 1);
|
|
|
+ worktimeList.add(leaveMap);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- } else {
|
|
|
- //没有对应的打卡记录,直接加上当天请假
|
|
|
- if (askLeaveTime > 0) {
|
|
|
- Map<String, Object> leaveMap = new HashMap<>();
|
|
|
- leaveMap.put("createDate", curWDateStr);
|
|
|
- leaveMap.put("workingTime", MessageUtils.message("leave.leaveOfDay")+corpTime.getAskLeaveTime()+"h");
|
|
|
- worktimeList.add(leaveMap);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (timeType.getSyncDingding() == 1) {
|
|
|
+ List<UserDingdingTime> curUserTime = userDingdingTimeList.stream().filter(s->s.getUserId() != null && s.getUserId().equals(userMonthWork.userId)).collect(Collectors.toList());
|
|
|
+ curUserTime.forEach(corpTime->{
|
|
|
+ LocalDate wDate = corpTime.getWorkDate();
|
|
|
+ String curWDateStr = df.format(wDate);
|
|
|
+ double askLeaveTime = corpTime.getAskLeaveTime();
|
|
|
+ Optional<Map<String, Object>> find = worktimeList.stream().filter(w->((String)w.get("createDate")).equals(curWDateStr)).findFirst();
|
|
|
+ if (find.isPresent()) {
|
|
|
+ //打卡的有记录,如果有请假,加上请假
|
|
|
+ if (askLeaveTime > 0) {
|
|
|
+ String newStr = (double)find.get().get("workingTime")+"("+MessageUtils.message("leave.leave")+(corpTime.getAskLeaveTime())+"h)";
|
|
|
+ find.get().put("workingTime", newStr);
|
|
|
+ }
|
|
|
} else {
|
|
|
- Map<String, Object> leaveMap = new HashMap<>();
|
|
|
- leaveMap.put("createDate", curWDateStr);
|
|
|
- leaveMap.put("workingTime", "漏填");
|
|
|
- leaveMap.put("missReport", 1);
|
|
|
- worktimeList.add(leaveMap);
|
|
|
+ //没有对应的打卡记录,直接加上当天请假
|
|
|
+ if (askLeaveTime > 0) {
|
|
|
+ Map<String, Object> leaveMap = new HashMap<>();
|
|
|
+ leaveMap.put("createDate", curWDateStr);
|
|
|
+ leaveMap.put("workingTime", MessageUtils.message("leave.leaveOfDay")+corpTime.getAskLeaveTime()+"h");
|
|
|
+ worktimeList.add(leaveMap);
|
|
|
+ } else {
|
|
|
+ Map<String, Object> leaveMap = new HashMap<>();
|
|
|
+ leaveMap.put("createDate", curWDateStr);
|
|
|
+ leaveMap.put("workingTime", "漏填");
|
|
|
+ leaveMap.put("missReport", 1);
|
|
|
+ worktimeList.add(leaveMap);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
- });
|
|
|
|
|
|
//钉钉请假的数据
|
|
|
if ((timeType.getSyncDingding() == 1 || timeType.getSyncFanwei()==1 || company.getPackageOa() == 1)&& leaveSheets != null && leaveSheets.size() > 0) {
|
|
|
@@ -6615,7 +6751,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//titles.add("工作事项");
|
|
|
titles.add(MessageUtils.message("excel.workItems"));
|
|
|
}
|
|
|
- if(exportType==0 && (stateKey==1 || stateKey==0 || stateKey==2)){
|
|
|
+ if(exportType==0 && (stateKey==1 || stateKey==0 || stateKey==2 || stateKey == 3)){
|
|
|
//titles.add("审核状态");
|
|
|
titles.add(MessageUtils.message("excel.auditStatus"));
|
|
|
}
|
|
|
@@ -7148,15 +7284,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- if(exportType==0 && (stateKey==1 || stateKey ==0 || stateKey==2)){
|
|
|
+ if(exportType==0 && (stateKey==1 || stateKey ==0 || stateKey==2 || stateKey == 3)){
|
|
|
Integer state = (Integer) map.get("state");
|
|
|
switch (state){
|
|
|
//case 0:row.createCell(index).setCellValue("待审核");
|
|
|
+ case -1:item.add(MessageUtils.message("stages.reviewed"));//导入待审核
|
|
|
+ break;
|
|
|
case 0:item.add(MessageUtils.message("stages.reviewed"));
|
|
|
break;
|
|
|
//case 1:row.createCell(index).setCellValue("已通过");
|
|
|
case 1:item.add(MessageUtils.message("stages.passed"));
|
|
|
break;
|
|
|
+ case 3:item.add("待提交");
|
|
|
+ break;
|
|
|
case 99:
|
|
|
item.add("未提交");
|
|
|
break;
|
|
|
@@ -7211,8 +7351,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
if (exportType==0) {
|
|
|
Integer packageEngineering = company.getPackageEngineering();
|
|
|
if (packageEngineering.equals(0)) {
|
|
|
- if (String.valueOf(map.get("state")).equals("1")) {
|
|
|
+ if (String.valueOf(map.get("state")).equals("3")) {
|
|
|
item.add("——");
|
|
|
+ } else if (String.valueOf(map.get("state")).equals("1")) {
|
|
|
+ item.add("已通过");
|
|
|
} else if (String.valueOf(map.get("state")).equals("-1")) {
|
|
|
item.add("导入待审核");
|
|
|
} else {
|
|
|
@@ -12244,7 +12386,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
//维修部、三大中心、装配
|
|
|
List<Integer> produceDeptIdList = departmentList.stream().filter(dept->dept.getDepartmentName().equals("维修部") || dept.getDepartmentName().equals("北京中心")
|
|
|
- || dept.getDepartmentName().equals("上海中心") || dept.getDepartmentName().equals("武汉中心") || dept.getDepartmentName().equals("设备一部-装配")).map(Department::getDepartmentId).collect(Collectors.toList());
|
|
|
+ || dept.getDepartmentName().equals("上海中心") || dept.getDepartmentName().equals("武汉中心") || dept.getDepartmentName().equals("生产部")).map(Department::getDepartmentId).collect(Collectors.toList());
|
|
|
Integer rdDeptId = departmentList.stream().filter(dept->dept.getDepartmentName().equals("研发中心")).findFirst().get().getDepartmentId();
|
|
|
Integer cuServiceDeptId = departmentList.stream().filter(dept->dept.getDepartmentName().equals("售后部")).findFirst().get().getDepartmentId();
|
|
|
List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
|
|
|
@@ -12717,68 +12859,76 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
double time = 0;
|
|
|
if (!StringUtils.isEmpty(stringCellValue)) {
|
|
|
time = Double.parseDouble(stringCellValue);
|
|
|
- if (time >= 0) {
|
|
|
- Report report = new Report();
|
|
|
- report.setCompanyId(companyId);
|
|
|
- report.setCreatorId(reportCreator.getId());
|
|
|
- report.setDeptId(reportCreator.getDepartmentId());
|
|
|
- report.setProjectId(project.getId());
|
|
|
- report.setSubProjectId(subProjectId);
|
|
|
- report.setReportTimeType(1);
|
|
|
- report.setWorkingTime(time);
|
|
|
- report.setMultiWorktime(timeType.getMultiWorktime());
|
|
|
- report.setMultiDegrId(contentIds);
|
|
|
- report.setContent(workContent);
|
|
|
- if (timeType.getImportReportAuditNormal() == 0) {
|
|
|
- //老的导入日报审核模式
|
|
|
- if (timeType.getNeedDeptAudit() == 0) {
|
|
|
- report.setState(1);//导入的直接算审核通过
|
|
|
- } else {
|
|
|
- report.setState(-1);//待部门上级审核员审核
|
|
|
- report.setDepartmentAuditState(1);//部门已审核,到上层领导审核
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (time == 0) {
|
|
|
+ //从考勤中获取
|
|
|
+ UserDingdingTime dingdingTime = userDingdingTimeMapper.selectOne(new QueryWrapper<UserDingdingTime>()
|
|
|
+ .eq("user_id", reportCreator.getId()).eq("work_date", LocalDate.parse(reportDate, dtf)).last("limit 1"));
|
|
|
+ if (dingdingTime != null) {
|
|
|
+ time = dingdingTime.getWorkHours();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (time >= 0) {
|
|
|
+ Report report = new Report();
|
|
|
+ report.setCompanyId(companyId);
|
|
|
+ report.setCreatorId(reportCreator.getId());
|
|
|
+ report.setDeptId(reportCreator.getDepartmentId());
|
|
|
+ report.setProjectId(project.getId());
|
|
|
+ report.setSubProjectId(subProjectId);
|
|
|
+ report.setReportTimeType(1);
|
|
|
+ report.setWorkingTime(time);
|
|
|
+ report.setMultiWorktime(timeType.getMultiWorktime());
|
|
|
+ report.setMultiDegrId(contentIds);
|
|
|
+ report.setContent(workContent);
|
|
|
+ if (timeType.getImportReportAuditNormal() == 0) {
|
|
|
+ //老的导入日报审核模式
|
|
|
+ if (timeType.getNeedDeptAudit() == 0) {
|
|
|
+ report.setState(1);//导入的直接算审核通过
|
|
|
} else {
|
|
|
- report.setState(isPass?1:0);//正北,前端勾选了审核通过,直接设置为通过
|
|
|
- //目前仅支持项目审核人审核的模式
|
|
|
- if (timeType.getReportAuditType() == 0) {
|
|
|
- int mode = 0;
|
|
|
- if (company.getNonProjectSimple() == 1) {
|
|
|
- //启用了简易模式
|
|
|
- List<ProjectAuditor> pAuditorList = new ArrayList<>();
|
|
|
- if (project.getIsPublic() == 1) {
|
|
|
- //非项目,该员工的部门主要负责人审核
|
|
|
- mode = 1;
|
|
|
- //优先取员工的上级领导
|
|
|
- String superiorId = user.getSuperiorId();
|
|
|
- if (superiorId == null) {
|
|
|
- Integer departmentId = user.getDepartmentId();
|
|
|
- Department department = departmentMapper.selectById(departmentId);
|
|
|
- if (department != null) {
|
|
|
- superiorId = department.getManagerId();
|
|
|
- }
|
|
|
+ report.setState(-1);//待部门上级审核员审核
|
|
|
+ report.setDepartmentAuditState(1);//部门已审核,到上层领导审核
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ report.setState(isPass?1:0);//正北,前端勾选了审核通过,直接设置为通过
|
|
|
+ //目前仅支持项目审核人审核的模式
|
|
|
+ if (timeType.getReportAuditType() == 0) {
|
|
|
+ int mode = 0;
|
|
|
+ if (company.getNonProjectSimple() == 1) {
|
|
|
+ //启用了简易模式
|
|
|
+ List<ProjectAuditor> pAuditorList = new ArrayList<>();
|
|
|
+ if (project.getIsPublic() == 1) {
|
|
|
+ //非项目,该员工的部门主要负责人审核
|
|
|
+ mode = 1;
|
|
|
+ //优先取员工的上级领导
|
|
|
+ String superiorId = user.getSuperiorId();
|
|
|
+ if (superiorId == null) {
|
|
|
+ Integer departmentId = user.getDepartmentId();
|
|
|
+ Department department = departmentMapper.selectById(departmentId);
|
|
|
+ if (department != null) {
|
|
|
+ superiorId = department.getManagerId();
|
|
|
}
|
|
|
- report.setProjectAuditorId(superiorId);
|
|
|
}
|
|
|
+ report.setProjectAuditorId(superiorId);
|
|
|
}
|
|
|
- if (mode == 0) {
|
|
|
- //没有设置部门的审核人,按项目日报审核人设置
|
|
|
- List<ProjectAuditor> projectAuditors = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().eq("project_id", project.getId()));
|
|
|
- if (projectAuditors.size() > 0) {
|
|
|
- report.setProjectAuditorId(projectAuditors.get(0).getAuditorId());
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (mode == 0) {
|
|
|
+ //没有设置部门的审核人,按项目日报审核人设置
|
|
|
+ List<ProjectAuditor> projectAuditors = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().eq("project_id", project.getId()));
|
|
|
+ if (projectAuditors.size() > 0) {
|
|
|
+ report.setProjectAuditorId(projectAuditors.get(0).getAuditorId());
|
|
|
}
|
|
|
- report.setIsDeptAudit(0);
|
|
|
- report.setIsFinalAudit(1);
|
|
|
}
|
|
|
+ report.setIsDeptAudit(0);
|
|
|
+ report.setIsFinalAudit(1);
|
|
|
}
|
|
|
-
|
|
|
- report.setCreateDate(LocalDate.parse(reportDate, dtf));
|
|
|
- report.setCost(reportCreator.getCost()==null?new BigDecimal(0) : reportCreator.getCost().multiply(new BigDecimal(time)));
|
|
|
- reportList.add(report);
|
|
|
- } else if (time < 0) {
|
|
|
- msg.setError(MessageUtils.message("report.negativeError",username));
|
|
|
- return msg;
|
|
|
}
|
|
|
+
|
|
|
+ report.setCreateDate(LocalDate.parse(reportDate, dtf));
|
|
|
+ report.setCost(reportCreator.getCost()==null?new BigDecimal(0) : reportCreator.getCost().multiply(new BigDecimal(time)));
|
|
|
+ reportList.add(report);
|
|
|
+ } else if (time < 0) {
|
|
|
+ msg.setError(MessageUtils.message("report.negativeError",username));
|
|
|
+ return msg;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -13434,6 +13584,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
+ @Synchronized
|
|
|
public HttpRespMsg updateNoReportUserList(HttpServletRequest request, String startTime, String endTime,String createDate,Double leaveDuration, String corpwxUserId) {
|
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
try{
|
|
|
@@ -13484,6 +13635,35 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getAbnormalReportList(String startDate, String endDate, String userId, Integer pageIndex, Integer pageSize) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
|
|
|
+ Integer start=null;
|
|
|
+ Integer size=null;
|
|
|
+ if(pageIndex!=null&&pageSize!=null){
|
|
|
+ size=pageSize;
|
|
|
+ start=(pageIndex-1)*size;
|
|
|
+ }
|
|
|
+ List<Map<String,Object>> resultList = reportMapper.getAbnormalData(companyId,startDate,endDate,userId,start,size);
|
|
|
+ QueryWrapper<Report> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("company_id",companyId);
|
|
|
+ queryWrapper.between("create_date",startDate,endDate);
|
|
|
+ queryWrapper.eq("extra_field1", 1);//异常工时的标记
|
|
|
+ if(!StringUtils.isEmpty(userId)){
|
|
|
+ queryWrapper.eq("creator_id",userId);
|
|
|
+ }
|
|
|
+ Integer count = reportMapper.selectCount(queryWrapper);
|
|
|
+ Map<String,Object> map=new HashMap<>();
|
|
|
+ map.put("result",resultList);
|
|
|
+ map.put("total",count);
|
|
|
+ map.put("pageIndex",pageIndex);
|
|
|
+ map.put("pageSize",pageSize);
|
|
|
+ msg.setData(map);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
public String getWeek(DayOfWeek dayOfWeek){
|
|
|
//获取中文形式的星期几
|
|
|
String dayOfWeekChinese = "";
|