فهرست منبع

Merge remote-tracking branch 'origin/master'

liuyc 2 سال پیش
والد
کامیت
1b5ac386f4
23فایلهای تغییر یافته به همراه466 افزوده شده و 62 حذف شده
  1. 1 0
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  2. 6 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/InformationQuery.java
  3. 2 2
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  4. 20 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanFinishedRatioVO.java
  5. 41 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanStatisticVO2.java
  6. 0 27
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/RiskPlanByMonthOfYearVO.java
  7. 3 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ImageClassificationFileController.java
  8. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  9. 27 10
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  10. 21 8
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  11. 11 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java
  12. 7 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  13. 28 5
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  14. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  15. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  16. 3 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  17. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  18. 4 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  19. 199 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  20. 9 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  21. 18 2
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java
  22. 53 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java
  23. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

+ 1 - 0
blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -360,6 +360,7 @@ public class CommonUtil {
      * @throws IOException
      */
     public static long getResourceLength(String urlStr) throws IOException {
+        urlStr = replaceOssUrl(urlStr);
         URL url = new URL(urlStr);
         URLConnection urlConnection = url.openConnection();
         urlConnection.connect();

+ 6 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/InformationQuery.java

@@ -129,4 +129,10 @@ public class InformationQuery extends BaseEntity {
     @ApiModelProperty("业务时间")
     private String BusinessTime;
 
+    @ApiModelProperty("电签文件大小,单位K")
+    private Long eVisaPdfSize;
+
+    @ApiModelProperty("电签文件页数")
+    private Integer eVisaPdfPage;
+
 }

+ 2 - 2
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -79,8 +79,8 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "预算备注")
     private String budgetRemark;
 
-    @ApiModelProperty(value = "成本测算是否审批通过")
-    private String approve;
+    @ApiModelProperty(value = "成本测算是否审批通过,0未上报1已审批")
+    private Integer approve;
 
     @ApiModelProperty(value = "计划任务类型")
     private Integer planTaskType;

+ 20 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanFinishedRatioVO.java

@@ -0,0 +1,20 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Param  任务统计-任务完成率
+ * @Author wangwl
+ * @Date 2023/6/30 16:01
+ **/
+@Data
+public class PlanFinishedRatioVO {
+    @ApiModelProperty(value = "员工集合")
+    private List<String> userList;
+
+    @ApiModelProperty(value = "完成率集合")
+    private List<Integer> ratioList;
+}

+ 41 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanStatisticVO2.java

@@ -0,0 +1,41 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Param  门户普通权限,计划统计图-风险暂停计划
+ * @Author wangwl
+ * @Date 2023/6/30 14:32
+ **/
+@Data
+public class PlanStatisticVO2 {
+
+    @ApiModelProperty(value = "统计图集合")
+    private List<PlanStatisticVO> dataList;
+
+    @ApiModelProperty(value = "日期集合")
+    private List<String> dateList;
+
+    @ApiModelProperty(value = "风险计划集合")
+    private List<RiskPlan> riskPlans;
+
+    @Data
+    public static class RiskPlan {
+        @ApiModelProperty(value = "计划名称")
+        private String name;
+
+        @ApiModelProperty(value = "格式")
+        private String type;
+
+        @ApiModelProperty(value = "格式")
+        private String stack;
+
+        @ApiModelProperty(value = "计划数量")
+        private List<Integer> data;
+    }
+
+
+}

+ 0 - 27
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/RiskPlanByMonthOfYearVO.java

@@ -1,27 +0,0 @@
-package org.springblade.control.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @Param  任务统计-风险计划
- * @Author wangwl
- * @Date 2023/6/30 16:01
- **/
-@Data
-public class RiskPlanByMonthOfYearVO {
-    @ApiModelProperty(value = "计划名称")
-    private String name;
-
-    @ApiModelProperty(value = "格式")
-    private String type;
-
-    @ApiModelProperty(value = "格式")
-    private String stack;
-
-    @ApiModelProperty(value = "计划数量")
-    private List<Integer> data;
-
-}

+ 3 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/ImageClassificationFileController.java

@@ -73,6 +73,8 @@ import java.util.*;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static org.springblade.common.utils.CommonUtil.replaceOssUrl;
+
 /**
  * 影音资料控制器(客户端)
  *
@@ -701,6 +703,7 @@ public class ImageClassificationFileController extends BladeController {
      * @throws IOException
      */
     public long getResourceLength(String urlStr) throws IOException {
+        urlStr = replaceOssUrl(urlStr);
         URL url = new URL(urlStr);
         URLConnection urlConnection = url.openConnection();
         urlConnection.connect();

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -37,6 +37,8 @@
         <result column="pdf_trial_url" property="pdfTrialUrl"/>
         <result column="pdf_trial_url_position" property="pdfTrialUrlPosition"/>
         <result column="business_time" property="BusinessTime"/>
+        <result column="e_visa_pdf_page" property="eVisaPdfPage"/>
+        <result column="e_visa_pdf_size" property="eVisaPdfSize"/>
     </resultMap>
 
     <resultMap id="queryProcessDataMap" type="org.springblade.business.vo.QueryProcessDataVO">

+ 27 - 10
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -15,6 +15,7 @@ import org.springblade.business.entity.*;
 import org.springblade.business.mapper.TaskMapper;
 import org.springblade.business.service.*;
 import org.springblade.business.vo.*;
+import org.springblade.common.utils.FileUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
@@ -989,26 +990,42 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 .eq(ArchiveFile::getNodeExtId, keyId)
                 .eq(ArchiveFile::getIsDeleted, 0));
 
+        List<String> listFiles = new ArrayList<>();
+        listFiles.add(query.getEVisaPdfUrl());
+        Long fileSize = FileUtils.getOssFileSizeCount(listFiles);
+
         if (archiveFile != null) {
             archiveFile.setEVisaFile(query.getEVisaPdfUrl());
             archiveFile.setPdfFileUrl(query.getEVisaPdfUrl()); // 这里将pdfFileUrl也更新了,因为需求中没有限制只能更新eVisaFile属性
+            archiveFile.setFileSize(fileSize);
             this.archiveFileService.updateById(archiveFile);
 
         } else {
-            archiveFile = new ArchiveFile();
-            archiveFile.setNodeId(nodeId.toString());
-            archiveFile.setNodeExtId(keyId);
-            archiveFile.setContractId(contractId.toString());
-            archiveFile.setStatus(2); // 这里是新增归档文件,所以状态为1(已完成)
-            //TODO 文件题名规则,待补充
-            fillFileNameAndTime(archiveFile,query);
-            //
-            archiveFile.setEVisaFile(query.getEVisaPdfUrl());
-            archiveFile.setPdfFileUrl(query.getEVisaPdfUrl());
+            archiveFile = getArchiveFile(query,nodeId,keyId,fileSize);
             this.archiveFileService.save(archiveFile);
         }
     }
 
+    public ArchiveFile getArchiveFile(InformationQuery query,Long nodeId,Long keyId,Long fileSize) {
+        ArchiveFile archiveFile = new ArchiveFile();
+        archiveFile.setNodeId(nodeId.toString());
+        archiveFile.setNodeExtId(keyId);
+        archiveFile.setContractId(query.getContractId().toString());
+        archiveFile.setStatus(2); // 这里是新增归档文件,所以状态为1(已完成)
+        //TODO 文件题名规则,待补充
+        fillFileNameAndTime(archiveFile,query);
+        archiveFile.setFileSize(fileSize);
+        archiveFile.setSourceType(1);
+
+        //责任人怎么取
+
+        //
+        archiveFile.setEVisaFile(query.getEVisaPdfUrl());
+        archiveFile.setPdfFileUrl(query.getEVisaPdfUrl());
+        return archiveFile;
+    }
+
+
     public  void fillFileNameAndTime(ArchiveFile archiveFile,InformationQuery info) {
         archiveFile.setFileName(info.getName());
         archiveFile.setFileTime(info.getBusinessTime());

+ 21 - 8
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java

@@ -10,10 +10,7 @@ import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.dto.ProjectCostBudgetDTO;
 import org.springblade.control.entity.ProjectCostBudget;
 import org.springblade.control.service.IProjectCostBudgetService;
-import org.springblade.control.vo.ControlProjectInfoVO;
-import org.springblade.control.vo.PlanStatisticVO;
-import org.springblade.control.vo.ProjectCostBudgetVO;
-import org.springblade.control.vo.ProjectCostBudgetVO3;
+import org.springblade.control.vo.*;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -146,13 +143,29 @@ public class ProjectCostBudgetController {
     }
 
     /**
-     * 任务统计-计划统计图
+     * 任务统计-计划统计图-风险暂停计划
      */
     @GetMapping("/MonthOfYearPlanOverview2")
     @ApiOperationSupport(order = 11)
-    @ApiOperation(value = "任务统计-计划统计图",notes = "有参数的计划统计图")
-    public R<List<PlanStatisticVO>> MonthOfYearPlanOverview2(Long deptId,Long UserId,LocalDate start,LocalDate end){
-        return R.data(budgetService.MonthOfYearPlanOverview2(deptId,UserId,start,end));
+    @ApiOperation(value = "任务统计-计划统计图-风险暂停计划",notes = "2张图的返回值都在其中")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "startDate", value = "开始日期", required = false),
+            @ApiImplicitParam(name = "endDate", value = "结束日期", required = false),
+            @ApiImplicitParam(name = "deptId", value = "部门id", required = false),
+            @ApiImplicitParam(name = "userId", value = "用户id", required = false),
+    })
+    public R<PlanStatisticVO2> MonthOfYearPlanOverview2(Long deptId, Long userId, String start, String end){
+        return R.data(budgetService.MonthOfYearPlanOverview2(deptId,userId,start,end));
+    }
+
+    /**
+     * 任务统计-任务完成率
+     */
+    @GetMapping("/planFinishedRatio")
+    @ApiOperationSupport(order = 11)
+    @ApiOperation(value = "任务统计-任务完成率")
+    public R<PlanFinishedRatioVO> planFinishedRatio(Long deptId, Long userId, String start, String end){
+        return R.data(budgetService.planFinishedRatio(deptId,userId,start,end));
     }
 
 

+ 11 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java

@@ -16,6 +16,7 @@ import org.springblade.control.vo.AllProjectStatsVO;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.system.user.entity.User;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -145,4 +146,14 @@ public class ProjectInfoController {
         return R.data(projectInfoService.ProjectCostTypeStats(id));
     }
 
+    /**
+     * 获取实施负责人
+     */
+    @GetMapping("/getImplementUser")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取实施负责人")
+    public R<List<User>> getImplementUser() {
+        return R.data(projectInfoService.getImplementUser());
+    }
+
 }

+ 7 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -9,11 +9,13 @@ import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.*;
 import org.springblade.control.vo.*;
 import org.springblade.core.mp.support.Query;
+import org.springblade.system.user.entity.User;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Param
@@ -68,5 +70,9 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
 
     List<ProjectCostBudget> getPlanPracticalCostByMonth(@Param("date") String date);
 
-    List<ProjectCostBudget> MonthOfYearPlanOverview2(@Param("deptId") Long deptId,@Param("userId") Long userId,@Param("start") LocalDate start,@Param("end") LocalDate end);
+    List<ProjectCostBudget> getPlanByDeptOrUserOrTime(@Param("deptId") Long deptId,@Param("userId") Long userId,@Param("start") LocalDate start,@Param("end") LocalDate end);
+
+    List<User> getAllEmployees(@Param("tenantId") String tenantId,@Param("deptId") Long deptId,@Param("userId") Long userId);
+
+    List<ProjectCostBudget> getPlanByDeptOrUserOrTime2(@Param("ids") Set<Long> ids, @Param("start") LocalDate start,@Param("end") LocalDate end);
 }

+ 28 - 5
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -191,11 +191,34 @@
             and DATE_FORMAT(pcb.plan_start_time ,'%Y-%m') = #{date}
         </if>
     </select>
-    <select id="MonthOfYearPlanOverview2" resultType="org.springblade.control.entity.ProjectCostBudget">
-        select pcb.*
-        from c_project_cost_budget pcb
-        where pcb.task_user = #{user} and pcb.is_deleted = 0
-            and DATE_FORMAT(pcb.plan_start_time,'%Y') = #{year} or DATE_FORMAT(pcb.plan_end_time,'%Y') = #{year}
+    <select id="getPlanByDeptOrUserOrTime" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select * from c_project_cost_budget pcb
+        WHERE is_deleted = 0
+        <if test="deptId != null and deptId != ''">
+            and dept_id = #{deptId}
+        </if>
+        <if test="userId != null and userId != ''">
+            and task_user = #{userId}
+        </if>
+             and (plan_start_time BETWEEN  #{start} and #{end} or plan_end_time BETWEEN  #{start} and #{end})
+    </select>
+    <select id="getAllEmployees" resultType="org.springblade.system.user.entity.User">
+        select id, name from blade_user where tenant_id = #{tenantId} and is_deleted = 0
+        <if test="userId != null and userId != ''">
+            and id = #{userId}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and dept_id like concat('%', #{deptId}, '%')
+        </if>
+    </select>
+    <select id="getPlanByDeptOrUserOrTime2" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select * from c_project_cost_budget
+        WHERE is_deleted = 0
+        and (plan_start_time BETWEEN  #{start} and #{end} or plan_end_time BETWEEN  #{start} and #{end})
+        and task_user in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
     </select>
 
 

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java

@@ -9,6 +9,7 @@ import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.AllProjectStatsVO;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.system.entity.DictBiz;
+import org.springblade.system.user.entity.User;
 
 import java.util.List;
 
@@ -37,4 +38,6 @@ public interface ProjectInfoMapper extends BaseMapper<ControlProjectInfo> {
     ControlProjectInfo getById(@Param("id") Long id);
 
     List<ControlProjectInfo> listByYear(@Param("year") int year);
+
+    List<User> getImplementUser();
 }

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml

@@ -81,6 +81,10 @@
     <select id="listByYear" resultType="org.springblade.control.entity.ControlProjectInfo">
         select * from c_control_project_info WHERE DATE_FORMAT(start_time,'%Y') &lt;= #{year} and DATE_FORMAT(end_time ,'%Y') &gt;= #{year}
     </select>
+    <select id="getImplementUser" resultType="org.springblade.system.user.entity.User">
+        select bu.id,bu.name from blade_user bu WHERE id in
+         (SELECT cpi.implement_principal from c_control_project_info cpi WHERE cpi.is_deleted = 0 GROUP by cpi.implement_principal)
+    </select>
 
 
 </mapper>

+ 3 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -52,7 +52,7 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
 
     List<PlanStatisticVO> MonthOfYearPlanOverview();
 
-    List<PlanStatisticVO> MonthOfYearPlanOverview2(Long deptId,Long UserId,LocalDate start,LocalDate end);
+    PlanStatisticVO2 MonthOfYearPlanOverview2(Long deptId,Long userId,String start,String end);
 
     List<ProjectCostBudget> getAllBudgetByProjectId(Long id);
 
@@ -69,4 +69,6 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     List<ProjectCostBudget> getRiskPlan(Long projectId,Integer costType);
 
     List<ProjectCostBudget> getPlanPracticalCostByMonth(String date);
+
+    PlanFinishedRatioVO planFinishedRatio(Long deptId, Long userId, String start, String end);
 }

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java

@@ -9,6 +9,7 @@ import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
 import org.springblade.system.entity.DictBiz;
+import org.springblade.system.user.entity.User;
 
 import java.util.List;
 
@@ -39,4 +40,6 @@ public interface IProjectInfoService extends BaseService<ControlProjectInfo> {
     List<AllProjectStatsVO> ProjectCostTypeStats(Long id);
 
     List<ControlProjectInfo> listByYear(int year);
+
+    List<User> getImplementUser();
 }

+ 4 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -402,9 +402,9 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
             for (int i = year; i <= thisYear; i++) {
                 list.add(i + "年");
             }
-        }
-        if (type != 1) {
-            list.add("汇总所有");
+            if (type != 1) {
+                list.add("汇总所有");
+            }
         }
         return list;
     }
@@ -458,7 +458,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         }
         //获取当月所有计划,和计划工资
         List<ProjectCostBudgetVO2> planByMonth = budgetService.getPlanByMonth(date);
-        if (planByMonth != null || planByMonth.size() >= 0) {
+        if (planByMonth != null && planByMonth.size() > 0) {
             List<DeptMonthPlanRatioVO> vos = new ArrayList<>();
             //月计划包含的项目
             Set<Long> projectIds = new HashSet<>();

+ 199 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.ControlProjectInfoDTO;
@@ -23,12 +24,14 @@ import org.springblade.control.vo.*;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -418,8 +421,128 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         }
     }
 
+
+    /**
+     * 任务统计-计划统计图
+     */
     @Override
-    public List<PlanStatisticVO> MonthOfYearPlanOverview2(Long deptId, Long UserId, LocalDate start, LocalDate end) {
+    public PlanStatisticVO2 MonthOfYearPlanOverview2(Long deptId, Long userId, String start, String end) {
+        LocalDate startDate;
+        LocalDate endDate;
+        //判断是否选择部门,如果选择了部门再判断是否选择了具体的人,如果没有选择具体的人则查询整个部门
+        if (StringUtils.isBlank(start) || StringUtils.isBlank(end)){
+            startDate = LocalDate.of(LocalDate.now().getYear(),1,1);
+            endDate = LocalDate.of(LocalDate.now().getYear(),12,31);
+        }else {
+            String[] s1 = start.split("-");
+            startDate = LocalDate.of(Integer.parseInt(s1[0]),Integer.parseInt(s1[1]),1);
+            String[] s2 = end.split("-");
+            endDate = LocalDate.of(Integer.parseInt(s2[0]),Integer.parseInt(s2[1]),1);
+            endDate = endDate.with(TemporalAdjusters.lastDayOfMonth());
+        }
+        //获取时间段中的计划,默认是今年
+        List<ProjectCostBudget> plans = baseMapper.getPlanByDeptOrUserOrTime(deptId, userId, startDate, endDate);
+        if (plans != null && plans.size() > 0) {
+            //结果
+            PlanStatisticVO2 vo2 = new PlanStatisticVO2();
+            List<PlanStatisticVO> list = new ArrayList<>();
+            //任务总量
+            PlanStatisticVO planTotal = new PlanStatisticVO();
+            planTotal.setName("任务总量");
+            List<Integer> l1 = new ArrayList<>();
+            //已完成
+            PlanStatisticVO finished = new PlanStatisticVO();
+            finished.setName("已完成");
+            List<Integer> l2 = new ArrayList<>();
+            //未完成
+            PlanStatisticVO unfinished = new PlanStatisticVO();
+            unfinished.setName("未完成");
+            List<Integer> l3 = new ArrayList<>();
+            //获取月数组
+            List<String> dateList = new ArrayList<>();
+
+            //风险计划集合
+            List<PlanStatisticVO2.RiskPlan> riskPlans = new ArrayList<>();
+            PlanStatisticVO2.RiskPlan riskPlan = new PlanStatisticVO2.RiskPlan();
+            riskPlan.setName("风险暂停计划");
+            riskPlan.setType("line");
+            riskPlan.setStack("Total");
+            List<Integer> list1 = new ArrayList<>();
+            PlanStatisticVO2.RiskPlan normalPlan = new PlanStatisticVO2.RiskPlan();
+            normalPlan.setName("正常计划");
+            normalPlan.setType("line");
+            normalPlan.setStack("Total");
+            List<Integer> list2 = new ArrayList<>();
+
+//            endDate = endDate.plusMonths(1);
+            while (startDate.isBefore(endDate)) {
+                //循环月,并且计算任务总量,已完成,未完成
+                Integer total = 0;
+                Integer finish = 0;
+                Integer unfinish = 0;
+
+                Integer risk = 0;
+                Integer normal = 0;
+                for (ProjectCostBudget plan : plans) {
+                    if ((plan.getPlanStartTime().getYear() == startDate.getYear() && plan.getPlanStartTime().getMonthValue() == startDate.getMonthValue())
+                            || (plan.getPlanEndTime().getYear() == startDate.getYear() && plan.getPlanEndTime().getMonthValue() == startDate.getMonthValue())) {
+                        //计划统计图
+                        total++;
+                        if (plan.getTaskApprove() == 1){
+                            finish++;
+                        }else {
+                            unfinish++;
+                        }
+
+                        //风险计划统计图
+                        if (plan.getStatus() == 4){
+                            if (plan.getPlanEndTime().isBefore(plan.getPracticalFinishTime())){
+                                //风险计划
+                                risk++;
+                            }else {
+                                normal++;
+                            }
+                        }else {
+                            if (plan.getPlanEndTime().isBefore(LocalDate.now())){
+                                //风险计划
+                                risk++;
+                            }else {
+                                normal++;
+                            }
+                        }
+
+                    }
+                }
+                list1.add(risk);
+                list2.add(normal);
+
+                l1.add(total);
+                l2.add(finish);
+                l3.add(unfinish);
+                dateList.add(startDate.getYear()+"年"+startDate.getMonthValue()+"月");
+                startDate = startDate.plusMonths(1);
+            }
+            //统计图集合
+            planTotal.setValue(l1);
+            finished.setValue(l2);
+            unfinished.setValue(l3);
+            list.add(planTotal);
+            list.add(finished);
+            list.add(unfinished);
+            vo2.setDataList(list);
+
+            //统计日期
+            vo2.setDateList(dateList);
+
+            //统计风险计划
+            riskPlan.setData(list1);
+            normalPlan.setData(list2);
+            riskPlans.add(riskPlan);
+            riskPlans.add(normalPlan);
+            vo2.setRiskPlans(riskPlans);
+
+            return vo2;
+        }
         return null;
     }
 
@@ -504,6 +627,81 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         return baseMapper.getPlanPracticalCostByMonth(date);
     }
 
+    /**
+     * 任务统计-任务完成率
+     */
+    @Override
+    public PlanFinishedRatioVO planFinishedRatio(Long deptId, Long userId, String start, String end) {
+        String tenantId = SecureUtil.getTenantId();
+        List<User> Employees = new ArrayList<>();
+        if (deptId == null){
+            //查询所有员工
+            Employees = baseMapper.getAllEmployees(tenantId,null,null);
+        }else if (userId == null){
+            //查询整个部门的员工
+            Employees = baseMapper.getAllEmployees(tenantId,deptId,null);
+        }else {
+            //查询指定员工
+            Employees = baseMapper.getAllEmployees(tenantId,deptId,userId);
+        }
+        if (Employees != null && Employees.size() > 0 ){
+            PlanFinishedRatioVO vo = new PlanFinishedRatioVO();
+            List<String> names = new ArrayList<>();
+            List<Integer> ratios = new ArrayList<>();
+            LocalDate startDate;
+            LocalDate endDate;
+            //判断是否选择部门,如果选择了部门再判断是否选择了具体的人,如果没有选择具体的人则查询整个部门
+            if (StringUtils.isBlank(start) || StringUtils.isBlank(end)){
+                startDate = LocalDate.of(LocalDate.now().getYear(),1,1);
+                endDate = LocalDate.of(LocalDate.now().getYear(),12,31);
+            }else {
+                String[] s1 = start.split("-");
+                startDate = LocalDate.of(Integer.parseInt(s1[0]),Integer.parseInt(s1[1]),1);
+                String[] s2 = end.split("-");
+                endDate = LocalDate.of(Integer.parseInt(s2[0]),Integer.parseInt(s2[1]),1);
+                endDate = endDate.with(TemporalAdjusters.lastDayOfMonth());
+            }
+            //获取员工id集合
+            Set<Long> ids = Employees.stream().map(l -> l.getId()).collect(Collectors.toSet());
+            //根据员工id查询时间范围内的任务
+            //获取时间段中的计划,默认是今年
+            List<ProjectCostBudget> plans = baseMapper.getPlanByDeptOrUserOrTime2(ids, startDate, endDate);
+            if (plans != null && plans.size() > 0) {
+                //通过员工id分组
+                Map<Long, List<ProjectCostBudget>> listMap = plans.parallelStream()
+                        .collect(Collectors.groupingBy(ProjectCostBudget::getTaskUser));
+                for (User employee : Employees) {
+                    names.add(employee.getName());
+                    BigDecimal total = new BigDecimal(0);
+                    BigDecimal finished = new BigDecimal(0);
+                    List<ProjectCostBudget> list = listMap.get(employee.getId());
+                    //判断此用户是否存在任务,不存在则直接比例为0
+                    if (list != null && list.size() > 0) {
+                        for (ProjectCostBudget plan : list) {
+                            if (plan.getTaskUser().equals(employee.getId())) {
+                                total = total.add(new BigDecimal(1));
+                                if (plan.getTaskApprove() == 1) {
+                                    finished = finished.add(new BigDecimal(1));
+                                }
+                            }
+                        }
+                        if (total.compareTo(new BigDecimal(0)) != 0) {
+                            ratios.add(finished.divide(total, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
+                        } else {
+                            ratios.add(0);
+                        }
+                    }else {
+                        ratios.add(0);
+                    }
+                }
+                vo.setUserList(names);
+                vo.setRatioList(ratios);
+                return vo;
+            }
+        }
+        return null;
+    }
+
     /**
      * 统计一行的几个总金额
      */

+ 9 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -15,6 +15,7 @@ import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springblade.system.entity.DictBiz;
+import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -206,5 +207,13 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         return baseMapper.listByYear(year);
     }
 
+    /**
+     * 获取实施负责人
+     */
+    @Override
+    public List<User> getImplementUser() {
+        return baseMapper.getImplementUser();
+    }
+
 
 }

+ 18 - 2
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -452,13 +452,29 @@ public class CustomFunction {
     }
 
 
-    public static Object weather(List<Object> date,Map<String,Object> map){
-           if(ListUtils.isNotEmpty(date)&&map!=null){
+    public static Object weather( Object dateObj,Map<String,Object> map){
+           if(dateObj!=null&&map!=null){
+               List<Object> date=obj2ListObj(dateObj);
             return  date.stream().map(StringUtils::handleNull).filter(StringUtils::isNotEmpty).map(e->map.get(new DateTime(e).toString(DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList());
            }
            return "";
     }
 
+
+    public static List<Object> obj2ListObj(Object input) {
+        if (input == null) {
+            return Collections.emptyList();
+        }
+        List<Object> result = new ArrayList<>();
+        if (input instanceof List<?>) {
+            result.addAll((List<?>) input);
+        } else if (StringUtils.isNotEmpty(input)) {
+            result.add(input);
+        }
+        return result;
+    }
+
+
     public static Object dateMax(Object range) {
         if (StringUtils.isNotEmpty(range)) {
             String[] s = Func.toStr(range).replaceAll("[\\[\\]]", "").split(",\\s+");

+ 53 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -1,6 +1,8 @@
 package org.springblade.manager.service.impl;
 
 import lombok.AllArgsConstructor;
+import org.springblade.business.entity.ArchiveFile;
+import org.springblade.business.entity.InformationQuery;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.ContractInfo;
@@ -211,4 +213,55 @@ public class ArchiveTreeContractSyncImpl {
 
         return saveList;
     }
+
+
+    public void  syncBusinessData(Long contractId) {
+        //获取某个合同段所有的电签完成的文件题名,取 id wbsid name,eVisaPdfUrl
+        List<InformationQuery> informationQueryList = getInformationQuerys(contractId);
+
+        List<ArchiveFile>  archiveFiles = getArchiveFiles(contractId);
+
+        Map<Long,ArchiveFile> archiveKeyIdMap = new HashMap<>();
+        for (ArchiveFile ar: archiveFiles)  {
+            if (ar.getNodeExtId()!= null) {
+                archiveKeyIdMap.put(ar.getNodeExtId(),ar);
+            }
+        }
+
+        List<InformationQuery> newInformationQueryList = new ArrayList<>();
+        List<InformationQuery> updateInformationQueryList = new ArrayList<>();
+        for (InformationQuery info: informationQueryList) {
+            if (info.getWbsId() != null) {
+
+                ArchiveFile archiveFile = archiveKeyIdMap.get(info.getWbsId());
+                if ( archiveFile == null) {
+                    newInformationQueryList.add(info);
+                }else if (!archiveFile.getPdfFileUrl().equals(info.getEVisaPdfUrl())) {
+                    updateInformationQueryList.add(info);
+                }
+            }
+        }
+
+        //对于newInformationQueryList。生成,需提供对应的nodeid
+
+        //对于updateInformationQueryList,需要找出更新文件和文件大小
+
+        //根据归档树,刷新排序
+    }
+
+    public List<InformationQuery>  getInformationQuerys(Long contractId) {
+        //获取某个合同段所有的电签完成的文件题名,取 id wbsid name,eVisaPdfUrl
+        List<InformationQuery> informationQueryList = new ArrayList<>();
+        return informationQueryList;
+
+        //互殴去
+    }
+
+    public List<ArchiveFile>  getArchiveFiles(Long contractId) {
+
+        List<ArchiveFile> archiveFiles = new ArrayList<>();
+        return archiveFiles;
+
+        //互殴去
+    }
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -688,7 +688,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                }
           });
            if(dateList.size()>0){
-              List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList(" select DATE(b.create_time) ds,b.weather from m_project_contract_area a join u_weather_info b on a.id=contract_area_id where a.contract_id="+tec.getContractId()+" and DATE(b.create_time) in('"+ String.join(",", dateList) +"')");
+              List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList(" select DATE(b.record_time) ds,b.weather from m_project_contract_area a join u_weather_info b on a.id=contract_area_id where a.contract_id="+tec.getContractId()+" and DATE(b.record_time) in('"+ String.join(",", dateList) +"')");
               Map<String,String> map= new HashMap<>();
                listMap.forEach(m->{
                    map.put(Func.toStr(m.get("ds")),Func.toStr(m.get("weather")));