PkMaintenanceWarningServiceImpl.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package com.malk.pake.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.malk.pake.service.PkMaintenanceWarningService;
  4. import com.malk.server.aliwork.YDConf;
  5. import com.malk.server.aliwork.YDParam;
  6. import com.malk.service.aliwork.YDClient;
  7. import com.malk.service.dingtalk.DDClient;
  8. import com.malk.service.dingtalk.DDClient_Notice;
  9. import com.malk.utils.UtilDateTime;
  10. import com.malk.utils.UtilEnv;
  11. import com.malk.utils.UtilMap;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import java.time.DayOfWeek;
  16. import java.time.LocalDate;
  17. import java.time.LocalDateTime;
  18. import java.time.Period;
  19. import java.util.*;
  20. @Service
  21. @Slf4j
  22. public class PkMaintenanceWarningServiceImpl implements PkMaintenanceWarningService {
  23. @Autowired
  24. private DDClient ddClient;
  25. @Autowired
  26. private DDClient_Notice ddClient_notice;
  27. @Autowired
  28. private YDClient ydClient;
  29. private static String FORM_UUID="FORM-NO96679107GDYGUK9SM8T42G95KA2KZOMUELL4";
  30. @Override
  31. public void warning() {
  32. LocalDate now=LocalDate.now();
  33. int weekDay=now.getDayOfWeek().getValue();
  34. List<Map> list= (List<Map>)ydClient.queryData(YDParam.builder().formUuid(FORM_UUID)
  35. .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_lleuoajr","工程维保")))
  36. .build(), YDConf.FORM_QUERY.retrieve_list).getData();
  37. for (int i = 0; i < list.size(); i++) {
  38. Map formData=UtilMap.getMap(list.get(i),"formData");
  39. String formInstanceId=UtilMap.getString(list.get(i),"formInstanceId");
  40. log.info("进度:{}/{}",i+1,list.size());
  41. if(formData.containsKey("dateField_lvkegbgm")&&formData.containsKey("dateField_lvkegbgp")){
  42. // 重新计算 维保剩余天数
  43. LocalDateTime startTime= UtilDateTime.getLocalDateTimeFromTimestamp(UtilMap.getLong(formData,"dateField_lvkegbgm"));
  44. LocalDateTime endTime=UtilDateTime.getLocalDateTimeFromTimestamp(UtilMap.getLong(formData,"dateField_lvkegbgp"));
  45. if(startTime.isAfter(LocalDate.now().atStartOfDay())){
  46. startTime=LocalDate.now().atStartOfDay();
  47. }
  48. Period period=Period.between(startTime.toLocalDate(),endTime.toLocalDate());
  49. int days=period.getDays();
  50. String stats="";
  51. // 提醒人员 仰洪波[033069386520314088] 肖林[810]
  52. List<String> users=Arrays.asList("033069386520314088","810");
  53. users.addAll(UtilMap.getList(formData,"employeeField_lqq12vtb_id"));
  54. users.addAll(UtilMap.getList(formData,"employeeField_llemcq8c_id"));
  55. String projectName=UtilMap.getString(formData,"textField_llemcq7b");
  56. String url="https://bmogyb.aliwork.com/APP_UNSAR4O4Y7NBDUYXLIP4/formDetail/FORM-NO96679107GDYGUK9SM8T42G95KA2KZOMUELL4?formInstId="+formInstanceId;
  57. boolean isSend=!"关闭".equals(UtilMap.getString(formData,"radioField_lw4p0nnl"));
  58. if(days<0){
  59. stats="已过期";
  60. // 每天提醒
  61. sendNotice(users,"维保已过期,请及时续约,如无需继续维保,请及时更新系统维保信息。",url,isSend,projectName);
  62. }else if(days>=0 && days<=90){
  63. stats="3个月内到期";
  64. // 周一到周五
  65. if(weekDay >= 1 && weekDay <= 5){
  66. sendNotice(users,"维保即将到期,请及时续约",url,isSend,projectName);
  67. }
  68. }else if(days>=91 && days<=180){
  69. stats="6个月内到期";
  70. // 周一
  71. if(weekDay == 1){
  72. sendNotice(users,"维保即将到期,请做好维保合同续约准备",url,isSend,projectName);
  73. }
  74. }else{
  75. stats="未到期";
  76. // 每年7-12月,每月1号10:00提醒1次
  77. if(now.getDayOfMonth()==1&&now.getMonthValue()>=7){
  78. sendNotice(users,"请提醒客户做好相关维保预算",url,isSend,projectName);
  79. }
  80. }
  81. Map upMap=new HashMap();
  82. upMap.put("numberField_lvkegbgk",days);
  83. upMap.put("selectField_lvkegbgn",stats);
  84. ydClient.operateData(YDParam.builder().formInstId(formInstanceId).updateFormDataJson(JSONObject.toJSONString(upMap)).build(), YDConf.FORM_OPERATION.update);
  85. }else{
  86. log.info("未配置时间!");
  87. }
  88. }
  89. }
  90. private void sendNotice(List<String> users,String msg,String url,boolean isSend,String name){
  91. if(!isSend){
  92. return;
  93. }
  94. if(users==null||users.size()<1){
  95. log.info("提醒用户列表为空");
  96. return;
  97. }
  98. if(!UtilEnv.ENV_PROD.equals(UtilEnv.getActiveProfile())){
  99. log.info("非生产环境,消息转发到开发人员。应收到人员列表:{}",users);
  100. users= Arrays.asList("153620324221442254");
  101. }
  102. Map cardMap=new HashMap();
  103. cardMap.put("btn_json_list",Arrays.asList(UtilMap.map("title, action_url","查看详情",url)));
  104. cardMap.put("title","项目维保预警提醒");
  105. cardMap.put("markdown","### 项目维保预警提醒 \n 项目【"+name+"】 \n "+msg);
  106. cardMap.put("btn_orientation",1);
  107. Map msgMap=new HashMap();
  108. msgMap.put("msgtype","action_card");
  109. msgMap.put("action_card",cardMap);
  110. ddClient_notice.sendNotification(ddClient.getAccessToken(),users,null,false,msgMap);
  111. }
  112. }