فهرست منبع

Merge remote-tracking branch 'origin/master'

liuyc 2 سال پیش
والد
کامیت
0eca00e748
21فایلهای تغییر یافته به همراه509 افزوده شده و 35 حذف شده
  1. 33 0
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  2. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ProjectCostBudgetDTO.java
  3. 27 4
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java
  4. 33 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DepartmentMonthPlanVO.java
  5. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java
  6. 26 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentMonthPlanController.java
  7. 74 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentPlanLogController.java
  8. 25 7
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  9. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.java
  10. 15 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml
  11. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentPlanLogMapper.java
  12. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentPlanLogMapper.xml
  13. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  14. 11 2
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  15. 8 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentMonthPlanService.java
  16. 12 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentPlanLogService.java
  17. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  18. 70 3
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  19. 122 17
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java
  20. 28 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  21. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

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

@@ -1,6 +1,9 @@
 package org.springblade.common.utils;
 
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.drew.imaging.ImageMetadataReader;
 import com.drew.imaging.ImageProcessingException;
 import com.drew.metadata.Metadata;
@@ -21,6 +24,7 @@ import java.math.BigDecimal;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -450,6 +454,35 @@ public class CommonUtil {
     }
 
 
+    /**
+     * 根据起止日期获取工作日
+     * @return
+     */
+    public static int getWorkDays(LocalDate startTime,LocalDate endTime){
+        StringBuilder str = new StringBuilder();
+        List<String> list = new ArrayList<>();
+        while (!startTime.equals(endTime)){
+            str.append("d="+startTime+"&");
+            list.add(startTime.toString());
+            startTime = startTime.plusDays(1L);
+        }
+        str.append("d="+endTime+"&");
+        list.add(endTime.toString());
+        str.append("type=Y");
+        String post = HttpUtil.get("http://timor.tech/api/holiday/batch?" + str.toString());
+        JSONObject jsonObject = JSON.parseObject(post).getJSONObject("type");
+        System.out.println(jsonObject);
+        int workDays = 0;
+        for (String s : list) {
+            Map map = JSONObject.parseObject(jsonObject.get(s).toString(), Map.class);
+            int type = (int) map.get("type");
+            if (type == 0 || type == 3){
+                workDays++;
+            }
+        }
+        return workDays;
+    }
+
     // 上传文件路径获取
     public String getSysFileUrl() {
 

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ProjectCostBudgetDTO.java

@@ -24,4 +24,7 @@ public class ProjectCostBudgetDTO {
 
     @ApiModelProperty(value = "建设单位预算集合")
     private List<ProjectCostBudget> constructUnit;
+
+    @ApiModelProperty(value = "部门计划集合")
+    private List<ProjectCostBudget> departmentPlanList;
 }

+ 27 - 4
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java

@@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode;
 import org.springblade.core.mp.base.BaseEntity;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.Date;
 
@@ -59,7 +60,7 @@ public class DepartmentPlanLog extends BaseEntity {
             pattern = "yyyy-MM-dd"
     )
     @ApiModelProperty(value = "中途暂停时间")
-    private LocalDate timeOut;
+    private LocalDate pauseTime;
 
     @DateTimeFormat(
             pattern = "yyyy-MM-dd"
@@ -79,15 +80,37 @@ public class DepartmentPlanLog extends BaseEntity {
     @ApiModelProperty(value = "中途开启计划-结束时间")
     private LocalDate openPlanEndTime;
 
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "中途暂停计划-开始时间")
+    private LocalDate pausePlanStartTime;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "中途暂停计划-结束时间")
+    private LocalDate pausePlanEndTime;
+
+
+    @ApiModelProperty(value = "计划天数")
+    private BigDecimal planDays;
+
     @ApiModelProperty(value = "实际工作时间")
-    private Integer realWorkDays;
+    private BigDecimal realWorkDays;
 
     @ApiModelProperty(value = "计划执行顺序")
     private Integer sort;
 
     @ApiModelProperty(value = "中途开启计划起止天数")
-    private Integer openPlanStartEndDays;
+    private BigDecimal openPlanStartEndDays;
 
     @ApiModelProperty(value = "上一次中途开启计划起止天数")
-    private Integer lastOpenPlanStartEndDays;
+    private BigDecimal lastOpenPlanStartEndDays;
 }

+ 33 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DepartmentMonthPlanVO.java

@@ -0,0 +1,33 @@
+package org.springblade.control.vo;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.DepartmentMonthPlan;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/12 15:42
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DepartmentMonthPlanVO extends DepartmentMonthPlan {
+
+    @ApiModelProperty(value = "计划数量")
+    private Integer planTotal;
+
+    @ApiModelProperty(value = "已完成计划")
+    private Integer finishPlanTotal;
+
+    @ApiModelProperty(value = "未完成计划")
+    private Integer beginPlanTotal;
+
+}

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java

@@ -35,6 +35,9 @@ public class ProjectCostBudgetVO extends ProjectCostBudget {
     @ApiModelProperty(value = "岗位类型值")
     private String postTypeValue;
 
+    @ApiModelProperty(value = "状态值")
+    private String statusValue;
+
     @ApiModelProperty(value = "计划施工单位")
     private Map<Integer,List<ProjectCostBudgetVO2>> buildUnit;
 

+ 26 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentMonthPlanController.java

@@ -6,9 +6,12 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springblade.control.dto.ControlContractInfoDTO;
+import org.springblade.control.dto.ProjectCostBudgetDTO;
 import org.springblade.control.entity.DepartmentMonthPlan;
 import org.springblade.control.entity.ProjectReimbursement;
 import org.springblade.control.service.IDepartmentMonthPlanService;
+import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
 
@@ -24,6 +27,18 @@ import org.springframework.web.bind.annotation.*;
 public class DepartmentMonthPlanController {
 
     private final IDepartmentMonthPlanService planService;
+
+
+    /**
+     * 部门月计划分页
+     */
+    @GetMapping("/getPage")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "部门月计划分页")
+    public R getPage(ControlContractInfoDTO dto, Query query) {
+        return R.data(planService.getPage(dto,query));
+    }
+
     /**
      * 新增部门月计划
      */
@@ -48,6 +63,17 @@ public class DepartmentMonthPlanController {
         return R.data(planService.getDepartmentPlan(plan));
     }
 
+    /**
+     * 修改部门月计划
+     */
+    @PostMapping("/updateDepartmentPlan")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "新增部门月计划")
+    public R updateDepartmentPlan(@RequestBody ProjectCostBudgetDTO dto) {
+        planService.updateDepartmentPlan(dto);
+        return R.success("保存成功");
+    }
+
     /**
      * 获取前5个部门列表
      */

+ 74 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentPlanLogController.java

@@ -8,11 +8,15 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.control.dto.AnnualBudgetDTO;
+import org.springblade.control.entity.DepartmentPlanLog;
 import org.springblade.control.service.IAnnualBudgetService;
+import org.springblade.control.service.IDepartmentPlanLogService;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDate;
+
 /**
  * @Param
  * @Author wangwl
@@ -24,5 +28,75 @@ import org.springframework.web.bind.annotation.*;
 @Api(value = "部门计划日志接口", tags = "部门计划日志接口")
 public class DepartmentPlanLogController {
 
+    private final IDepartmentPlanLogService logService;
+
+//    /**
+//     * 根据暂停时间获取实际工时
+//     */
+//    @GetMapping("/getRealWorkDays")
+//    @ApiOperationSupport(order = 2)
+//    @ApiOperation(value = "获取实际工时")
+//    public R getRealWorkDays(LocalDate date) {
+//        return R.data(logService.getRealWorkDays(date));
+//    }
+
+    /**
+     * 暂停时获取计划
+     */
+    @GetMapping("/getPlanInPause")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "暂停时获取计划")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "计划的id", required = true),
+    })
+    public R getPlanInPause(Long id) {
+        return R.data(logService.getPlanInPause(id));
+    }
+
+    /**
+     * 暂停保存
+     */
+    @PostMapping("/savePlanInPause")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "暂停保存")
+    public R savePlanInPause(@RequestBody DepartmentPlanLog log) {
+        logService.savePlanInPause(log);
+        return R.success("暂停成功");
+    }
+
+
+    /**
+     * 开启时获取计划
+     */
+    @GetMapping("/getPlanInOpen")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "开启时获取计划")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "计划的id", required = true),
+    })
+    public R getPlanInOpen(Long id) {
+        return R.data(logService.getPlanInOpen(id));
+    }
+
+    /**
+     * 开启保存
+     */
+    @PostMapping("/savePlanInOpen")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "开启保存")
+    public R savePlanInOpen(@RequestBody DepartmentPlanLog log) {
+        logService.savePlanInOpen(log);
+        return R.success("开启成功");
+    }
+
+    /**
+     * 修改开启计划时间
+     */
+    @PostMapping("/updateOpenTime")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "修改开启计划时间")
+    public R updateOpenTime(@RequestBody DepartmentPlanLog log) {
+        return R.data(logService.updateOpenTime(log));
+    }
 
 }

+ 25 - 7
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java

@@ -13,8 +13,11 @@ import org.springblade.control.service.IProjectCostBudgetService;
 import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDate;
+
 /**
  * @Param
  * @Author wangwl
@@ -69,18 +72,33 @@ public class ProjectCostBudgetController {
     }
 
     /**
-     * 获取部门月计划
+     * 根据起止日期获取工作日
      */
-    @GetMapping("/getDepartmentPlan")
+    @GetMapping("/getWorkDays")
     @ApiOperationSupport(order = 1)
-    @ApiOperation(value = "获取部门月计划")
+    @ApiOperation(value = "根据起止日期获取工作日")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "departmentType", value = "部门类型", required = true),
-            @ApiImplicitParam(name = "planDate", value = "查询月份", required = true),
+            @ApiImplicitParam(name = "startDate", value = "开始日期", required = true),
+            @ApiImplicitParam(name = "endDate", value = "结束日期", required = true),
     })
-    public R getDepartmentPlan(Integer departmentType,String planDate){
-        return R.data(budgetService.getDepartmentPlan(departmentType,planDate));
+    public R getWorkDays(@RequestParam("startDate") @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate startDate,
+                         @RequestParam("endDate") @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate endDate){
+        return R.data(budgetService.getWorkDays(startDate,endDate));
     }
 
+//    /**
+//     * 获取部门月计划
+//     */
+//    @GetMapping("/getDepartmentPlan")
+//    @ApiOperationSupport(order = 1)
+//    @ApiOperation(value = "获取部门月计划")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(name = "departmentType", value = "部门类型", required = true),
+//            @ApiImplicitParam(name = "planDate", value = "查询月份", required = true),
+//    })
+//    public R getDepartmentPlan(Integer departmentType,String planDate){
+//        return R.data(budgetService.getDepartmentPlan(departmentType,planDate));
+//    }
+
 
 }

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

@@ -3,11 +3,13 @@ package org.springblade.control.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.springblade.control.dto.ControlContractInfoDTO;
 import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.ControlProjectInfo;
 import org.springblade.control.entity.DepartmentMonthPlan;
 import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.control.vo.DepartmentMonthPlanVO;
 
 import java.util.List;
 
@@ -22,4 +24,6 @@ public interface DepartmentMonthPlanMapper extends BaseMapper<DepartmentMonthPla
     List<DictInfo> getDepartmentDict();
 
     String getDepartmentName(@Param("departmentType") Integer departmentType);
+
+    List<DepartmentMonthPlanVO> getPage(IPage page,@Param("dto") ControlContractInfoDTO dto);
 }

+ 15 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml

@@ -9,4 +9,19 @@
     <select id="getDepartmentName" resultType="java.lang.String">
         select dict_name from c_dict_info WHERE code = 'department_type' and dict_value = #{departmentType}
     </select>
+    <select id="getPage" resultType="org.springblade.control.vo.DepartmentMonthPlanVO">
+        SELECT dmp.*,
+               (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.cost_type = dmp.department_type
+                    and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
+                    or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'planTotal',
+                (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.cost_type = dmp.department_type
+                                                                   and pcb.status = 4
+                    and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
+                    or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'finishPlanTotal',
+                (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.cost_type = dmp.department_type
+                                                                   and pcb.status != 4
+                    and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
+                    or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'beginPlanTotal'
+        FROM c_department_month_plan dmp
+    </select>
 </mapper>

+ 1 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentPlanLogMapper.java

@@ -12,4 +12,5 @@ import org.springblade.control.entity.DepartmentPlanLog;
  **/
 public interface DepartmentPlanLogMapper extends BaseMapper<DepartmentPlanLog> {
 
+    DepartmentPlanLog getNewestPlanLog(@Param("id") Long id);
 }

+ 6 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentPlanLogMapper.xml

@@ -3,4 +3,10 @@
 <mapper namespace="org.springblade.control.mapper.DepartmentPlanLogMapper">
 
 
+    <select id="getNewestPlanLog" resultType="org.springblade.control.entity.DepartmentPlanLog">
+        select * from c_department_plan_log
+        where plan_id = #{id}
+        order by sort desc
+        limit 1
+    </select>
 </mapper>

+ 2 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -40,4 +40,6 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     void removeChildrenPlan(@Param("projectId") Long projectId);
 
     List<ProjectCostBudgetVO> getDepartmentPlan(@Param("type") Integer type,@Param("startDate") LocalDate startDate,@Param("endDate") LocalDate endDate);
+
+    void updateStatus(@Param("id") Long id,@Param("status") int status);
 }

+ 11 - 2
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.springblade.control.mapper.ProjectCostBudgetMapper">
+    <update id="updateStatus">
+        update c_project_cost_budget set status = #{status} where id = #{id}
+    </update>
 
 
     <delete id="removeOldBudget">
@@ -67,12 +70,18 @@
     </select>
     <select id="getDepartmentPlan" resultType="org.springblade.control.vo.ProjectCostBudgetVO">
         select pcb.*,
+               case pcb.status
+                   when 1 then '未开始'
+                   when 2 then '进行中'
+                   when 3 then '暂停'
+                   when 4 then '已完成'
+                   end  as statusValue,
                (select cpi.name from c_control_project_info cpi WHERE cpi.id = pcb.project_id) as projectName,
                (select cpp.name from c_project_process cpp WHERE cpp.id = pcb.project_process) as projectProcessValue
         from c_project_cost_budget pcb
         WHERE pcb.cost_type = #{type}
-          and (pcb.plan_start_date BETWEEN #{startDate} AND #{endDate}
-            or pcb.plan_end_date BETWEEN #{startDate} AND #{endDate})
+          and (pcb.plan_start_time BETWEEN #{startDate} AND #{endDate}
+            or pcb.plan_end_time BETWEEN #{startDate} AND #{endDate})
     </select>
 
 

+ 8 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentMonthPlanService.java

@@ -1,12 +1,16 @@
 package org.springblade.control.service;
 
+import org.springblade.control.dto.ControlContractInfoDTO;
 import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.dto.ProjectCostBudgetDTO;
 import org.springblade.control.entity.DepartmentMonthPlan;
 import org.springblade.control.entity.DictInfo;
 import org.springblade.control.entity.ProjectProcess;
+import org.springblade.control.vo.DepartmentMonthPlanVO;
 import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.control.vo.ProjectProcessVO;
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
 
 import java.util.List;
 
@@ -17,9 +21,13 @@ import java.util.List;
  **/
 public interface IDepartmentMonthPlanService extends BaseService<DepartmentMonthPlan> {
 
+    List<DepartmentMonthPlanVO> getPage(ControlContractInfoDTO dto, Query query) ;
+
     List<ProjectCostBudgetVO> addDepartmentPlan(DepartmentMonthPlan plan);
 
     List<DictInfo> getDepartmentDict();
 
     List<ProjectCostBudgetVO> getDepartmentPlan(DepartmentMonthPlan plan);
+
+    void updateDepartmentPlan(ProjectCostBudgetDTO dto);
 }

+ 12 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentPlanLogService.java

@@ -6,6 +6,7 @@ import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.core.mp.base.BaseService;
 
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -15,4 +16,15 @@ import java.util.List;
  **/
 public interface IDepartmentPlanLogService extends BaseService<DepartmentPlanLog> {
 
+    Integer getRealWorkDays(LocalDate date);
+
+    DepartmentPlanLog getPlanInPause(Long id);
+
+    void savePlanInPause(DepartmentPlanLog log);
+
+    DepartmentPlanLog getPlanInOpen(Long id);
+
+    void savePlanInOpen(DepartmentPlanLog log);
+
+    DepartmentPlanLog updateOpenTime(DepartmentPlanLog log);
 }

+ 5 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -13,6 +13,7 @@ import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
 
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
@@ -38,4 +39,8 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     void updatePlan(ProjectCostBudgetVO vo);
     //根据部门类型和日期查询计划
     List<ProjectCostBudgetVO> getDepartmentPlan(Integer type,String date);
+    //根据id修改状态
+    void updateStatus(Long id, int status);
+
+    Integer getWorkDays(LocalDate startDate, LocalDate endDate);
 }

+ 70 - 3
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java

@@ -1,25 +1,32 @@
 package org.springblade.control.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.control.dto.ControlContractInfoDTO;
 import org.springblade.control.dto.ControlProjectInfoDTO;
-import org.springblade.control.entity.DepartmentMonthPlan;
-import org.springblade.control.entity.DictInfo;
-import org.springblade.control.entity.ProjectProcess;
+import org.springblade.control.dto.ProjectCostBudgetDTO;
+import org.springblade.control.entity.*;
 import org.springblade.control.mapper.DepartmentMonthPlanMapper;
 import org.springblade.control.mapper.ProjectProcessMapper;
 import org.springblade.control.service.IDepartmentMonthPlanService;
+import org.springblade.control.service.IDepartmentPlanLogService;
 import org.springblade.control.service.IProjectCostBudgetService;
 import org.springblade.control.service.IProjectProcessService;
+import org.springblade.control.vo.DepartmentMonthPlanVO;
 import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.control.vo.ProjectProcessVO;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Query;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDate;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -33,6 +40,18 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
 
     private final IProjectCostBudgetService budgetService;
 
+    private final IDepartmentPlanLogService logService;
+
+
+    /**
+     * 部门月计划分页
+     */
+    @Override
+    public List<DepartmentMonthPlanVO> getPage(ControlContractInfoDTO dto, Query query) {
+        IPage page = new Page(query.getCurrent(), query.getSize());
+        return baseMapper.getPage(page,dto);
+    }
+
     /**
      * 新增部门月计划
      */
@@ -51,6 +70,25 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
         String planDate = plan.getPlanDate();
         String[] date = planDate.split("-");
         plan.setPlanName(date[0]+"年"+date[1]+"月"+departmentName+"预算计划");
+        LocalDate startDate;
+        LocalDate endDate;
+        startDate =  LocalDate.of(Integer.parseInt(date[0]),Integer.parseInt(date[1]),1);
+        if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(Integer.parseInt(date[1]))){
+            endDate =  LocalDate.of(Integer.parseInt(date[0]),Integer.parseInt(date[1]),31);
+        }else {
+            if (Integer.parseInt(date[1]) != 2) {
+                endDate = LocalDate.of(Integer.parseInt(date[0]), Integer.parseInt(date[1]), 30);
+            }else {
+                if (Integer.parseInt(date[1]) % 4 == 0){
+                    endDate = LocalDate.of(Integer.parseInt(date[0]), Integer.parseInt(date[1]), 29);
+                }else {
+                    endDate = LocalDate.of(Integer.parseInt(date[0]), Integer.parseInt(date[1]), 28);
+                }
+            }
+        }
+
+        plan.setPlanStartDate(startDate);
+        plan.setPlanEndDate(endDate);
         this.save(plan);
         //查询出部门当月的项目计划,返回
         return getDepartmentPlan(plan);
@@ -80,4 +118,33 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
         }
         return voList;
     }
+
+    /**
+     * 修改部门月计划
+     */
+    @Override
+    @Transactional
+    public void updateDepartmentPlan(ProjectCostBudgetDTO dto) {
+        List<ProjectCostBudget> list = dto.getDepartmentPlanList();
+        if (list != null && list.size() > 0){
+            for (ProjectCostBudget budget : list) {
+                if (budget.getTaskUser() != null && budget.getStatus() == 1){
+                    //分配任务人,开始执行计划
+                    DepartmentPlanLog planLog = new DepartmentPlanLog();
+                    planLog.setPlanId(budget.getId());
+                    planLog.setPlanStartTime(budget.getPlanStartTime());
+                    planLog.setPlanEndTime(budget.getPlanEndTime());
+                    planLog.setRealPlanStartTime(LocalDate.now());
+                    planLog.setPlanDays(budget.getPlanDays());
+                    planLog.setSort(1);
+                    logService.save(planLog);
+                    //修改计划状态为进行中
+                    budget.setStatus(2);
+                }
+            }
+            budgetService.updateBatchById(list);
+        }else {
+            throw new ServiceException("暂无数据,无需保存");
+        }
+    }
 }

+ 122 - 17
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java

@@ -1,29 +1,18 @@
 package org.springblade.control.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
 import lombok.AllArgsConstructor;
-import org.springblade.common.utils.SnowFlakeUtil;
-import org.springblade.control.dto.ControlProjectInfoDTO;
-import org.springblade.control.entity.ControlContractInfo;
-import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.common.utils.CommonUtil;
 import org.springblade.control.entity.DepartmentPlanLog;
-import org.springblade.control.entity.DictInfo;
 import org.springblade.control.mapper.DepartmentPlanLogMapper;
-import org.springblade.control.mapper.ProjectInfoMapper;
-import org.springblade.control.service.IContractInfoService;
-import org.springblade.control.service.IDepartmentPlanLogService;
-import org.springblade.control.service.IProjectInfoService;
-import org.springblade.control.service.IProjectProcessService;
-import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.control.service.*;;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.mp.support.Query;
-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.ChronoUnit;
 import java.util.List;
 
 /**
@@ -35,4 +24,120 @@ import java.util.List;
 @AllArgsConstructor
 public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapper, DepartmentPlanLog> implements IDepartmentPlanLogService {
 
+    private final IProjectCostBudgetService budgetService;
+
+    /**
+     * 根据暂停时间获取实际工时
+     */
+    @Override
+    public Integer getRealWorkDays(LocalDate date) {
+        return null;
+    }
+
+    /**
+     * 暂停时获取计划信息
+     */
+    @Override
+    public DepartmentPlanLog getPlanInPause(Long id) {
+        //获取计划最新的执行情况
+        DepartmentPlanLog log = baseMapper.getNewestPlanLog(id);
+        //设置中途暂停计划日期为今天
+        log.setPauseTime(LocalDate.now());
+        //计算暂停日期和,中途开启计划的开始日期,之前的工作天数,如果是第一次暂停,则中途开启为null,则计算计划实际开始日期
+        int days;
+        if (log.getOpenPlanStartTime() != null){
+            days = CommonUtil.getWorkDays(log.getOpenPlanStartTime(),log.getPauseTime());
+        }else {
+            days = CommonUtil.getWorkDays(log.getRealPlanStartTime(),log.getPauseTime());
+        }
+        //更新计划实际工作日期,如果是第一次暂停则默认为0+
+        if (log.getRealWorkDays() == null){
+            log.setRealWorkDays(new BigDecimal("0"));
+        }
+        log.setRealWorkDays(log.getRealWorkDays().add(new BigDecimal(days)));
+        return log;
+    }
+
+    /**
+     * 暂停保存
+     */
+    @Override
+    @Transactional
+    public void savePlanInPause(DepartmentPlanLog log) {
+        if (log.getPauseTime() == null){
+            throw new ServiceException("请输入暂停时间");
+        }
+        log.setId(null);
+        log.setSort(log.getSort()+1);
+        log.setStatus(0);
+        this.save(log);
+        budgetService.updateStatus(log.getPlanId(),3);
+    }
+
+    /**
+     * 开始时获取计划信息
+     */
+    @Override
+    public DepartmentPlanLog getPlanInOpen(Long id) {
+        //获取计划最新的执行情况
+        DepartmentPlanLog log = baseMapper.getNewestPlanLog(id);
+        //先设置上一次开启计划工时,因为下面会修改
+        if (log.getOpenPlanStartEndDays() == null){
+            log.setLastOpenPlanStartEndDays(null);
+        }else{
+            log.setLastOpenPlanStartEndDays(log.getOpenPlanStartEndDays());
+        }
+        //设置中途暂停开始时间,则为上一次开始时间
+        if (log.getOpenPlanStartTime() != null){
+            log.setPausePlanStartTime(log.getOpenPlanStartTime());
+        }else {
+            log.setPausePlanStartTime(log.getRealPlanStartTime());
+        }
+        //设置中途暂停结束时间,则为暂停时间
+        log.setPausePlanEndTime(LocalDate.now());
+        //计算剩余工作量
+        BigDecimal days = log.getPlanDays().subtract(log.getRealWorkDays());
+        //如果剩余天数大于0,才设置默认值
+//        if (days.intValue() > 0) {
+//            //设置默认,开启计划开启时间为今天
+//            log.setOpenPlanStartTime(LocalDate.now());
+//            //设置默认,开启计划结束时间为剩下的工作量加上今天
+//            log.setOpenPlanEndTime(LocalDate.now().plusDays(days.longValue()));
+//            //设置中途开启的计划起止天数,默认值为剩余工作量
+//            log.setOpenPlanStartEndDays(days);
+//        }else {
+//            log.setOpenPlanStartTime(null);
+//            log.setOpenPlanEndTime(null);
+//            log.setOpenPlanStartEndDays(null);
+//        }
+        log.setOpenPlanStartTime(null);
+        log.setOpenPlanEndTime(null);
+        log.setOpenPlanStartEndDays(null);
+        return log;
+    }
+
+    @Override
+    public void savePlanInOpen(DepartmentPlanLog log) {
+        if (log.getOpenPlanStartTime() == null || log.getOpenPlanEndTime() == null){
+            throw new ServiceException("请输入完整的起止时间");
+        }
+        log.setId(null);
+        log.setSort(log.getSort()+1);
+        log.setStatus(1);
+        this.save(log);
+        budgetService.updateStatus(log.getPlanId(),2);
+    }
+
+    /**
+     * 修改开启计划时间,目前只能修改停止时间
+     * @param log
+     * @return
+     */
+    @Override
+    public DepartmentPlanLog updateOpenTime(DepartmentPlanLog log) {
+        //计算中途开启的工作日
+        int planDays = CommonUtil.getWorkDays(log.getOpenPlanStartTime(), log.getOpenPlanEndTime());
+        log.setOpenPlanStartEndDays(new BigDecimal(planDays));
+        return log;
+    }
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.dto.ProjectCostBudgetDTO;
@@ -237,12 +238,38 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(month)){
             endDate =  LocalDate.of(year,month,31);
         }else {
-            endDate =  LocalDate.of(year,month,30);
+            if (month != 2) {
+                endDate = LocalDate.of(year, month, 30);
+            }else {
+                if (year % 4 == 0){
+                    endDate = LocalDate.of(year, month, 29);
+                }else {
+                    endDate = LocalDate.of(year, month, 28);
+                }
+            }
         }
         List<ProjectCostBudgetVO> departmentPlan = baseMapper.getDepartmentPlan(type, startDate, endDate);
         return departmentPlan;
     }
 
+    /**
+     * 根据id修改状态
+     * @param id
+     * @param status
+     */
+    @Override
+    public void updateStatus(Long id, int status) {
+        baseMapper.updateStatus(id,status);
+    }
+
+    /**
+     * 根据起止日期获取工作日
+     */
+    @Override
+    public Integer getWorkDays(LocalDate startDate, LocalDate endDate) {
+        return CommonUtil.getWorkDays(startDate,endDate);
+    }
+
     /**
      * 统计一行的几个总金额
      */

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -389,7 +389,7 @@
             as notExsitChild
         FROM m_archive_tree_contract matc1
         WHERE  matc1.parent_id in (select id from m_archive_tree_contract
-                            WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId})
+                            WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId} and is_deleted = 0)
                               and tree_code is NULL)
           and matc1.is_deleted = 0
     </select>