Browse Source

增加及时提醒下的部门负责人接收抄送消息

QuYueTing 4 weeks ago
parent
commit
cc79a6ee08

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2025-04-14
+ * @since 2025-04-20
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -674,6 +674,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("alert_audit_mode")
     private Integer alertAuditMode;
 
+    /**
+     * 部门负责人接收抄送提醒
+     */
+    @TableField("cc_dept_manager")
+    private Boolean ccDeptManager;
+
 
     @TableField(exist = false)
     private List<User> userList;

+ 34 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -70,6 +70,10 @@ import java.util.stream.Collectors;
  */
 @Service
 public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
+    @Value("${configEnv.isPrivateDeploy}")
+    private boolean isPrivateDeploy;
+    @Value("${privateDeployURL.pcUrl}")
+    private String pcUrl;
 //    @Resource
 //    AsyncTaskExecutor asyncTaskExecutor;//注入线程池对象
     private final static Executor executor = Executors.newFixedThreadPool(3);//启用多线程
@@ -1345,6 +1349,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 //检查是否为企业微信用户
                 WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, companyId));
                 if (wxCorpInfo != null) {
+                    List<String> auditorCorpwxUserids = new ArrayList<>();
                     for (Report report : reportList) {
                         String corpwxUserid = userMapper.selectById(report.getProjectAuditorId()).getCorpwxUserid();
                         //推送到企业微信
@@ -1365,17 +1370,42 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             jsonObj.put("value","1");
                         }
                         dataJson.add(jsonObj);
-//                        if(isPrivateDeploy){
-//                            json.put("content","待审核数量: "+1+"\\n<a href=\\\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri="+pcUrl+"/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect\\\">去审核</a>");
-//                        }else {
+                        if(isPrivateDeploy){
+                            json.put("content","待审核数量: "+1+"\\n<a href=\\\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri="+pcUrl+"/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect\\\">去审核</a>");
+                        }else {
                             String templateId = timeType.getAlertType() == 4 ? "tty9TkCAAAtDDCqY796mGulF9c5Jmwng":"tty9TkCAAAuPvPjabDdQXGocnG0K24EQ";
                             json.put("template_id",templateId);
                             json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=review#wechat_redirect");
                             json.put("content_item",dataJson);
-//                        }
+                        }
+                        auditorCorpwxUserids.add(corpwxUserid);
 //                        System.out.println("发送企业微信消息==用户:"+corpwxUserid+", "+json.toJSONString());
                         wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
                     }
+                    //如果开启了抄送给部门负责人,需要发送消息通知
+                    if (timeType.getCcDeptManager()) {
+                        User creator = userMapper.selectById(reportList.get(0).getCreatorId());
+                        if (creator.getDepartmentId() != null && creator.getDepartmentId() != 0) {
+                            Department department = departmentMapper.selectById(creator.getDepartmentId());
+                            //获取部门主要负责人和其他负责人
+                            List<String> managerIds = new ArrayList<>();
+                            if (department.getManagerId() != null) {
+                                managerIds.add(department.getManagerId());
+                            }
+                            List<DepartmentOtherManager> otherManagers = departmentOtherManagerMapper.selectList(new LambdaQueryWrapper<DepartmentOtherManager>().eq(DepartmentOtherManager::getDepartmentId, creator.getDepartmentId()));
+                            if (otherManagers.size() > 0) {
+                                managerIds.addAll(otherManagers.stream().map(DepartmentOtherManager::getOtherManagerId).collect(Collectors.toList()));
+                            }
+                            //获取部门负责人
+                            List<User> managers = userMapper.selectList(new QueryWrapper<User>().in("id", managerIds).eq("company_id", companyId));
+                            String managerUserIds = managers.stream().filter(m -> m.getCorpwxUserid() != null && !auditorCorpwxUserids.contains(m.getCorpwxUserid()))
+                                    .map(User::getCorpwxUserid).collect(Collectors.joining("|"));
+                            if (!StringUtils.isEmpty(managerUserIds)) {
+//                                System.out.println("发送企业微信消息==用户:"+managerUserIds+", "+"员工$userName="+creator.getCorpwxUserid()+"$提交了日报");
+                                wxCorpInfoService.sendWXCorpMsg(wxCorpInfo, managerUserIds, "员工$userName="+creator.getCorpwxUserid()+"$提交了日报", null, WxCorpInfoServiceImpl.TEXT_CARD_MSG_REPORT_SUBMIT);
+                            }
+                        }
+                    }
                 }
             }
         } else {

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -2,7 +2,6 @@ package com.management.platform.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -101,6 +100,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
     public static final int TEXT_CARD_MSG_BUSTRIP_WAITING_AUDIT = 0;//出差待审核
     public static final int TEXT_CARD_MSG_BUSTRIP_AGREE = 1;//出差审核通过
     public static final int TEXT_CARD_MSG_BUSTRIP_DENY = 2;//出差审核驳回
+    public static final int TEXT_CARD_MSG_REPORT_SUBMIT = 3; //日报提交抄送提醒
     public static final int TEXT_CARD_MSG_REPORT_DENY = 10;//日报驳回
     public static final int TEXT_CARD_MSG_REPORT_AGREE = 11; //日报审核通过
     public static final int TEXT_CARD_MSG_REPORT_ABNOEMAL = 12;//日报驳回
@@ -376,6 +376,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     title = "任务文件被驳回";
                 } else if (msgType.equals(TEXT_CARD_MSG_TASK_FILE_CHECK)) {
                     title = "任务文件审核";
+                } else if (msgType.equals(TEXT_CARD_MSG_REPORT_SUBMIT)) {
+                    title = "日报提交提醒";
                 }
             } else {
                 jumpUrl = jumpUrl.replace("STATE", pageRouter);

File diff suppressed because it is too large
+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 13 - 13
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -263,24 +263,24 @@
                                 <el-radio :label="0" class="rala1">定时提醒</el-radio>
                             </el-radio-group>
                             <el-time-picker v-if="timeType.alertAuditMode == 0"
-                                    v-model="timeType.waitCheckAlertTime"
-                                    :placeholder="$t('checkRemindertime')"
-                                    style="width:150px;"
-                                    format="HH:mm"
-                                    value-format="HH:mm"
-                                    :picker-options="{
-                                    start: '08:00',
-                                    end: '23:30'
-                                    }">
-                                </el-time-picker>
-                                <span v-if="timeType.alertType == 4" style="color:#606266;margin-left:20px;">({{ $t('mei') }}
+                                v-model="timeType.waitCheckAlertTime"
+                                :placeholder="$t('checkRemindertime')"
+                                style="width:150px;"
+                                format="HH:mm"
+                                value-format="HH:mm"
+                                :picker-options="{
+                                start: '08:00',
+                                end: '23:30'
+                                }">
+                            </el-time-picker>
+                            <span v-if="timeType.alertType == 4" style="color:#606266;margin-left:20px;">({{ $t('mei') }}
                                 <el-select v-model="timeType.alertCheckDay" style="width:80px;">
                                     <el-option v-for="item in alertWeekDayRange" :label="item.label" :value="item.value" :key="item.value"></el-option>
-                                </el-select>
-                                {{ $t('tiXing') }})<span style="margin-left:20px;">{{ $t('remindertext') }}</span>
+                                </el-select>{{ $t('tiXing') }})<span style="margin-left:20px;">{{ $t('remindertext') }}</span>
                                 <el-input :placeholder="$t('peaseenterthe')" v-model="timeType.alertCheckMsg" clearable class="apu" maxlength="50"></el-input>
                                 <span style="color:orange;margin-left:10px;">{{ $t('keYong_0BiaoShiDaiShenHeTiaoShuLiRu_0JiangBeiTiHuanWei_10') }}</span>
                             </span>
+                            <el-checkbox v-model="timeType.ccDeptManager" v-if="timeType.alertAuditMode == 1" style="margin-left:10px;">部门负责人接收抄送提醒</el-checkbox>
                         </div>
 
                     </div>