diff --git a/epmet-gateway/pom.xml b/epmet-gateway/pom.xml index b8157a9836..8b46ae7845 100644 --- a/epmet-gateway/pom.xml +++ b/epmet-gateway/pom.xml @@ -288,10 +288,11 @@ lb://gov-issue-server - - lb://gov-project-server + http://localhost:8102 + - lb://common-service-server + + http://localhost:8103 lb://resi-home-server diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/CostDayFormDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/CostDayFormDTO.java index 5c1c27395a..487a596d09 100644 --- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/CostDayFormDTO.java +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/CostDayFormDTO.java @@ -3,6 +3,7 @@ package com.epmet.dto.form; import lombok.Data; import java.io.Serializable; +import java.util.Date; /** * @author zhaoqifeng @@ -25,10 +26,10 @@ public class CostDayFormDTO implements Serializable { /** * 起始日期 */ - private String startDate; + private Date startDate; /** * 终止日期 */ - private String endDate; + private Date endDate; } diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/CostDayResultDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/CostDayResultDTO.java index 27074d8c8f..7087768d4b 100644 --- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/CostDayResultDTO.java +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/CostDayResultDTO.java @@ -3,6 +3,7 @@ package com.epmet.dto.result; import lombok.Data; import java.io.Serializable; +import java.util.Date; /** * @author zhaoqifeng @@ -27,5 +28,10 @@ public class CostDayResultDTO implements Serializable { */ private Integer detentionDays; + /** + * 起始日期 + */ + private Date startDate; + } diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/EpmetCommonServiceOpenFeignClient.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/EpmetCommonServiceOpenFeignClient.java index 7b718fb2e3..eac60c806a 100644 --- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/EpmetCommonServiceOpenFeignClient.java +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/EpmetCommonServiceOpenFeignClient.java @@ -21,8 +21,8 @@ import java.util.List; * @author yinzuomei@elink-cn.com * @date 2020/6/4 10:28 */ -@FeignClient(name = ServiceConstant.EPMET_COMMON_SERVICE, fallback = EpmetCommonServiceOpenFeignClientFallback.class) -//@FeignClient(name = ServiceConstant.EPMET_COMMON_SERVICE, fallback = EpmetCommonServiceOpenFeignClientFallback.class, url = "http://localhost:8103") +//@FeignClient(name = ServiceConstant.EPMET_COMMON_SERVICE, fallback = EpmetCommonServiceOpenFeignClientFallback.class) +@FeignClient(name = ServiceConstant.EPMET_COMMON_SERVICE, fallback = EpmetCommonServiceOpenFeignClientFallback.class, url = "http://localhost:8103") public interface EpmetCommonServiceOpenFeignClient { /** * @param formDTO diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java index 8a15b3b0f3..9830aeee1a 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java @@ -1,6 +1,7 @@ package com.epmet.service.impl; import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.utils.DateUtils; import com.epmet.dao.CalenderDao; import com.epmet.dto.form.CostDayFormDTO; import com.epmet.dto.form.WorkDayFormDTO; @@ -65,6 +66,7 @@ public class WorkDayServiceImpl implements WorkDayService { result.setId(form.getId()); result.setStaffId(form.getStaffId()); result.setDetentionDays(this.getWorkDays(form.getStartDate(), form.getEndDate())); + result.setStartDate(form.getStartDate()); list.add(result); } return list; @@ -89,6 +91,7 @@ public class WorkDayServiceImpl implements WorkDayService { result.setId(form.getId()); result.setStaffId(form.getStaffId()); result.setDetentionDays(this.getCalendarDays(form.getStartDate(), form.getEndDate())); + result.setStartDate(form.getStartDate()); list.add(result); } return list; @@ -128,7 +131,9 @@ public class WorkDayServiceImpl implements WorkDayService { } - private Integer getWorkDays(String startDateStr, String endDateStr) { + private Integer getWorkDays(Date start, Date end) { + String startDateStr = DateUtils.format(start, DateUtils.DATE_PATTERN_YYYYMMDD); + String endDateStr = DateUtils.format(end, DateUtils.DATE_PATTERN_YYYYMMDD); if (startDateStr.equals(endDateStr)) { logger.info(String.format("%s-%s起止时间一致,返回<1,",startDateStr,endDateStr)); return 0; @@ -158,7 +163,9 @@ public class WorkDayServiceImpl implements WorkDayService { } - private Integer getCalendarDays(String startDateStr, String endDateStr) { + private Integer getCalendarDays(Date start, Date end) { + String startDateStr = DateUtils.format(start, DateUtils.DATE_PATTERN_YYYYMMDD); + String endDateStr = DateUtils.format(end, DateUtils.DATE_PATTERN_YYYYMMDD); if (startDateStr.equals(endDateStr)) { logger.info(String.format("%s-%s起止时间一致,返回<1,",startDateStr,endDateStr)); return 0; diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/OverdueAndDelayDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/OverdueAndDelayDTO.java new file mode 100644 index 0000000000..93434edacc --- /dev/null +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/OverdueAndDelayDTO.java @@ -0,0 +1,28 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author zhaoqifeng + * @dscription + * @date 2020/10/22 15:45 + */ +@Data +public class OverdueAndDelayDTO implements Serializable { + private static final long serialVersionUID = -3632539647818460833L; + /** + * 工作人员ID + */ + private String staffId; + /** + * 即将超期 + */ + private List overdueList; + /** + * 滞留 + */ + private List delayList; +} diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/StaffUnHandledDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/StaffUnHandledDTO.java index 1a2c4e0971..7f19ab6754 100644 --- a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/StaffUnHandledDTO.java +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/StaffUnHandledDTO.java @@ -14,9 +14,13 @@ import java.util.Date; public class StaffUnHandledDTO implements Serializable { private static final long serialVersionUID = 5257146338113364709L; /** - * 项目ID + * project_staff ID */ private String id; + /** + * 项目ID + */ + private String projectId; /** * 项目标题 */ diff --git a/epmet-module/gov-project/gov-project-server/pom.xml b/epmet-module/gov-project/gov-project-server/pom.xml index 1d80b96d6b..25c9ca4e29 100644 --- a/epmet-module/gov-project/gov-project-server/pom.xml +++ b/epmet-module/gov-project/gov-project-server/pom.xml @@ -54,6 +54,12 @@ com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config + + org.apache.commons + commons-collections4 + 4.3 + compile + io.github.openfeign diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/UserMessageConstant.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/UserMessageConstant.java index 756a599ac3..9b0882e2cf 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/UserMessageConstant.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/UserMessageConstant.java @@ -21,4 +21,35 @@ public interface UserMessageConstant { */ String PROJECT_CLOSED_MSG = "您好,您参与的【%s】项目已结案,原因:%s"; + + /** + * 滞留超期消息标题 + */ + String STAY_REMINDER_TITLE_1 = "您有%d个项目即将超期,%d个项目已经滞留"; + + /** + * 滞留超期消息模板 + */ + String STAY_REMINDER_MSG_1 = "即将超期项目:%n%s 滞留项目:%n%s"; + + /** + * 滞留超期消息标题 + */ + String STAY_REMINDER_TITLE_2 = "您有%d个项目即将超期"; + + /** + * 滞留超期消息模板 + */ + String STAY_REMINDER_MSG_2 = "即将超期项目:%n%s"; + + /** + * 滞留超期消息标题 + */ + String STAY_REMINDER_TITLE_3 = "您有%d个项目已经滞留"; + + /** + * 滞留超期消息模板 + */ + String STAY_REMINDER_MSG_3 = "滞留项目:%n%s"; + } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectController.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectController.java index 5ccc25b279..0d500784db 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectController.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectController.java @@ -151,5 +151,10 @@ public class ProjectController { List result = projectService.getPendProjectList(fromDTO); return new Result>().ok(result); } + @PostMapping("message") + public Result sendMessage(@RequestBody ProjectDTO formDTO) { + projectService.sendMessage(formDTO.getCustomerId()); + return new Result(); + } } \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java index f6eeccd013..ed8bff2d21 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java @@ -20,10 +20,7 @@ package com.epmet.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; -import com.epmet.commons.tools.constant.AppClientConstant; -import com.epmet.commons.tools.constant.Constant; -import com.epmet.commons.tools.constant.FieldConstant; -import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.constant.*; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; @@ -48,6 +45,7 @@ import com.epmet.entity.ProjectStaffEntity; import com.epmet.feign.*; import com.epmet.redis.ProjectRedis; import com.epmet.service.*; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -732,7 +730,7 @@ public class ProjectServiceImpl extends BaseServiceImpl NumConstant.ZERO) { + if (CollectionUtils.isNotEmpty(paramList)) { for (CustomerProjectParameterDTO dto : paramList) { if (ParameterKeyConstant.DETENTION_DAYS.equals(dto.getParameterKey())) { detentionDays = Integer.parseInt(dto.getParameterValue()); @@ -748,35 +746,133 @@ public class ProjectServiceImpl extends BaseServiceImpl unHandledList = projectStaffService.getStaffUnHandledList(customerId); - List formDTOS = unHandledList.stream().map(item -> { + List form = unHandledList.stream().map(item -> { CostDayFormDTO dto = new CostDayFormDTO(); dto.setId(item.getId()); dto.setStaffId(item.getStaffId()); if (null != item.getUpdatedTime()) { - dto.setStartDate(DateUtils.format(item.getUpdatedTime(), DateUtils.DATE_PATTERN_YYYYMMDD)); + dto.setStartDate(item.getUpdatedTime()); } else { - dto.setStartDate(DateUtils.format(item.getCreatedTime(), DateUtils.DATE_PATTERN_YYYYMMDD)); + dto.setStartDate(item.getCreatedTime()); } - dto.setEndDate(DateUtils.format(new Date(), DateUtils.DATE_PATTERN_YYYYMMDD)); + dto.setEndDate(new Date()); return dto; }).collect(Collectors.toList()); - List costDayList = new ArrayList<>(); + List costDayList; if (ParameterKeyConstant.WORK.equals(calculation)) { //工作日计算 - Result> result = epmetCommonServiceOpenFeignClient.costWorkDays(formDTOS); + Result> result = epmetCommonServiceOpenFeignClient.costWorkDays(form); if (!result.success()) { throw new RenException(result.getCode(), result.getMsg()); } costDayList = result.getData(); } else { //日历日计算 - Result> result = epmetCommonServiceOpenFeignClient.costCalendarDays(formDTOS); + Result> result = epmetCommonServiceOpenFeignClient.costCalendarDays(form); if (!result.success()) { throw new RenException(result.getCode(), result.getMsg()); } costDayList = result.getData(); } + //即将超期项目 + List overdueList = new ArrayList<>(); + //滞留项目 + List delayList = new ArrayList<>(); + List finalCostDayList = costDayList; + List list = new ArrayList<>(); + int finalDetentionDays = detentionDays; + int finalRemindTime = remindTime; + unHandledList.forEach(unHandle -> finalCostDayList.stream().filter(cost -> + unHandle.getId().equals(cost.getId())).forEach(item -> { + int diff = finalDetentionDays - item.getDetentionDays(); + OverdueAndDelayDTO dto = new OverdueAndDelayDTO(); + if (diff < 0) { + dto.setStaffId(unHandle.getStaffId()); + list.add(dto); + delayList.add(unHandle); + } else if (diff <= finalRemindTime) { + dto.setStaffId(unHandle.getStaffId()); + overdueList.add(unHandle); + list.add(dto); + } + })); + if (CollectionUtils.isNotEmpty(list)) { + setMessage(customerId, overdueList, delayList, list); + } + } + private void setMessage(String customerId, List overdueList, List delayList, List list) { + list = list.stream().distinct().collect(Collectors.toList()); + Map> overdueMap = overdueList.stream().collect(Collectors.groupingBy(StaffUnHandledDTO::getStaffId)); + Map> delayMap = delayList.stream().collect(Collectors.groupingBy(StaffUnHandledDTO::getStaffId)); + + List overdue = overdueMap.entrySet().stream().map(item -> { + OverdueAndDelayDTO dto = new OverdueAndDelayDTO(); + dto.setStaffId(item.getKey()); + dto.setOverdueList(item.getValue()); + return dto; + }).collect(Collectors.toList()); + List delay = delayMap.entrySet().stream().map(item -> { + OverdueAndDelayDTO dto = new OverdueAndDelayDTO(); + dto.setStaffId(item.getKey()); + dto.setDelayList(item.getValue()); + return dto; + }).collect(Collectors.toList()); + + list.forEach(dto -> overdue.forEach(item -> { + if (dto.getStaffId().equals(item.getStaffId())) { + dto.setOverdueList(item.getOverdueList()); + } + })); + + list.forEach(dto -> delay.forEach(item -> { + if (dto.getStaffId().equals(item.getStaffId())) { + dto.setDelayList(item.getDelayList()); + } + })); + //通知 + List msgList = new ArrayList<>(); + list.forEach(dto -> { + String title; + String msg; + if (CollectionUtils.isNotEmpty(dto.getOverdueList()) && CollectionUtils.isNotEmpty(dto.getDelayList())) { + title = String.format(UserMessageConstant.STAY_REMINDER_TITLE_1, dto.getOverdueList().size(), dto.getDelayList().size()); + StringBuilder overdueMsg = new StringBuilder(); + StringBuilder delayMsg = new StringBuilder(); + for (int i = 0; i < dto.getOverdueList().size(); i++) { + overdueMsg.append(i + 1).append(StrConstant.COMMA_ZH).append(dto.getOverdueList().get(i).getTitle()).append("\n"); + } + for (int i = 0; i < dto.getDelayList().size(); i++) { + delayMsg.append(i + 1).append(StrConstant.COMMA_ZH).append(dto.getDelayList().get(i).getTitle()).append("\n"); + } + msg = String.format(UserMessageConstant.STAY_REMINDER_MSG_1, overdueMsg.toString(), delayMsg.toString()); + } else if (CollectionUtils.isNotEmpty(dto.getOverdueList()) && CollectionUtils.isEmpty(dto.getDelayList())) { + title = String.format(UserMessageConstant.STAY_REMINDER_TITLE_2, dto.getOverdueList().size()); + StringBuilder overdueMsg = new StringBuilder(); + for (int i = 0; i < dto.getOverdueList().size(); i++) { + overdueMsg.append(i + 1).append(StrConstant.COMMA_ZH).append(dto.getOverdueList().get(i).getTitle()).append("\n"); + } + msg = String.format(UserMessageConstant.STAY_REMINDER_MSG_2, overdueMsg.toString()); + } else { + title = String.format(UserMessageConstant.STAY_REMINDER_TITLE_3, dto.getDelayList().size()); + StringBuilder delayMsg = new StringBuilder(); + for (int i = 0; i < dto.getDelayList().size(); i++) { + delayMsg.append(i + 1).append(StrConstant.COMMA_ZH).append(dto.getDelayList().get(i).getTitle()).append("\n"); + } + msg = String.format(UserMessageConstant.STAY_REMINDER_MSG_3, delayMsg.toString()); + } + UserMessageFormDTO messageFormDTO = new UserMessageFormDTO(); + messageFormDTO.setCustomerId(customerId); + messageFormDTO.setApp(ProjectConstant.GOV); + messageFormDTO.setGridId(StrConstant.STAR); + messageFormDTO.setUserId(dto.getStaffId()); + messageFormDTO.setTitle(title); + messageFormDTO.setMessageContent(msg); + messageFormDTO.setReadFlag(Constant.UNREAD); + msgList.add(messageFormDTO); + }); + System.out.println(msgList); + messageFeignClient.saveUserMessageList(msgList); } } \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectStaffServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectStaffServiceImpl.java index 7285388e35..4411a870fa 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectStaffServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectStaffServiceImpl.java @@ -166,7 +166,7 @@ public class ProjectStaffServiceImpl extends BaseServiceImpl getStaffUnHandledList(String customerId) { - return null; + return baseDao.getStaffUnHandledList(customerId); } } \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml index 163ad63238..6435a5df80 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml +++ b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml @@ -67,7 +67,8 @@