Ver Fonte

提交赛元的导入修改,修复内容无法导入的Bug

seyason há 9 meses atrás
pai
commit
d15f5cf739

+ 30 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -14,6 +14,7 @@ import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.entity.vo.WorktimeItem;
 import com.management.platform.mapper.*;
 import com.management.platform.service.*;
+import com.management.platform.service.impl.WxCorpInfoServiceImpl;
 import com.management.platform.util.*;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
@@ -104,6 +105,8 @@ public class ReportController {
     @Resource
     private UserFvTimeService userFvTimeService;
     @Resource
+    private WxCorpInfoService wxCorpInfoService;
+    @Resource
     private LeaveSheetService leaveSheetService;
     @Resource
     private EstimateTimeSettingMapper estimateTimeSettingMapper;
@@ -1274,6 +1277,7 @@ public class ReportController {
                             BigDecimal hasReport = new BigDecimal(sum).add(new BigDecimal(nowReport));
                             BigDecimal multiply = new BigDecimal(first.get().getManDay()).multiply(new BigDecimal(comTimeType.getAllday()));
                             if(hasReport.doubleValue()>multiply.doubleValue()){
+                                sendReportTimeWarningMsg(company, first.get(), null, null);
                                 if (estimateTimeSetting.getProjectFronzeOnLack() == 1) {
                                     httpRespMsg.setError("超过当前项目["+first.get().getProjectName()+"]预算工时,无法继续提交工时");
                                     return httpRespMsg;
@@ -1285,6 +1289,7 @@ public class ReportController {
                                 //检查是否超过预设的提醒百分比;设置的数值是剩余的百分比
                                 if (hasReport.divide(multiply, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).compareTo(new BigDecimal(100-estimateTimeSetting.getProjectWarningPercent()))>0) {
                                     warningPercentProjects += first.get().getProjectName() + ",";
+                                    sendReportTimeWarningMsg(company, first.get(), null, null);
                                 }
                                 //检查分组工时
                                 Integer targetGpId = report.getGroupId();
@@ -1302,6 +1307,7 @@ public class ReportController {
                                     if (tgp != null && tgp.getManDay() != null && tgp.getManDay() > 0) {
                                         multiply = new BigDecimal(tgp.getManDay()).multiply(new BigDecimal(comTimeType.getAllday()));
                                         if (hasReport.doubleValue() > multiply.doubleValue()) {
+                                            sendReportTimeWarningMsg(company, null, first.get().getProjectName(), tgp);
                                             if (estimateTimeSetting.getGroupFronzeOnLack() == 1) {
                                                 httpRespMsg.setError("超过当前项目["+first.get().getProjectName()+"]分组["+tgp.getName()+"]预算工时,无法继续提交工时");
                                                 return httpRespMsg;
@@ -1313,6 +1319,7 @@ public class ReportController {
                                             //检查是否超过预设的提醒百分比;设置的数值是剩余的百分比
                                             if (hasReport.divide(multiply, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).compareTo(new BigDecimal(100 - estimateTimeSetting.getGroupWarningPercent())) > 0) {
                                                 warningGroupPercent += (tgp.getTaskGroupCode() != null?tgp.getTaskGroupCode():"")+"-"+tgp.getName() + ",";
+                                                sendReportTimeWarningMsg(company, null, first.get().getProjectName(), tgp);
                                             }
                                         }
                                     }
@@ -2895,5 +2902,28 @@ public class ReportController {
         return msg;
     }
 
+    //发送消息提醒日报工时填报触发警告
+    private void sendReportTimeWarningMsg(Company company, Project project, String projectName, TaskGroup taskGroup) {
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new QueryWrapper<WxCorpInfo>().eq("company_id", company.getId()));
+        if (wxCorpInfo != null) {
+            //给项目经理和任务分组负责人发送消息
+            if (project != null) {
+                User incharger = userMapper.selectById(project.getInchargerId());
+                if (incharger != null) {
+                    String msg = "项目["+project.getProjectName()+"]预估工时不足,请及时调整";
+                    System.out.println(msg);
+                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo, incharger.getCorpwxUserid(), msg, null, WxCorpInfoServiceImpl.TEXT_CARD_MSG_REPORT_EXCEED_LIMIT);
+                }
+            } else if (taskGroup != null && projectName != null) {
+                String msg = "项目["+projectName+"]下的分组["+taskGroup.getName()+"]预估工时不足,请及时调整";
+                System.out.println(msg);
+                User groupIncharger = userMapper.selectById(taskGroup.getInchargerId());
+                if (groupIncharger != null) {
+                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo, groupIncharger.getCorpwxUserid(), msg, null, WxCorpInfoServiceImpl.TEXT_CARD_MSG_REPORT_EXCEED_LIMIT);
+                }
+            }
+        }
+        //TODO: 针对钉钉和微信公众号进行推送
+    }
 }
 

+ 39 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -5118,6 +5118,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     }
                     User reportCreator = any.get();
                     double curRowTotalTime = 0;
+                    int workContentIndex = projectNameStartIndex -1;
                     for (int i=projectNameStartIndex; i < projectNameStartIndex + projectList.size(); i++) {
                         if (row.getCell(i) == null) {
                             continue;
@@ -5137,7 +5138,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 report.setDeptId(reportCreator.getDepartmentId());
                                 report.setProjectId(project.getId());
                                 if (withCheckIn != null) {
-                                    report.setContent(workContent);
+                                    if (row.getCell(workContentIndex) != null) {
+                                        workContent = row.getCell(workContentIndex).getStringCellValue().trim();
+                                        report.setContent(workContent);
+                                    }
                                 }
 
                                 //子项目
@@ -5189,7 +5193,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     //导入工时大于0时,需要有工作内容
                     if (curRowTotalTime > 0) {
                         if (withCheckIn!=null) {
-                            int workContentIndex = projectNameStartIndex -1;
                             if (row.getCell(workContentIndex) == null) {
                                 //msg.setError("第"+dataCount+"行缺少工作内容");工作内容为必填项
                                 msg.setError(MessageUtils.message("data.LackWorkContentByRow",dataCount));
@@ -10030,8 +10033,27 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         titleList.add("部门");
         titleList.add("日期");
         titleList.add("考勤时长(h)");
-        titleList.add("项目工时");
-        titleList.add("事项");
+//        titleList.add("项目工时");
+        List<Project> projectList = new ArrayList<>();
+        int projectCount = 0;
+        //取到全部项目
+        for (Map<String, Object> map : nameList) {
+            List<Map<String, Object>> workProjectList = (List<Map<String, Object>>) map.get("data");
+            for (Map<String, Object> workProject : workProjectList) {
+                Project p = new Project();
+                p.setId((Integer)workProject.get("projectId"));
+                p.setProjectName(String.valueOf(workProject.get("project")));
+                //去重
+                if (projectList.stream().anyMatch(pr -> pr.getId().equals(p.getId()))) {
+                    continue;
+                }
+                titleList.add(String.valueOf(workProject.get("project")));
+                projectList.add(p);
+            }
+        }
+        projectCount = projectList.size();
+
+        titleList.add("工作内容");
         titleList.add("状态");
         //添加数据
         List<List<String>> dataList=new ArrayList<>();
@@ -10051,6 +10073,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             item.add(String.valueOf(map.get("dateStr")));
             item.add(String.valueOf(map.get("cardHours")));
             List<Map<String, Object>> workProjectList = (List<Map<String, Object>>) map.get("data");
+            for (Project p : projectList) {
+                boolean has = false;
+                for (Map<String, Object> workProject : workProjectList) {
+                    if (p.getId().equals(workProject.get("projectId"))) {
+                        item.add(String.valueOf(workProject.get("time")));
+                        has = true;
+                        break;
+                    }
+                }
+                if (!has) {
+                    item.add("");
+                }
+            }
             String workStr = "";
             String workContent = "";
             String projAuditor = "";
@@ -10060,16 +10095,13 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (i == 0) {
                         workContent = String.valueOf(workProject.get("content"));
                     }
-                    workStr += workProject.get("project") + "(" + workProject.get("time") + "h),";
                     String aud = String.valueOf(workProject.get("projectAuditorName"));
                     if (!projAuditor.contains(aud)) {
                         projAuditor += aud + ",";
                     }
                 }
-                workStr = workStr.substring(0, workStr.length() - 1);
                 projAuditor = projAuditor.substring(0, projAuditor.length() - 1);
             }
-            item.add(workStr);
             item.add(workContent);
             if (((Integer)map.get("isDeptAudit")) == 0) {
                 item.add("待部门主管("+projAuditor+")审核");

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

@@ -103,6 +103,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
     public static final int TEXT_CARD_MSG_REPORT_AGREE = 11; //日报审核通过
     public static final int TEXT_CARD_MSG_REPORT_ABNOEMAL = 12;//日报驳回
     public static final int TEXT_CARD_MSG_REPORT_IMPORT = 13;//日报导入审核
+    public static final int TEXT_CARD_MSG_REPORT_EXCEED_LIMIT = 14;//日报填报触发预警
+
     public static final int TEXT_CARD_MSG_EXPENSE_AGREE = 21;//费用报销审核通过
     public static final int TEXT_CARD_MSG_EXPENSE_DENY = 22;//费用报销审核驳回
 
@@ -274,11 +276,12 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         return resultUrl;
     }
     @Override
+    @Async("taskExecutor")
     public void sendWXCorpMsg(WxCorpInfo corpInfo, String corpUserid, String msg, String pageRouter, Integer msgType) {
         try {
-            if (isDev) return;
             log.info("发送企业微信消息===" + corpUserid);
             System.out.println("发送企业微信消息===" + corpUserid);
+            if (isDev) return;
             String accessToken = getCorpAccessToken(corpInfo);
             String url = URL_SEND_WXCORP_MSG.replaceAll("ACCESS_TOKEN", accessToken);
             HttpHeaders headers = new HttpHeaders();
@@ -306,6 +309,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     title = "日报审核通过";
                 }else if (msgType.equals(TEXT_CARD_MSG_REPORT_ABNOEMAL)) {
                     title = "异常提醒";
+                }else if (msgType.equals(TEXT_CARD_MSG_REPORT_EXCEED_LIMIT)) {
+                    title = "项目/分组预估工时不足";
                 }
             } else {
                 jumpUrl = jumpUrl.replace("STATE", pageRouter);

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -315,7 +315,7 @@
                 </template>
             </el-table-column>
             <!-- 合同金额 -->
-            <el-table-column prop="contractAmount" :label="$t('contractamount')"  width="200" v-if="user.company.packageProject==1" align="right">
+            <el-table-column prop="contractAmount" :label="$t('contractamount')"  width="200"  align="right">
                 <template slot-scope="scope" >
                     <span>¥{{Number(scope.row.contractAmount).toFixed(2)}}</span>
                 </template>
@@ -610,7 +610,7 @@
                             placeholder="整数" clearable  @keyup.native="restrictNumber('contractAmount')" :disabled="title == '新增项目' ? false : false"></el-input><span style="margin-left:10px;">元</span> -->
                     </el-form-item>
                     <!-- 增加合同金额字段 -->
-                    <el-form-item  :label="$t('contractamount')" v-if="user.company.packageProject==1 && (user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
+                    <el-form-item  :label="$t('contractamount')" v-if="(user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
                         <el-input id="contractAmount" v-model="addForm.contractAmount" :disabled="canOnlyModParticipator" style="width:32%;" @input="contractAmountChange(addForm.contractAmount)" :placeholder="$t('zheng-shu')" clearable  @keyup.native="restrictNumber('contractAmount')"></el-input><span style="margin-left:10px;position:absolute;">{{ $t('yuan') }}</span>
                         <template v-if="title == $t('modifytheproject') && contractAmountReasonShow">
                             <span style="margin-left:63px;margin-right:10px;">{{ $t('modifythereason') }}</span>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

@@ -242,7 +242,7 @@
                         <span v-for="(projItem, projIndex) in scope.row.data">{{ projItem.project+'('+projItem.time+'h)' + (projIndex < scope.row.data.length-1?',':'')}}</span>
                     </template>
                 </el-table-column>
-                <el-table-column :label="$t('other.matters')" v-if="user.companyId == 469">
+                <el-table-column label="工作内容" v-if="user.companyId == 469">
                     <template slot-scope="scope">
                         {{scope.row.data.length == 0?'':scope.row.data[0].content}}
                     </template>