Browse Source

工作端 - 短信通知

dev
zhangyongzhangyong 6 years ago
parent
commit
daa4ee7351
  1. 24
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java
  2. 18
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysUserDao.java
  3. 18
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java
  4. 14
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java
  5. 35
      esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysUserDao.xml
  6. 89
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/async/IssueOverseeResultsTask.java
  7. 15
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/impl/EpdcEventsServiceImpl.java
  8. 20
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/AdminFeignClient.java
  9. 10
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/fallback/AdminFeignClientFallback.java
  10. 9
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/dao/ItemDao.java
  11. 54
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java
  12. 16
      esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/item/ItemDao.xml

24
esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java

@ -322,4 +322,28 @@ public class SysUserController {
return new Result();
}
/**
* @Description: 根据部门id查询部门下的所有用户手机号
* @Param: [deptId]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<java.lang.String>>
* @Author: zy
* @Date: 2020-01-09
*/
@GetMapping("getUserPhoneByListDeptId")
public Result<List<String>> getUserPhoneByListDeptId(@RequestBody List<Long> deptId){
return sysUserService.getUserPhoneByListDeptId(deptId);
}
/**
* @Description: 根据议题网格ID查询拥有这个网格数据权限且是网格长的角色再根据角色查出所有用户手机号
* @Param: [deptId]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<java.lang.String>>
* @Author: zy
* @Date: 2020-01-09
*/
@GetMapping("getSysGridLeaderPhone/{deptId}")
public Result<List<String>> getSysGridLeaderPhone(@PathVariable("deptId") Long deptId){
return sysUserService.getSysGridLeaderPhone(deptId);
}
}

18
esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysUserDao.java

@ -87,4 +87,22 @@ public interface SysUserDao extends BaseDao<SysUserEntity> {
* 退出登录
*/
void updateUserOpenId(@Param("userId") Long userId);
/**
* @Description: 根据部门id查询部门下的所有用户手机号
* @Param: [map]
* @return: java.util.List<java.lang.String>
* @Author: zy
* @Date: 2020-01-09
*/
List<String> getUserPhoneByListDeptId(Map<String, Object> deptId);
/**
* @Description: 根据议题网格ID查询拥有这个网格数据权限且是网格长的角色再根据角色查出所有用户手机号
* @Param: [deptId]
* @return: java.util.List<java.lang.String>
* @Author: zy
* @Date: 2020-01-09
*/
List<String> getSysGridLeaderPhone(Long deptId);
}

18
esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java

@ -100,4 +100,22 @@ public interface SysUserService extends BaseService<SysUserEntity> {
* @return
*/
void updateUserOpenId(Long userId);
/**
* @Description: 根据部门id查询部门下的所有用户手机号
* @Param: [deptId]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<java.lang.String>>
* @Author: zy
* @Date: 2020-01-09
*/
Result<List<String>> getUserPhoneByListDeptId(List<Long> deptId);
/**
* @Description: 根据议题网格ID查询拥有这个网格数据权限且是网格长的角色再根据角色查出所有用户手机号
* @Param: [deptId]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<java.lang.String>>
* @Author: zy
* @Date: 2020-01-09
*/
Result<List<String>> getSysGridLeaderPhone(Long deptId);
}

14
esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java

@ -38,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -246,5 +247,18 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit
baseDao.updateUserOpenId(userId);
}
@Override
public Result<List<String>> getUserPhoneByListDeptId(List<Long> deptId) {
Map<String,Object> map = new HashMap<>();
map.put("deptId",deptId);
List<String> list = baseDao.getUserPhoneByListDeptId(map);
return new Result<List<String>>().ok(list);
}
@Override
public Result<List<String>> getSysGridLeaderPhone(Long deptId) {
return new Result<List<String>>().ok(baseDao.getSysGridLeaderPhone(deptId));
}
}

35
esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysUserDao.xml

@ -107,4 +107,39 @@
UPDATE sys_user SET open_id = '' WHERE id = #{userId} AND del_flag = 0
</update>
<!-- 根据部门id,查询部门下的所有用户手机号 -->
<select id="getUserPhoneByListDeptId" resultType="String">
SELECT
u.mobile mobile
FROM
sys_user u
where u.del_flag = 0
<if test="deptId != null">
AND u.dept_id in
<foreach collection="deptId" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<!-- 根据议题网格ID查询拥有这个网格数据权限且是网格长的角色,再根据角色查出所有用户手机号 -->
<select id="getSysGridLeaderPhone" parameterType="Long" resultType="String">
SELECT
c.mobile
FROM
(
SELECT DISTINCT
u.id,
u.mobile
FROM
sys_role r
LEFT JOIN sys_role_user ru ON r.id = ru.role_id
LEFT JOIN sys_user u ON ru.user_id = u.id
WHERE
r.DEL_FLAG = 0
AND u.DEL_FLAG = 0
AND r.type_key = 'gridLeader'
AND r.dept_id = #{deptId}
) c
</select>
</mapper>

89
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/async/IssueOverseeResultsTask.java

@ -1,11 +1,23 @@
package com.elink.esua.epdc.modules.async;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.constant.EventIssueItemState;
import com.elink.esua.epdc.constant.SysSmsTemplateConstant;
import com.elink.esua.epdc.dto.events.form.EpdcEventSubmitFormDTO;
import com.elink.esua.epdc.dto.events.form.EpdcEventsReviewFormDTO;
import com.elink.esua.epdc.dto.form.SmsNoticeFormDTO;
import com.elink.esua.epdc.dto.item.form.ItemHandleSubmitFormDTO;
import com.elink.esua.epdc.enums.ItemHandleCategoryEnum;
import com.elink.esua.epdc.modules.feign.AdminFeignClient;
import com.elink.esua.epdc.modules.feign.MessageFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.Future;
/**
*
* 议题审核结果 - 发送短信
@ -18,8 +30,11 @@ public class IssueOverseeResultsTask {
@Autowired
private MessageFeignClient messageFeignClient;
@Autowired
private AdminFeignClient adminFeignClient;
/**
* 议题待回应事件 审核结果短信通知 议题发起人
* 短信通知 关联
*
* @param smsNoticeFormDTO
* @return void
@ -30,4 +45,76 @@ public class IssueOverseeResultsTask {
public void sendSmsNotice(SmsNoticeFormDTO smsNoticeFormDTO) {
messageFeignClient.sendSmsNotice(smsNoticeFormDTO);
}
/**
* @Description: 根据部门id异步查询部门下的所有用户手机号
* @Description: 根据手机号进行短信推送
* @Param: [dto, deptId]
* @return: void
* @Author: zy
* @Date: 2020-01-09
*/
@Async
public void getUserPhoneByListDeptId(ItemHandleSubmitFormDTO dto, List<Long> deptId){
Result<List<String>> data = adminFeignClient.getUserPhoneByListDeptId(deptId);
if (data.success() && data.getData() != null && data.getData().size() > 0) {
this.projectSmsNotification(dto, data.getData());//向部门下的,所有人员发送短信
}
}
/**
* @Description: 根据议题网格ID 异步查询拥有这个网格数据权限且是网格长的角色再根据角色查出所有用户手机号
* @Description: 根据手机号进行短信推送
* @Param: [deptId]
* @return: void
* @Author: zy
* @Date: 2020-01-09
*/
@Async
public void getSysGridLeaderPhone(Long deptId){
Result<List<String>> data = adminFeignClient.getSysGridLeaderPhone(deptId);
if (data.success() && data.getData() != null && data.getData().size() > 0) {
this.issueSmsNotification(data.getData());//短信通知 所有有菜单权限的议题审核员
}
}
/**
* @Description: 工作端项目处理发送短信
* @Param: [dto]
* @Param: userId 用户手机号
* @return: void
* @Author: zy
* @Date: 2020-01-08
*/
public void projectSmsNotification(ItemHandleSubmitFormDTO dto, List<String> userMobiles){
// 审核操作发送短信
SmsNoticeFormDTO sms = new SmsNoticeFormDTO();
sms.setMobiles(userMobiles);
if (ItemHandleCategoryEnum.HANDLE_CLOSE.getValue() == dto.getHandleCategory()){
sms.setSmsTemplateType(SysSmsTemplateConstant.SMS_TEMPLATE_WORK_ITEM_CLOSED);// 关闭
}else if(ItemHandleCategoryEnum.HANDLE_CLOSING_CASE.getValue() == dto.getHandleCategory()){
sms.setSmsTemplateType(SysSmsTemplateConstant.SMS_TEMPLATE_WORK_ITEM_SETTLE);// 结案
}else if(ItemHandleCategoryEnum.HANDLE_CIRCULATION_ASSISTANCE.getValue() == dto.getHandleCategory()){
sms.setSmsTemplateType(SysSmsTemplateConstant.SMS_TEMPLATE_WORK_ITEM_WHISTLE);// 被吹哨
}else if(ItemHandleCategoryEnum.HANDLE_I_HANDLE.getValue() == dto.getHandleCategory()){
sms.setSmsTemplateType(SysSmsTemplateConstant.SMS_TEMPLATE_WORK_ITEM_WHISTLE_FEEDBACK);// 回应:吹哨反馈
}
this.sendSmsNotice(sms);
}
/**
* @Description: 工作端:议题议题发布短信通知 当前网格下的网格长
* @Param: [userMobiles] 手机号列表
* @return: void
* @Author: zy
* @Date: 2020-01-08
*/
private void issueSmsNotification(List<String> userMobiles){
// 审核操作发送短信
SmsNoticeFormDTO sms = new SmsNoticeFormDTO();
sms.setMobiles(userMobiles);
sms.setSmsTemplateType(SysSmsTemplateConstant.SMS_TEMPLATE_WORK_ISSUE_WAIT_REVIEW);//议题发布,状态为待审核
this.sendSmsNotice(sms);
}
}

15
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/impl/EpdcEventsServiceImpl.java

@ -156,6 +156,8 @@ public class EpdcEventsServiceImpl extends BaseServiceImpl<EpdcEventsDao, EpdcEv
// 发送菜单消息-议题待回应
this.sendMenuNoticeOfEventRespond(entity.getGridId(), null);
//短信通知 所有有菜单权限的议题审核员
issueOverseeResultsTask.getSysGridLeaderPhone(dto.getGridId());
return entity;
}
@ -250,7 +252,9 @@ public class EpdcEventsServiceImpl extends BaseServiceImpl<EpdcEventsDao, EpdcEv
this.sendMenuNoticeOfEventRespond(eventsEntity.getGridId(), null);
// 审核操作发送短信
this.issueSmsNotification(dto, eventsEntity.getMobile());
List<String> list = new ArrayList<>();
list.add(eventsEntity.getMobile());
this.issueSmsNotification(dto, list);
return new Result();
}
@ -520,18 +524,17 @@ public class EpdcEventsServiceImpl extends BaseServiceImpl<EpdcEventsDao, EpdcEv
}
/**
* @Description: 议题待回应事件 审核通过不通过短信通知 议题发起人
* @Description: 议题待回应事件菜单 审核通过不通过短信通知 议题发起人
* @Param: [dto]
* @Param: [userMobiles] 手机号列表
* @return: void
* @Author: zy
* @Date: 2020-01-08
*/
private void issueSmsNotification(EpdcEventsReviewFormDTO dto, String userMobiles){
List<String> list = new ArrayList<>();
list.add(userMobiles);
private void issueSmsNotification(EpdcEventsReviewFormDTO dto, List<String> userMobiles){
// 审核操作发送短信
SmsNoticeFormDTO sms = new SmsNoticeFormDTO();
sms.setMobiles(list);
sms.setMobiles(userMobiles);
if (EventIssueItemState.EVENT_REVIEW_PASS == dto.getEventState()) { // 审核通过
sms.setSmsTemplateType(SysSmsTemplateConstant.SMS_TEMPLATE_RESIDENTS_ISSUE_PASSED);
}else {

20
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/AdminFeignClient.java

@ -7,6 +7,7 @@ import com.elink.esua.epdc.dto.DeptGridPlatformDTO;
import com.elink.esua.epdc.dto.SysDeptDTO;
import com.elink.esua.epdc.modules.feign.fallback.AdminFeignClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@ -70,4 +71,23 @@ public interface AdminFeignClient {
@GetMapping("sys/deptgridplatform/selectByDeptId/{deptId}")
Result<DeptGridPlatformDTO> getDeptGridPlatformDTO(@PathVariable("deptId") String deptId);
/**
* @Description: 根据部门id查询部门下的所有用户手机号
* @Param: [deptId]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<java.lang.String>>
* @Author: zy
* @Date: 2020-01-09
*/
@GetMapping(value ="sys/user/getUserPhoneByListDeptId", consumes = MediaType.APPLICATION_JSON_VALUE)
Result<List<String>> getUserPhoneByListDeptId(List<Long> deptId);
/**
* @Description: 根据议题网格ID查询拥有这个网格数据权限且是网格长的角色再根据角色查出所有用户手机号
* @Param: [deptId]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<java.lang.String>>
* @Author: zy
* @Date: 2020-01-09
*/
@GetMapping("sys/user/getSysGridLeaderPhone/{deptId}")
Result<List<String>> getSysGridLeaderPhone(@PathVariable("deptId") Long deptId);
}

10
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/fallback/AdminFeignClientFallback.java

@ -44,4 +44,14 @@ public class AdminFeignClientFallback implements AdminFeignClient {
public Result<DeptGridPlatformDTO> getDeptGridPlatformDTO(String deptId) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "selectByDeptId", deptId);
}
@Override
public Result<List<String>> getUserPhoneByListDeptId(List<Long> deptId) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getUserPhoneByListDeptId", deptId);
}
@Override
public Result<List<String>> getSysGridLeaderPhone(@PathVariable("deptId") Long deptId) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getSysGridLeaderPhone", deptId);
}
}

9
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/dao/ItemDao.java

@ -206,4 +206,13 @@ public interface ItemDao extends BaseDao<ItemEntity> {
*/
void deleteBatchItemHandleIds(List<String> ids);
/**
* @Description: 根据项目id查询当前登录人所在部门以外的该项目关联的所有部门id
* @Param: [itemId] 项目id
* @Param: [deptId] 部门id
* @return: java.util.List<java.lang.Long>
* @Author: zy
* @Date: 2020-01-09
*/
List<Long> queryDeptIdList(String itemId, Long deptId);
}

54
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java

@ -85,6 +85,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* 项目表 项目表
@ -752,11 +755,15 @@ public class ItemServiceImpl extends BaseServiceImpl<ItemDao, ItemEntity> implem
if(dto.getHandleImages()!= null && dto.getHandleImages().size()>0){
imgService.saveImages(dto.getHandleImages(),handleProcessEntity.getId(), ImageConstant.TYPE_IMAGE_ITEM_HANDLE);
}
//项目关闭、结案-短信通知
//居民端项目关闭、结案-短信通知
if (ItemHandleCategoryEnum.HANDLE_CLOSE.getValue() == dto.getHandleCategory() ||
ItemHandleCategoryEnum.HANDLE_CLOSING_CASE.getValue() == dto.getHandleCategory()){
this.projectSmsNotification(dto,entity.getMobile());
List<String> list = new ArrayList<>();
list.add(entity.getMobile());
this.projectSmsNotification(dto,list);
}
//工作端 根据不同的处理方式,进行短信通知
this.workProjectHandle(dto);
} catch (Exception e) {
e.printStackTrace();
}
@ -1179,21 +1186,50 @@ public class ItemServiceImpl extends BaseServiceImpl<ItemDao, ItemEntity> implem
}
/**
* @Description: 待处理项目 关闭结案 短信通知 项目发起人
* @Param: [dto, userId]
* @Description: 工作端 根据项目的不同处理方式进行短信发放
* @Param: [dto]
* @return: void
* @Author: zy
* @Date: 2020-01-09
*/
private void workProjectHandle(ItemHandleSubmitFormDTO dto){
UserDetail user = SecurityUser.getUser(); //获取当前登录人信息
List<Long> deptId = new ArrayList<>();
if(ItemHandleCategoryEnum.HANDLE_CIRCULATION_ASSISTANCE.getValue() == dto.getHandleCategory()){
List<ItemCirculationDeptResultDTO> deptList = dto.getDeptResultDTOS();
for (int i =0; i < deptList.size(); i++) {
ItemCirculationDeptResultDTO indexDto = (ItemCirculationDeptResultDTO)deptList.get(i);
deptId.add(indexDto.getDeptId());
}
issueOverseeResultsTask.getUserPhoneByListDeptId(dto, deptId);//吹哨处理 向部门下的,所有人员发送短信
} else if(ItemHandleCategoryEnum.HANDLE_CLOSE.getValue() == dto.getHandleCategory() ||
ItemHandleCategoryEnum.HANDLE_CLOSING_CASE.getValue() == dto.getHandleCategory()){
deptId = baseDao.queryDeptIdList(dto.getId(),user.getDeptId());
issueOverseeResultsTask.getUserPhoneByListDeptId(dto, deptId);//关闭/结案 当前项目的所有部门ID,下的人员发送短信,且不等于当前部门ID
} else if(ItemHandleCategoryEnum.HANDLE_I_HANDLE.getValue() == dto.getHandleCategory()){
if (user.getTypeKey() != OrganizationTypeConstant.ORG_TYPE_GRID_PARTY){//回应
deptId = baseDao.queryDeptIdList(dto.getId(),0L);
issueOverseeResultsTask.getUserPhoneByListDeptId(dto, deptId);//当前登录人不是网格, 做回应处理,查询当前项目下的所有部门id,做去重处理,向部门下的所有人员发送短信
}
}
}
/**
* @Description: 居民端项目处理发送短信
* @Param: [dto]
* @Param: userId 用户手机号
* @return: void
* @Author: zy
* @Date: 2020-01-08
*/
private void projectSmsNotification(ItemHandleSubmitFormDTO dto, String userMobiles){
List<String> list = new ArrayList<>();
list.add(userMobiles);
public void projectSmsNotification(ItemHandleSubmitFormDTO dto, List<String> userMobiles){
// 审核操作发送短信
SmsNoticeFormDTO sms = new SmsNoticeFormDTO();
sms.setMobiles(list);
sms.setMobiles(userMobiles);
if (ItemHandleCategoryEnum.HANDLE_CLOSE.getValue() == dto.getHandleCategory()) { // 关闭
sms.setSmsTemplateType(SysSmsTemplateConstant.SMS_TEMPLATE_RESIDENTS_ITEM_CLOSED);
}else {
}else if (ItemHandleCategoryEnum.HANDLE_CLOSING_CASE.getValue() == dto.getHandleCategory()){ //结案
sms.setSmsTemplateType(SysSmsTemplateConstant.SMS_TEMPLATE_RESIDENTS_ITEM_SETTLE);
}
issueOverseeResultsTask.sendSmsNotice(sms);

16
esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/item/ItemDao.xml

@ -857,4 +857,20 @@
#{id}
</foreach>
</delete>
<select id="queryDeptIdList" resultType="Long">
SELECT
distinct d.DEPT_ID deptId
FROM
epdc_item_Dept d
WHERE
d.DEL_FLAG = 0
AND d.DEPT_ID != 0
<if test='deptId != 0 and deptId != null'>
AND d.DEPT_ID != #{deptId}
</if>
<if test='itemId != "" and itemId != null'>
AND d.ITEM_ID = #{itemId}
</if>
</select>
</mapper>

Loading…
Cancel
Save