瀏覽代碼

部门月度计划预算所有接口

qianxb 2 年之前
父節點
當前提交
667a354fb5
共有 13 個文件被更改,包括 230 次插入16 次删除
  1. 33 0
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  2. 33 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DepartmentMonthPlanVO.java
  3. 14 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentMonthPlanController.java
  4. 11 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentPlanLogController.java
  5. 18 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  6. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.java
  7. 15 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml
  8. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentMonthPlanService.java
  9. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentPlanLogService.java
  10. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  11. 35 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  12. 39 15
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java
  13. 18 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

+ 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() {
 

+ 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;
+
+}

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

@@ -6,10 +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.*;
 
@@ -25,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));
+    }
+
     /**
      * 新增部门月计划
      */

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

@@ -64,6 +64,7 @@ public class DepartmentPlanLogController {
         return R.success("暂停成功");
     }
 
+
     /**
      * 开启时获取计划
      */
@@ -88,4 +89,14 @@ public class DepartmentPlanLogController {
         return R.success("开启成功");
     }
 
+    /**
+     * 修改开启计划时间
+     */
+    @PostMapping("/updateOpenTime")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "修改开启计划时间")
+    public R updateOpenTime(@RequestBody DepartmentPlanLog log) {
+        return R.data(logService.updateOpenTime(log));
+    }
+
 }

+ 18 - 0
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
@@ -68,6 +71,21 @@ public class ProjectCostBudgetController {
         return R.success("保存成功");
     }
 
+    /**
+     * 根据起止日期获取工作日
+     */
+    @GetMapping("/getWorkDays")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "根据起止日期获取工作日")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "startDate", value = "开始日期", required = true),
+            @ApiImplicitParam(name = "endDate", value = "结束日期", required = true),
+    })
+    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));
+    }
+
 //    /**
 //     * 获取部门月计划
 //     */

+ 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>

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

@@ -1,13 +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;
 
@@ -18,6 +21,8 @@ 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();

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

@@ -25,4 +25,6 @@ public interface IDepartmentPlanLogService extends BaseService<DepartmentPlanLog
     DepartmentPlanLog getPlanInOpen(Long id);
 
     void savePlanInOpen(DepartmentPlanLog log);
+
+    DepartmentPlanLog updateOpenTime(DepartmentPlanLog log);
 }

+ 3 - 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;
 
@@ -40,4 +41,6 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     List<ProjectCostBudgetVO> getDepartmentPlan(Integer type,String date);
     //根据id修改状态
     void updateStatus(Long id, int status);
+
+    Integer getWorkDays(LocalDate startDate, LocalDate endDate);
 }

+ 35 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java

@@ -1,8 +1,11 @@
 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.dto.ProjectCostBudgetDTO;
 import org.springblade.control.entity.*;
@@ -12,15 +15,18 @@ 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;
 
 /**
@@ -36,6 +42,16 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
 
     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);
+    }
+
     /**
      * 新增部门月计划
      */
@@ -54,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);

+ 39 - 15
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java

@@ -2,9 +2,11 @@ package org.springblade.control.service.impl;
 
 
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.CommonUtil;
 import org.springblade.control.entity.DepartmentPlanLog;
 import org.springblade.control.mapper.DepartmentPlanLogMapper;
 import org.springblade.control.service.*;;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -42,11 +44,11 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
         //设置中途暂停计划日期为今天
         log.setPauseTime(LocalDate.now());
         //计算暂停日期和,中途开启计划的开始日期,之前的工作天数,如果是第一次暂停,则中途开启为null,则计算计划实际开始日期
-        Long days;
+        int days;
         if (log.getOpenPlanStartTime() != null){
-            days = log.getOpenPlanStartTime().until(log.getPauseTime(), ChronoUnit.DAYS);
+            days = CommonUtil.getWorkDays(log.getOpenPlanStartTime(),log.getPauseTime());
         }else {
-            days = log.getRealPlanStartTime().until(log.getPauseTime(), ChronoUnit.DAYS);
+            days = CommonUtil.getWorkDays(log.getRealPlanStartTime(),log.getPauseTime());
         }
         //更新计划实际工作日期,如果是第一次暂停则默认为0+
         if (log.getRealWorkDays() == null){
@@ -62,6 +64,9 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
     @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);
@@ -93,27 +98,46 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
         //计算剩余工作量
         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);
-        }
+//        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;
+    }
 }

+ 18 - 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,7 +238,15 @@ 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;
@@ -253,6 +262,14 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         baseMapper.updateStatus(id,status);
     }
 
+    /**
+     * 根据起止日期获取工作日
+     */
+    @Override
+    public Integer getWorkDays(LocalDate startDate, LocalDate endDate) {
+        return CommonUtil.getWorkDays(startDate,endDate);
+    }
+
     /**
      * 统计一行的几个总金额
      */