|
@@ -4,11 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.management.platform.entity.*;
|
|
|
import com.management.platform.entity.vo.DepartmentVO;
|
|
|
+import com.management.platform.entity.vo.UserMonthWork;
|
|
|
import com.management.platform.mapper.*;
|
|
|
import com.management.platform.service.DepartmentService;
|
|
|
+import com.management.platform.service.ReportProfessionProgressService;
|
|
|
import com.management.platform.service.ReportService;
|
|
|
+import com.management.platform.service.WxCorpInfoService;
|
|
|
+import com.management.platform.util.ExcelUtil;
|
|
|
import com.management.platform.util.HttpRespMsg;
|
|
|
import com.management.platform.util.ListUtil;
|
|
|
+import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
|
|
|
+import me.chanjar.weixin.mp.api.WxMpService;
|
|
|
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
|
|
|
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
|
|
|
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
|
|
|
import org.apache.poi.hssf.usermodel.*;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -26,6 +35,7 @@ import java.text.DecimalFormat;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.format.DateTimeParseException;
|
|
|
import java.util.*;
|
|
@@ -42,6 +52,29 @@ import java.util.stream.Collectors;
|
|
|
@Service
|
|
|
public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
|
|
|
|
|
|
+ @Value("${wx.template_report_pass}")
|
|
|
+ public String TEMPLATE_REPORT_PASS;
|
|
|
+ @Value("${wx.app_id}")
|
|
|
+ public String appId;
|
|
|
+ @Value("${wx.app_secret}")
|
|
|
+ public String appSecret;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ WxCorpInfoService wxCorpInfoService;
|
|
|
+ @Resource
|
|
|
+ WxCorpInfoMapper wxCorpInfoMapper;
|
|
|
+ @Resource
|
|
|
+ private InformationServiceImpl informationService;
|
|
|
+ @Resource
|
|
|
+ private ProjectNotifyUserMapper projectNotifyUserMapper;
|
|
|
+ @Resource
|
|
|
+ private ProfessionMapper professionMapper;
|
|
|
+ @Resource
|
|
|
+ private ReportProfessionProgressService reportProfessionProgressService;
|
|
|
+ @Resource
|
|
|
+ private ProjectProfessionMapper projectProfessionMapper;
|
|
|
+ @Resource
|
|
|
+ private CompanyMapper companyMapper;
|
|
|
@Resource
|
|
|
private ReportMapper reportMapper;
|
|
|
@Resource
|
|
@@ -64,6 +97,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
private TaskMapper taskMapper;
|
|
|
@Resource
|
|
|
private UserRecentTaskMapper userRecentTaskMapper;
|
|
|
+ @Resource
|
|
|
+ private PpMembsMapper ppMembsMapper;
|
|
|
|
|
|
@Value(value = "${upload.path}")
|
|
|
private String path;
|
|
@@ -173,9 +208,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//担任项目经理,查找相关的人员的日报
|
|
|
List<Map<String, Object>> puserNames = reportMapper.getReportNameByDate(date, user.getCompanyId(), leaderId);
|
|
|
List<Map<String, Object>> inchargeReportList= reportMapper.getInchargeReportByDate(date, leaderId, null);
|
|
|
- //先清空,防止自己填写的日报出现两次
|
|
|
- nameList = new ArrayList<>();
|
|
|
+
|
|
|
for (Map<String, Object> map2 : puserNames) {
|
|
|
+ if (nameList.size() > 0) {
|
|
|
+ String myUserId = (String)nameList.get(0).get("id");
|
|
|
+ if (myUserId.equals(map2.get("id"))) {
|
|
|
+ //自己的报告,之前已经添加过了,排重
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
nameList.add(map2);
|
|
|
//再根据人分别获取当天的报告
|
|
|
List<Map<String, Object>> list2 =
|
|
@@ -243,7 +284,27 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
DecimalFormat df = new DecimalFormat("0.00");
|
|
|
map.put("reportTime", df.format(reportTime));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ //处理项目专业进度的数据展示
|
|
|
+ if (companyMapper.selectById(user.getCompanyId()).getPackageEngineering() == 1) {
|
|
|
+ List<Profession> professions = professionMapper.selectList(new QueryWrapper<Profession>().eq("company_id", user.getCompanyId()));
|
|
|
+ if (professions.size() > 0) {
|
|
|
+ List<Integer> collect = professions.stream().map(Profession::getId).collect(Collectors.toList());
|
|
|
+ List<ReportProfessionProgress> allReportPPList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().in("profession_id", collect));
|
|
|
+ for (int i=0;i<nameList.size(); i++) {
|
|
|
+ Map<String, Object> userItem = nameList.get(i);
|
|
|
+ List<Map<String, Object>> data = (List<Map<String, Object>>)userItem.get("data");
|
|
|
+ data.forEach(d->{
|
|
|
+ int reportId = (int)d.get("id");
|
|
|
+ List<ReportProfessionProgress> progressList = allReportPPList.stream().filter(a -> a.getReportId() == reportId).collect(Collectors.toList());
|
|
|
+ progressList.forEach(p->{
|
|
|
+ p.setProfessionName(professions.stream().filter(m->m.getId().equals(p.getProfessionId())).findFirst().get().getName());
|
|
|
+ });
|
|
|
+ d.put("professionProgress", progressList);
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -285,10 +346,18 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
List<SubProject> subProjectList = integerList.size() > 0?subProjectMapper.selectList(new QueryWrapper<SubProject>().in("project_id",integerList)):new ArrayList<>();
|
|
|
|
|
|
List<UserRecentTask> taskList = integerList.size() > 0?userRecentTaskMapper.selectList(new QueryWrapper<UserRecentTask>().in("project_id", integerList).orderByDesc("id")):new ArrayList<>();
|
|
|
+ List<Profession> professions = professionMapper.selectList(new QueryWrapper<Profession>().eq("company_id", companyId));
|
|
|
+
|
|
|
//获取当前项目的子项目列表,任务列表
|
|
|
reports.forEach(r->{
|
|
|
r.setSubProjectList(subProjectList.stream().filter(s->s.getProjectId().equals(r.getProjectId())).collect(Collectors.toList()));
|
|
|
r.setTaskList(taskList.stream().filter(t->t.getProjectId().equals(r.getProjectId()) && t.getUserId().equals(r.getCreatorId())).collect(Collectors.toList()));
|
|
|
+ //获取当前项目的工程专业进度
|
|
|
+ List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", r.getId()));
|
|
|
+ progressList.stream().forEach(p->{
|
|
|
+ p.setProfessionName(professions.stream().filter(m->m.getId().equals(p.getProfessionId())).findFirst().get().getName());
|
|
|
+ });
|
|
|
+ r.setProfessionProgressList(progressList);
|
|
|
});
|
|
|
resultMap.put("report", reports);
|
|
|
//顺便再获取一下可分配时间
|
|
@@ -391,6 +460,35 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
.eq("creator_id", reportList.get(0).getCreatorId())
|
|
|
.notIn("id", idList));
|
|
|
}
|
|
|
+
|
|
|
+ int enginerring = companyMapper.selectById(companyId).getPackageEngineering();
|
|
|
+ if (enginerring == 1) {
|
|
|
+ //生成项目专业进度数据,更新个人的项目专业进度
|
|
|
+ List<ReportProfessionProgress> allList = new ArrayList<>();
|
|
|
+ List<Integer> reportIds = new ArrayList<>();
|
|
|
+ List<Integer> skipProfession = new ArrayList<>();
|
|
|
+ for (Report report : reportList) {
|
|
|
+ reportIds.add(report.getId());
|
|
|
+ List<ReportProfessionProgress> professionProgressList = report.getProfessionProgressList();
|
|
|
+ if (professionProgressList.size() > 0) {
|
|
|
+ professionProgressList.stream().forEach(p->p.setReportId(report.getId()));
|
|
|
+ allList.addAll(professionProgressList);
|
|
|
+ } else {
|
|
|
+ //没有相关的专业进度,直接进入部门审核
|
|
|
+ skipProfession.add(report.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ reportProfessionProgressService.remove(new QueryWrapper<ReportProfessionProgress>().in("report_id", reportIds));
|
|
|
+ if (allList.size() > 0) {
|
|
|
+ reportProfessionProgressService.saveBatch(allList);
|
|
|
+ }
|
|
|
+ if (skipProfession.size() > 0) {
|
|
|
+ Report r = new Report();
|
|
|
+ r.setDepartmentAuditState(0);
|
|
|
+ reportMapper.update(r, new QueryWrapper<Report>().in("id", skipProfession));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
|
|
@@ -398,8 +496,18 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
@Override
|
|
|
public HttpRespMsg deleteReport(String userId, String date) {
|
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ Company company = companyMapper.selectById(userMapper.selectById(userId).getCompanyId());
|
|
|
//某人删除自己某天的全部报告
|
|
|
- if (reportMapper.delete(new QueryWrapper<Report>().eq("creator_id", userId).eq("create_date", date)) == 0) {
|
|
|
+ QueryWrapper<Report> queryWrapper = new QueryWrapper<Report>().eq("creator_id", userId).eq("create_date", date);
|
|
|
+ List<Report> reportList = reportMapper.selectList(queryWrapper);
|
|
|
+ List<Integer> collect = reportList.stream().map(Report::getId).collect(Collectors.toList());
|
|
|
+ //删除日报相关的专业进度
|
|
|
+ if (company.getPackageEngineering() == 1) {
|
|
|
+ if (collect.size() > 0) {
|
|
|
+ reportProfessionProgressService.remove(new QueryWrapper<ReportProfessionProgress>().in("report_id", collect));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (reportMapper.delete(queryWrapper) == 0) {
|
|
|
httpRespMsg.setError("操作失败");
|
|
|
}
|
|
|
return httpRespMsg;
|
|
@@ -415,12 +523,13 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
|
|
|
User curUser = userMapper.selectById(request.getHeader("Token"));
|
|
|
Integer companyId = curUser.getCompanyId();
|
|
|
+ Integer isEngeering = companyMapper.selectById(companyId).getPackageEngineering();
|
|
|
String leaderId = null;
|
|
|
if (curUser.getRole() == 0) {//普通员工
|
|
|
leaderId = curUser.getId();
|
|
|
}
|
|
|
//根据权限,管理员查看全部人员的,各个项目负责人只看自己负责的项目参与人员的日报
|
|
|
- List<Map<String, Object>> nameList = reportMapper.getDetailByState(state, companyId, leaderId);
|
|
|
+ List<Map<String, Object>> nameList = reportMapper.getDetailByState(state, companyId, leaderId, isEngeering);
|
|
|
//按部门过滤
|
|
|
if (departmentId != null) {
|
|
|
nameList = nameList.stream().filter(map->((Long)map.get("departmentId")) == departmentId.longValue()).collect(Collectors.toList());
|
|
@@ -428,7 +537,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//按日期过滤
|
|
|
if (!StringUtils.isEmpty(date)) {
|
|
|
nameList = nameList.stream().filter(map->{
|
|
|
- System.out.println("已有数据日期=="+sdf.format((java.sql.Date)map.get("date"))+", 参数date="+date);
|
|
|
return (sdf.format((java.sql.Date)map.get("date"))).equals(date);
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|
|
@@ -437,7 +545,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
});
|
|
|
|
|
|
List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
|
|
|
-
|
|
|
+ List<Profession> professions = professionMapper.selectList(new QueryWrapper<Profession>().eq("company_id", curUser.getCompanyId()));
|
|
|
for (int index=0;index<nameList.size(); index++) {
|
|
|
Map<String, Object> map2 = nameList.get(index);
|
|
|
java.sql.Date createDate = (java.sql.Date)map2.get("date");
|
|
@@ -460,6 +568,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
nameList.remove(index);
|
|
|
index--;
|
|
|
} else {
|
|
|
+ //项目专业进度
|
|
|
+ for (Map<String, Object> map : list2) {
|
|
|
+ //获取当前项目的工程专业进度
|
|
|
+ List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", (int)map.get("id")));
|
|
|
+ progressList.stream().forEach(p->{
|
|
|
+ p.setProfessionName(professions.stream().filter(m->m.getId().equals(p.getProfessionId())).findFirst().get().getName());
|
|
|
+ });
|
|
|
+ map.put("professionProgressList", progressList);
|
|
|
+ }
|
|
|
map2.put("data", list2);
|
|
|
double reportTime = 0;
|
|
|
BigDecimal total = new BigDecimal(0);
|
|
@@ -488,8 +605,67 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
try {
|
|
|
User user = userMapper.selectById(request.getHeader("Token"));
|
|
|
- reportMapper.update(new Report().setState(1),
|
|
|
- new QueryWrapper<Report>().in("id", ListUtil.convertIdsArrayToList(reportIds)));
|
|
|
+ Company company = companyMapper.selectById(user.getCompanyId());
|
|
|
+ final List<Long> ids = ListUtil.convertIdsArrayToList(reportIds);
|
|
|
+ if (company.getPackageEngineering() == 1) {
|
|
|
+ //检查是否有专业进度待审核
|
|
|
+ List<ReportProfessionProgress> list = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", ids.get(0)).eq("audit_state", 0));
|
|
|
+ if (list.size() > 0) {
|
|
|
+ //专业待审核的状态,进行专业审核
|
|
|
+ List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
|
|
|
+ List<Integer> projectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<ProjectProfession> myProfessionList = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("incharger_id", user.getId()).in("project_id", projectIds));
|
|
|
+ if (myProfessionList.size() == 0) {
|
|
|
+ httpRespMsg.setError("只有专业负责人才能进行专业审核");
|
|
|
+ } else {
|
|
|
+ List<Integer> collect = myProfessionList.stream().map(ProjectProfession::getProfessionId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ ReportProfessionProgress item = new ReportProfessionProgress();
|
|
|
+ item.setAuditState(1);
|
|
|
+ reportProfessionProgressService.update(item, new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).in("profession_id", collect));
|
|
|
+
|
|
|
+ //全部的专业都审核通过的情况下,更新部门待审核状态
|
|
|
+ int count = reportProfessionProgressService.count(new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).ne("audit_state", 1));
|
|
|
+ if (count == 0) {
|
|
|
+ Report report = new Report();
|
|
|
+ report.setDepartmentAuditState(0);
|
|
|
+ reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Report report = reportMapper.selectById(ids.get(0));
|
|
|
+ //部门待审核,部门审核通过
|
|
|
+ if (report.getDepartmentAuditState() == 0) {
|
|
|
+ report = new Report();
|
|
|
+ report.setDepartmentAuditState(1);
|
|
|
+ reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
|
|
|
+ } else {
|
|
|
+ //最终进行项目经理审核
|
|
|
+ reportMapper.update(new Report().setState(1),
|
|
|
+ new QueryWrapper<Report>().in("id", ids));
|
|
|
+ List<Report> finalReportList = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
|
|
|
+ List<ReportProfessionProgress> professionProgressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().in("report_id", ids));
|
|
|
+
|
|
|
+ //审核通过时,才会更新到个人的专业进度上去
|
|
|
+ professionProgressList.forEach(pro->{
|
|
|
+ PpMembs memb = new PpMembs();
|
|
|
+ memb.setProgress(pro.getProgress());
|
|
|
+ Report report1 = finalReportList.stream().filter(f -> f.getId().equals(pro.getReportId())).findFirst().get();
|
|
|
+ Integer projectId = report1.getProjectId();
|
|
|
+ //更新个人在项目中的专业进度
|
|
|
+ ppMembsMapper.update(memb, new QueryWrapper<PpMembs>().eq("project_id", projectId)
|
|
|
+ .eq("memb_id", report1.getCreatorId()).eq("profession_id", pro.getProfessionId()));
|
|
|
+ });
|
|
|
+ notifyLeaders(finalReportList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //直接进行项目经理审核
|
|
|
+ reportMapper.update(new Report().setState(1),
|
|
|
+ new QueryWrapper<Report>().in("id", ids));
|
|
|
+ }
|
|
|
+
|
|
|
} catch (NullPointerException e) {
|
|
|
httpRespMsg.setError("验证失败");
|
|
|
return httpRespMsg;
|
|
@@ -497,15 +673,130 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
|
|
|
+ //审核通过需要通知相关领导
|
|
|
+ private void notifyLeaders(List<Report> reportList) {
|
|
|
+ List<Integer> collect = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
|
|
|
+ List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", collect));
|
|
|
+ List<ProjectNotifyUser> notifyUsers = projectNotifyUserMapper.selectList(new QueryWrapper<ProjectNotifyUser>().in("project_id", collect));
|
|
|
+ //没有设置相关领导
|
|
|
+ if (notifyUsers.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ List<Information> informationList = new ArrayList<>();
|
|
|
+ List<String> userIdList = new ArrayList<>();
|
|
|
+ notifyUsers.forEach(n->{
|
|
|
+ Information information = new Information();
|
|
|
+ information.setUserId(n.getUserId());
|
|
|
+ information.setType(3);
|
|
|
+ String projectName = projectList.stream().filter(p->p.getId().equals(n.getProjectId())).findFirst().get().getProjectName();
|
|
|
+ LocalDate createDate = reportList.stream().filter(r -> r.getProjectId().equals(n.getProjectId())).findFirst().get().getCreateDate();
|
|
|
+ String format = dft.format(createDate);
|
|
|
+ information.setContent(format);//日报的日期
|
|
|
+ information.setMsg(projectName+"项目,日报审批通过");
|
|
|
+ informationList.add(information);
|
|
|
+
|
|
|
+ userIdList.add(n.getUserId());
|
|
|
+
|
|
|
+ });
|
|
|
+ informationService.saveBatch(informationList);
|
|
|
+
|
|
|
+ //微信推送通知
|
|
|
+ List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", userIdList));
|
|
|
+ List<WxCorpInfo> companyWXList = wxCorpInfoMapper.selectList(new QueryWrapper<WxCorpInfo>().eq("company_id", projectList.get(0).getCompanyId()));
|
|
|
+ final WxCorpInfo wxCorpInfo = companyWXList.size()>0?companyWXList.get(0):null;
|
|
|
+
|
|
|
+ projectList.stream().forEach(p->{
|
|
|
+ final String msg = p.getProjectName() + "项目,日报审核通过";
|
|
|
+ notifyUsers.stream().filter(n -> n.getProjectId().equals(p.getId()))
|
|
|
+ .forEach(m->{
|
|
|
+ String uid = m.getUserId();
|
|
|
+ User user = userList.stream().filter(u -> u.getId().equals(uid)).findFirst().get();
|
|
|
+ //优先企业微信推送消息
|
|
|
+ if (wxCorpInfo != null && user.getCorpwxUserid() != null) {
|
|
|
+ wxCorpInfoService.sendWXCorpMsg(wxCorpInfo, user.getCorpwxUserid(), msg);
|
|
|
+ } else if (user.getWxOpenid() != null){
|
|
|
+ push(p.getProjectName(), user);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public boolean push(String projectName, User user) {
|
|
|
+ //1,配置
|
|
|
+ WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
|
|
|
+ wxStorage.setAppId(appId);
|
|
|
+ wxStorage.setSecret(appSecret);
|
|
|
+ WxMpService wxMpService = new WxMpServiceImpl();
|
|
|
+ wxMpService.setWxMpConfigStorage(wxStorage);
|
|
|
+
|
|
|
+ //2,推送消息
|
|
|
+ WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
|
|
|
+ .toUser(user.getWxOpenid())//要推送的用户openid
|
|
|
+ .templateId(TEMPLATE_REPORT_PASS)//模版id
|
|
|
+ .url("http://mobworktime.ttkuaiban.com/")//点击模版消息要访问的网址
|
|
|
+ .build();
|
|
|
+ //3,如果是正式版发送模版消息,这里需要配置你的信息
|
|
|
+ templateMessage.addData(new WxMpTemplateData("first", projectName + "项目,日报审核通过", "#FF00FF"));
|
|
|
+ templateMessage.addData(new WxMpTemplateData("keyword1", "工时报告审核", "#000000"));
|
|
|
+ templateMessage.addData(new WxMpTemplateData("keyword2", "审核通过", "#000000"));
|
|
|
+ templateMessage.addData(new WxMpTemplateData("keyword3", DateTimeFormatter.ofPattern("MM-dd HH:mm").format(LocalDateTime.now()), "#000000"));
|
|
|
+ templateMessage.addData(new WxMpTemplateData("remark", "请关注", "#000000"));
|
|
|
+ // templateMessage.addData(new WxMpTemplateData(name2, value2, color2));
|
|
|
+ try {
|
|
|
+ wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("推送失败:" + e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
//审核未通过 以及 撤销审核某天某人
|
|
|
@Override
|
|
|
public HttpRespMsg denyReport(String id, String date, String reportIds, HttpServletRequest request) {
|
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
try {
|
|
|
User user = userMapper.selectById(request.getHeader("Token"));
|
|
|
+ Company company = companyMapper.selectById(user.getCompanyId());
|
|
|
+ final List<Long> ids = ListUtil.convertIdsArrayToList(reportIds);
|
|
|
+
|
|
|
+ if (company.getPackageEngineering() == 1) {
|
|
|
+ //检查是否有专业进度待审核
|
|
|
+ List<ReportProfessionProgress> list = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", ids.get(0)).eq("audit_state", 0));
|
|
|
+
|
|
|
+ if (list.size() > 0) {
|
|
|
+ //只能是自己负责的专业
|
|
|
+ List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
|
|
|
+ List<Integer> projectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<ProjectProfession> myProfessionList = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("incharger_id", user.getId()).in("project_id", projectIds));
|
|
|
+ if (myProfessionList.size() == 0) {
|
|
|
+ httpRespMsg.setError("只有专业负责人才能进行专业审核");
|
|
|
+ } else {
|
|
|
+ List<Integer> collect = myProfessionList.stream().map(ProjectProfession::getProfessionId).collect(Collectors.toList());
|
|
|
+ //专业待审核的状态,进行专业审核驳回
|
|
|
+ ReportProfessionProgress item = new ReportProfessionProgress();
|
|
|
+ item.setAuditState(2);
|
|
|
+ reportProfessionProgressService.update(item, new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).in("profession_id", collect));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Report report = reportMapper.selectById(ids.get(0));
|
|
|
+ //部门待审核,部门审核驳回
|
|
|
+ if (report.getDepartmentAuditState() == 0) {
|
|
|
+ report = new Report();
|
|
|
+ report.setDepartmentAuditState(2);
|
|
|
+ reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //直接进行项目经理审核驳回
|
|
|
reportMapper.update(new Report().setState(2),
|
|
|
new QueryWrapper<Report>().in("id", ListUtil.convertIdsArrayToList(reportIds)));
|
|
|
informationMapper.insert(new Information().setType(0).setContent(date).setUserId(id));
|
|
|
+
|
|
|
} catch (NullPointerException e) {
|
|
|
httpRespMsg.setError("验证失败");
|
|
|
return httpRespMsg;
|
|
@@ -616,28 +907,102 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public HttpRespMsg batchApproveReport(String ids, HttpServletRequest request) {
|
|
|
- Report report = new Report();
|
|
|
- report.setState(1);
|
|
|
- int num = reportMapper.update(report, new QueryWrapper<Report>().in("id", ListUtil.convertIdsArrayToList(ids)));
|
|
|
- HttpRespMsg msg = new HttpRespMsg();
|
|
|
- if (num <= 0) {
|
|
|
- msg.setError("无数据更新");
|
|
|
+ public HttpRespMsg batchApproveReport(String reportIds, HttpServletRequest request) {
|
|
|
+ User user = userMapper.selectById(request.getHeader("Token"));
|
|
|
+ Company company = companyMapper.selectById(user.getCompanyId());
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ final List<Long> ids = ListUtil.convertIdsArrayToList(reportIds);
|
|
|
+ if (company.getPackageEngineering() == 1) {
|
|
|
+ //检查是否有专业进度待审核
|
|
|
+ List<ReportProfessionProgress> list = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", ids.get(0)).eq("audit_state", 0));
|
|
|
+ if (list.size() > 0) {
|
|
|
+ //专业待审核的状态,进行专业审核
|
|
|
+ List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
|
|
|
+ List<Integer> projectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<ProjectProfession> myProfessionList = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("incharger_id", user.getId()).in("project_id", projectIds));
|
|
|
+ if (myProfessionList.size() == 0) {
|
|
|
+ httpRespMsg.setError("只能专业负责人才能进行专业审核");
|
|
|
+ } else {
|
|
|
+ List<Integer> collect = myProfessionList.stream().map(ProjectProfession::getProfessionId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ ReportProfessionProgress item = new ReportProfessionProgress();
|
|
|
+ item.setAuditState(1);
|
|
|
+ reportProfessionProgressService.update(item, new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).in("profession_id", collect));
|
|
|
+
|
|
|
+ //全部的专业都审核通过的情况下,更新部门待审核状态
|
|
|
+ int count = reportProfessionProgressService.count(new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).ne("audit_state", 1));
|
|
|
+ if (count == 0) {
|
|
|
+ Report report = new Report();
|
|
|
+ report.setDepartmentAuditState(0);
|
|
|
+ reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Report report = reportMapper.selectById(ids.get(0));
|
|
|
+ //部门待审核,部门审核通过
|
|
|
+ if (report.getDepartmentAuditState() == 0) {
|
|
|
+ report = new Report();
|
|
|
+ report.setDepartmentAuditState(1);
|
|
|
+ reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
|
|
|
+ } else {
|
|
|
+ //直接进行项目经理审核
|
|
|
+ reportMapper.update(new Report().setState(1),
|
|
|
+ new QueryWrapper<Report>().in("id", ids));
|
|
|
+ List<Report> finalReportList = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
|
|
|
+ notifyLeaders(finalReportList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //直接进行项目经理审核
|
|
|
+ reportMapper.update(new Report().setState(1),
|
|
|
+ new QueryWrapper<Report>().in("id", ids));
|
|
|
}
|
|
|
- return msg;
|
|
|
+ return httpRespMsg;
|
|
|
}
|
|
|
|
|
|
|
|
|
@Override
|
|
|
- public HttpRespMsg batchDenyReport(String ids, HttpServletRequest request) {
|
|
|
- Report report = new Report();
|
|
|
- report.setState(2);
|
|
|
- int num = reportMapper.update(report, new QueryWrapper<Report>().in("id", ListUtil.convertIdsArrayToList(ids)));
|
|
|
- HttpRespMsg msg = new HttpRespMsg();
|
|
|
- if (num <= 0) {
|
|
|
- msg.setError("无数据更新");
|
|
|
+ public HttpRespMsg batchDenyReport(String reportIds, HttpServletRequest request) {
|
|
|
+ User user = userMapper.selectById(request.getHeader("Token"));
|
|
|
+ Company company = companyMapper.selectById(user.getCompanyId());
|
|
|
+ final List<Long> ids = ListUtil.convertIdsArrayToList(reportIds);
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ if (company.getPackageEngineering() == 1) {
|
|
|
+ //检查是否有专业进度待审核
|
|
|
+ List<ReportProfessionProgress> list = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", ids.get(0)).eq("audit_state", 0));
|
|
|
+
|
|
|
+ if (list.size() > 0) {
|
|
|
+ //只能是自己负责的专业
|
|
|
+ List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().in("id", ids));
|
|
|
+ List<Integer> projectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<ProjectProfession> myProfessionList = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("incharger_id", user.getId()).in("project_id", projectIds));
|
|
|
+ if (myProfessionList.size() == 0) {
|
|
|
+ httpRespMsg.setError("只能专业负责人才能进行专业审核");
|
|
|
+ } else {
|
|
|
+ List<Integer> collect = myProfessionList.stream().map(ProjectProfession::getProfessionId).collect(Collectors.toList());
|
|
|
+ //专业待审核的状态,进行专业审核驳回
|
|
|
+ ReportProfessionProgress item = new ReportProfessionProgress();
|
|
|
+ item.setAuditState(2);
|
|
|
+ reportProfessionProgressService.update(item, new QueryWrapper<ReportProfessionProgress>().in("report_id", ids).in("profession_id", collect));
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ Report report = reportMapper.selectById(ids.get(0));
|
|
|
+ //部门待审核,部门审核驳回
|
|
|
+ if (report.getDepartmentAuditState() == 0) {
|
|
|
+ report = new Report();
|
|
|
+ report.setDepartmentAuditState(2);
|
|
|
+ reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- return msg;
|
|
|
+ //直接进行项目经理审核驳回
|
|
|
+ reportMapper.update(new Report().setState(2),
|
|
|
+ new QueryWrapper<Report>().in("id", ListUtil.convertIdsArrayToList(reportIds)));
|
|
|
+
|
|
|
+ return httpRespMsg;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -673,6 +1038,294 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg listByStateProfession(Integer state, Integer departmentId, Integer projectId, String date, HttpServletRequest request) {
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ User curUser = userMapper.selectById(request.getHeader("Token"));
|
|
|
+ Integer companyId = curUser.getCompanyId();
|
|
|
+ String leaderId = curUser.getId();
|
|
|
+
|
|
|
+ //项目的专业负责人进行专业的审核
|
|
|
+ List<Map<String, Object>> nameList = reportMapper.getDetailByStateInMyProfession(state, companyId, leaderId);
|
|
|
+ //按部门过滤
|
|
|
+ if (departmentId != null) {
|
|
|
+ nameList = nameList.stream().filter(map->((Long)map.get("departmentId")) == departmentId.longValue()).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ //按日期过滤
|
|
|
+ if (!StringUtils.isEmpty(date)) {
|
|
|
+ nameList = nameList.stream().filter(map->{
|
|
|
+ System.out.println("已有数据日期=="+sdf.format((java.sql.Date)map.get("date"))+", 参数date="+date);
|
|
|
+ return (sdf.format((java.sql.Date)map.get("date"))).equals(date);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ nameList.forEach(n->{
|
|
|
+ n.put("dateStr",sdf.format((java.sql.Date)n.get("date")));
|
|
|
+ });
|
|
|
+ System.out.println("日报人员列表: "+nameList.size());
|
|
|
+ List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
|
|
|
+ List<Profession> professions = professionMapper.selectList(new QueryWrapper<Profession>().eq("company_id", curUser.getCompanyId()));
|
|
|
+ for (int index=0;index<nameList.size(); index++) {
|
|
|
+ Map<String, Object> map2 = nameList.get(index);
|
|
|
+ java.sql.Date createDate = (java.sql.Date)map2.get("date");
|
|
|
+ List<Map<String, Object>> list2 = null;
|
|
|
+ //获取相关项目的报告
|
|
|
+ List<Map<String, Object>> inchargeReportList= reportMapper.getProfessionInchargeReportByDate(createDate.toString(), leaderId, state);
|
|
|
+ System.out.println("人员日报列表:"+inchargeReportList.size());
|
|
|
+ list2 = inchargeReportList.stream().filter(i->i.get("creatorId").equals(map2.get("id"))).collect(Collectors.toList());
|
|
|
+ System.out.println("人员日报列表, 过滤后:"+list2.size());
|
|
|
+ //按项目过滤
|
|
|
+ if (projectId != null) {
|
|
|
+ list2 = list2.stream().filter(report->(((Integer)report.get("projectId")).equals(projectId))).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (list2.size() == 0) {
|
|
|
+ //被项目过滤掉了,没有数据。
|
|
|
+ nameList.remove(index);
|
|
|
+ index--;
|
|
|
+ } else {
|
|
|
+ //项目专业进度
|
|
|
+ for (Map<String, Object> map : list2) {
|
|
|
+ //获取当前项目的工程专业进度
|
|
|
+ List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", (int)map.get("id")));
|
|
|
+ progressList.stream().forEach(p->{
|
|
|
+ p.setProfessionName(professions.stream().filter(m->m.getId().equals(p.getProfessionId())).findFirst().get().getName());
|
|
|
+ });
|
|
|
+ map.put("professionProgressList", progressList);
|
|
|
+ }
|
|
|
+
|
|
|
+ map2.put("data", list2);
|
|
|
+ double reportTime = 0;
|
|
|
+ BigDecimal total = new BigDecimal(0);
|
|
|
+ for (Map<String, Object> m : list2) {
|
|
|
+ double t = (double) m.get("time");
|
|
|
+ reportTime += t;
|
|
|
+ total = total.add((BigDecimal)m.get("cost"));
|
|
|
+ }
|
|
|
+ DecimalFormat df = new DecimalFormat("0.00");
|
|
|
+ map2.put("reportTime", df.format(reportTime));
|
|
|
+ map2.put("cost", total);
|
|
|
+ map2.put("state", list2.get(0).get("state"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ httpRespMsg.data = nameList;
|
|
|
+ } catch (NullPointerException e) {
|
|
|
+ httpRespMsg.setError("验证失败");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg listByStateDepartment(Integer state, Integer projectId, String date, HttpServletRequest request) {
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ User curUser = userMapper.selectById(request.getHeader("Token"));
|
|
|
+ Integer departmentId = curUser.getManageDeptId();
|
|
|
+ Integer companyId = curUser.getCompanyId();
|
|
|
+
|
|
|
+ //根据权限,管理员查看全部人员的,各个项目负责人只看自己负责的项目参与人员的日报
|
|
|
+ List<Map<String, Object>> nameList = reportMapper.getDepartmentDetailByState(departmentId, companyId);
|
|
|
+
|
|
|
+ //按日期过滤
|
|
|
+ if (!StringUtils.isEmpty(date)) {
|
|
|
+ nameList = nameList.stream().filter(map->{
|
|
|
+ System.out.println("已有数据日期=="+sdf.format((java.sql.Date)map.get("date"))+", 参数date="+date);
|
|
|
+ return (sdf.format((java.sql.Date)map.get("date"))).equals(date);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ nameList.forEach(n->{
|
|
|
+ n.put("dateStr",sdf.format((java.sql.Date)n.get("date")));
|
|
|
+ });
|
|
|
+
|
|
|
+ List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
|
|
|
+ List<Profession> professions = professionMapper.selectList(new QueryWrapper<Profession>().eq("company_id", curUser.getCompanyId()));
|
|
|
+ for (int index=0;index<nameList.size(); index++) {
|
|
|
+ Map<String, Object> map2 = nameList.get(index);
|
|
|
+ java.sql.Date createDate = (java.sql.Date)map2.get("date");
|
|
|
+ List<Map<String, Object>> list2 = null;
|
|
|
+ list2 = reportMapper.getReportByDate(createDate.toString(), (String)map2.get("id"));
|
|
|
+ //按项目过滤
|
|
|
+ if (projectId != null) {
|
|
|
+ list2 = list2.stream().filter(report->(((Integer)report.get("projectId")).equals(projectId))).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (list2.size() == 0) {
|
|
|
+ //被项目过滤掉了,没有数据。
|
|
|
+ nameList.remove(index);
|
|
|
+ index--;
|
|
|
+ } else {
|
|
|
+ //项目专业进度
|
|
|
+ for (Map<String, Object> map : list2) {
|
|
|
+ //获取当前项目的工程专业进度
|
|
|
+ List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", (int)map.get("id")));
|
|
|
+ progressList.stream().forEach(p->{
|
|
|
+ p.setProfessionName(professions.stream().filter(m->m.getId().equals(p.getProfessionId())).findFirst().get().getName());
|
|
|
+ });
|
|
|
+ map.put("professionProgressList", progressList);
|
|
|
+ }
|
|
|
+
|
|
|
+ map2.put("data", list2);
|
|
|
+ double reportTime = 0;
|
|
|
+ BigDecimal total = new BigDecimal(0);
|
|
|
+ for (Map<String, Object> m : list2) {
|
|
|
+ double t = (double) m.get("time");
|
|
|
+ reportTime += t;
|
|
|
+ total = total.add((BigDecimal)m.get("cost"));
|
|
|
+ }
|
|
|
+ DecimalFormat df = new DecimalFormat("0.00");
|
|
|
+ map2.put("reportTime", df.format(reportTime));
|
|
|
+ map2.put("cost", total);
|
|
|
+ map2.put("state", list2.get(0).get("state"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ httpRespMsg.data = nameList;
|
|
|
+ } catch (NullPointerException e) {
|
|
|
+ httpRespMsg.setError("验证失败");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getUserDailyWorkTime(HttpServletRequest request, String month) {
|
|
|
+ String token = request.getHeader("TOKEN");
|
|
|
+ User user = userMapper.selectById(token);
|
|
|
+ Integer companyId = user.getCompanyId();
|
|
|
+
|
|
|
+ String startDate = month + "-01";
|
|
|
+ LocalDate ld = LocalDate.parse(startDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
+ int year = ld.getYear();
|
|
|
+ System.out.println("year = "+year);
|
|
|
+ boolean isLerpYear = false;
|
|
|
+ if (year%4==0&&year%100!=0) {
|
|
|
+ isLerpYear = true;
|
|
|
+ } else if (year%400==0) {
|
|
|
+ isLerpYear = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ int dm = ld.getMonthValue();
|
|
|
+ int maxDaysOfMonth = 28;
|
|
|
+ if (dm == 1 || dm == 3 || dm == 5 || dm == 7 || dm == 8 || dm == 10 || dm == 12) {
|
|
|
+ maxDaysOfMonth = 31;
|
|
|
+ } else if (dm == 2) {
|
|
|
+ if (isLerpYear) {
|
|
|
+ maxDaysOfMonth = 29;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ maxDaysOfMonth = 30;
|
|
|
+ }
|
|
|
+
|
|
|
+ String endDate = month + "-"+maxDaysOfMonth;
|
|
|
+ System.out.println("endDate=="+endDate);
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ List<Map<String, Object>> list = null;
|
|
|
+ //分角色权限:管理员看全部的,部门负责人看自己部门的,个人只能看自己的。
|
|
|
+ if (user.getRole() == 0) {
|
|
|
+ //检查是不是部门负责人
|
|
|
+ if (user.getManageDeptId() != null && user.getManageDeptId() != 0) {
|
|
|
+ List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
+ Department dp = allDepts.stream().filter(d->d.getDepartmentId().equals(user.getManageDeptId())).findFirst().get();
|
|
|
+ List<Department> subDepts = getSubDepts(dp, allDepts);
|
|
|
+ subDepts.add(dp);
|
|
|
+ List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
|
|
|
+ list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, collect, null);
|
|
|
+ } else {
|
|
|
+ //看自己的所负责的项目相关人员的
|
|
|
+ list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, user.getId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, null);
|
|
|
+ }
|
|
|
+ List<UserMonthWork> userMonthWorks = new ArrayList<UserMonthWork>();
|
|
|
+
|
|
|
+ String lastUserId = null;
|
|
|
+ UserMonthWork lastUserData = null;
|
|
|
+ for (Map<String, Object> data : list) {
|
|
|
+ String id = (String)data.get("id");
|
|
|
+ String name = (String)data.get("name");
|
|
|
+ String departmentName = (String) data.get("departmentName");
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ String date = new SimpleDateFormat("yyyy-MM-dd").format((Date)data.get("createDate"));
|
|
|
+
|
|
|
+ map.put("createDate", date);
|
|
|
+ map.put("workingTime", data.get("workingTime"));
|
|
|
+ if (id.equals(lastUserId)) {
|
|
|
+ //同一个用户的数据
|
|
|
+ lastUserData.worktimeList.add(map);
|
|
|
+ } else {
|
|
|
+ //生成新的数据
|
|
|
+ lastUserData = new UserMonthWork();
|
|
|
+ lastUserData.userId = id;
|
|
|
+ lastUserData.name = name;
|
|
|
+ lastUserData.departmentName = departmentName;
|
|
|
+ lastUserData.worktimeList = new ArrayList<>();
|
|
|
+ lastUserData.worktimeList.add(map);
|
|
|
+ userMonthWorks.add(lastUserData);
|
|
|
+ }
|
|
|
+ lastUserId = id;
|
|
|
+ }
|
|
|
+ HashMap map = new HashMap();
|
|
|
+ List<Integer> days = new ArrayList<>();
|
|
|
+ for (int i=1;i<=maxDaysOfMonth;i++) {
|
|
|
+ days.add(i);
|
|
|
+ }
|
|
|
+ map.put("days", days);
|
|
|
+ map.put("list", userMonthWorks);
|
|
|
+ msg.data = map;
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg exportUserDailyWorkTime(HttpServletRequest request, String month) {
|
|
|
+ HttpRespMsg msg = getUserDailyWorkTime(request, month);
|
|
|
+ String[] weekDayCHN = {"周一","周二","周三","周四","周五","周六","周日"};
|
|
|
+ HashMap map = (HashMap) msg.data;
|
|
|
+ List<Integer> days = (List<Integer>)map.get("days");
|
|
|
+ List<UserMonthWork> userMonthWorks = (List<UserMonthWork>) map.get("list");
|
|
|
+ List<List<String>> dataList = new ArrayList<>();
|
|
|
+ List<String> titleList = new ArrayList<>();
|
|
|
+ titleList.add("序号");
|
|
|
+ titleList.add("姓名");
|
|
|
+ days.forEach(d->{
|
|
|
+ String dateStr = month + "-" + (d<10?"0"+d:d);
|
|
|
+ LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
+ String chn = weekDayCHN[date.getDayOfWeek().getValue()-1];
|
|
|
+ String m = month.split("-")[1];
|
|
|
+ if (m.startsWith("0")) {
|
|
|
+ m = m.substring(1);
|
|
|
+ }
|
|
|
+ titleList.add(m+"."+d+"/"+chn);
|
|
|
+ });
|
|
|
+ dataList.add(titleList);
|
|
|
+ for (int i=0;i<userMonthWorks.size(); i++) {
|
|
|
+ UserMonthWork userMonthWork = userMonthWorks.get(i);
|
|
|
+ List<String> dataItem = new ArrayList<>();
|
|
|
+ dataItem.add(""+(i+1));
|
|
|
+ dataItem.add(userMonthWork.name);
|
|
|
+ //找到那一天的工作时间
|
|
|
+ List<Map<String, Object>> worktimeList = userMonthWork.worktimeList;
|
|
|
+ days.forEach(d->{
|
|
|
+ String dateStr = month + "-" + (d<10?"0"+d:d);
|
|
|
+ Optional<Map<String, Object>> op = worktimeList.stream().filter(m -> ((String) m.get("createDate")).equals(dateStr)).findFirst();
|
|
|
+ if (op.isPresent()) {
|
|
|
+ Map<String, Object> createDateHour = op.get();
|
|
|
+ dataItem.add(""+createDateHour.get("workingTime"));
|
|
|
+ } else {
|
|
|
+ dataItem.add("0");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ dataList.add(dataItem);
|
|
|
+ }
|
|
|
+ //生成excel文件导出
|
|
|
+ String fileName = "人员每日工时统计_"+month+"月"+System.currentTimeMillis();
|
|
|
+ String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ httpRespMsg.data = resp;
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+
|
|
|
private void fillDeptUser(List<DepartmentVO> list, List<HashMap> userList) {
|
|
|
list.forEach(l->{
|
|
|
List<HashMap> collect = userList.stream().filter(u -> u.get("departmentId").equals(l.getId())).collect(Collectors.toList());
|