Ver Fonte

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

“zhifk” há 2 anos atrás
pai
commit
9abb6a7213
34 ficheiros alterados com 870 adições e 33 exclusões
  1. 55 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/AnnualBudget.java
  2. 68 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/AnnualBudgetDisburse.java
  3. 56 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/AnnualBudgetIncome.java
  4. 54 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentMonthPlan.java
  5. 2 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/InsertDataVO.java
  6. 24 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java
  7. 19 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetDisburseController.java
  8. 20 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetIncomeController.java
  9. 45 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentMonthPlanController.java
  10. 14 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  11. 14 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetDisburseMapper.java
  12. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetDisburseMapper.xml
  13. 14 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetIncomeMapper.java
  14. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetIncomeMapper.xml
  15. 18 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.java
  16. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml
  17. 25 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.java
  18. 12 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml
  19. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  20. 9 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  21. 15 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetDisburseService.java
  22. 15 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetIncomeService.java
  23. 19 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetService.java
  24. 23 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentMonthPlanService.java
  25. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  26. 23 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetDisburseServiceImpl.java
  27. 23 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetIncomeServiceImpl.java
  28. 31 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  29. 74 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  30. 29 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  31. 19 11
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/PublicScheduledTaskServiceImpl.java
  32. 11 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  33. 108 12
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  34. 5 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

+ 55 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/AnnualBudget.java

@@ -0,0 +1,55 @@
+package org.springblade.control.entity;
+
+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.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/13 13:52
+ **/
+@Data
+@TableName("c_annual_budget")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "年度经营预算表", description = "年度经营预算表")
+public class AnnualBudget extends BaseEntity {
+
+    @ApiModelProperty(value = "预算名称")
+    private String name;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "预算开始时间")
+    private LocalDate budgetStartDate;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "预算结束时间")
+    private LocalDate budgetEndDate;
+
+    @ApiModelProperty(value = "总预算")
+    private BigDecimal totalBudget;
+
+    @ApiModelProperty(value = "年度合同指标")
+    private BigDecimal annualContractTarget;
+
+    @ApiModelProperty(value = "年度利润指标")
+    private BigDecimal annualProfitTarget;
+}

+ 68 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/AnnualBudgetDisburse.java

@@ -0,0 +1,68 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/13 13:52
+ **/
+@Data
+@TableName("c_annual_budget_disburse")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "年度预算支出表", description = "年度预算支出表")
+public class AnnualBudgetDisburse extends BaseEntity {
+
+    @ApiModelProperty(value = "年度预算id")
+    private Long annualBudgetId;
+
+    @ApiModelProperty(value = "预算科目")
+    private Integer budgetSubject;
+
+    @ApiModelProperty(value = "二级科目")
+    private Integer secondSubject;
+
+    @ApiModelProperty(value = "一月")
+    private BigDecimal january;
+
+    @ApiModelProperty(value = "二月")
+    private BigDecimal february;
+
+    @ApiModelProperty(value = "三月")
+    private BigDecimal march;
+
+    @ApiModelProperty(value = "四月")
+    private BigDecimal april;
+
+    @ApiModelProperty(value = "五月")
+    private BigDecimal may;
+
+    @ApiModelProperty(value = "六月")
+    private BigDecimal june;
+
+    @ApiModelProperty(value = "七月")
+    private BigDecimal july;
+
+    @ApiModelProperty(value = "八月")
+    private BigDecimal august;
+
+    @ApiModelProperty(value = "九月")
+    private BigDecimal september;
+
+    @ApiModelProperty(value = "十月")
+    private BigDecimal october;
+
+    @ApiModelProperty(value = "十一月")
+    private BigDecimal november;
+
+    @ApiModelProperty(value = "十二月")
+    private BigDecimal december;
+
+}

+ 56 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/AnnualBudgetIncome.java

@@ -0,0 +1,56 @@
+package org.springblade.control.entity;
+
+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.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/13 13:52
+ **/
+@Data
+@TableName("c_annual_budget_income")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "年度预算收入表", description = "年度预算收入表")
+public class AnnualBudgetIncome extends BaseEntity {
+
+    @ApiModelProperty(value = "年度预算id")
+    private Long annualBudgetId;
+
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "收入类型")
+    private Integer incomeType;
+
+    @ApiModelProperty(value = "项目类型")
+    private Integer projectType;
+
+    @ApiModelProperty(value = "合同类型")
+    private Integer contractType;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "预计签单时间")
+    private LocalDate predictSignDate;
+
+    @ApiModelProperty(value = "预计新签合同额")
+    private BigDecimal predictContractMoney;
+
+    @ApiModelProperty(value = "预计本年度回款")
+    private BigDecimal predictAnnualReturned;
+
+}

+ 54 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentMonthPlan.java

@@ -0,0 +1,54 @@
+package org.springblade.control.entity;
+
+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.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/12 15:42
+ **/
+@Data
+@TableName("c_department_month_plan")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "部门月计划表", description = "部门月计划表")
+public class DepartmentMonthPlan extends BaseEntity {
+
+    @ApiModelProperty(value = "部门类型")
+    private Integer departmentType;
+
+    @ApiModelProperty(value = "计划日期")
+    private String planDate;
+
+    @ApiModelProperty(value = "计划名称")
+    private String planName;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "计划开始日期")
+    private LocalDate planStartDate;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "计划结束日期")
+    private LocalDate planEndDate;
+
+    @ApiModelProperty(value = "计划制定人")
+    private Long planDesigner;
+}

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/InsertDataVO.java

@@ -9,5 +9,7 @@ public class InsertDataVO {
     private String initTabName;
     private String key;
     private String Data;
+    private Integer dataLength;
+    private String name;
 
 }

+ 24 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java

@@ -0,0 +1,24 @@
+package org.springblade.control.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.entity.DepartmentMonthPlan;
+import org.springblade.control.service.IDepartmentMonthPlanService;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/12 15:45
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/annualBudget")
+@Api(value = "年度经营预算接口", tags = "年度经营预算接口")
+public class AnnualBudgetController {
+
+
+}

+ 19 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetDisburseController.java

@@ -0,0 +1,19 @@
+package org.springblade.control.controller;
+
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/12 15:45
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/annualBudgetDisburse")
+@Api(value = "年度预算支出接口", tags = "年度预算支出接口")
+public class AnnualBudgetDisburseController {
+
+}

+ 20 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetIncomeController.java

@@ -0,0 +1,20 @@
+package org.springblade.control.controller;
+
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/12 15:45
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/annualBudgetIncome")
+@Api(value = "年度预算收入接口", tags = "年度预算收入接口")
+public class AnnualBudgetIncomeController {
+
+
+}

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

@@ -0,0 +1,45 @@
+package org.springblade.control.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.entity.DepartmentMonthPlan;
+import org.springblade.control.entity.ProjectReimbursement;
+import org.springblade.control.service.IDepartmentMonthPlanService;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/12 15:45
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/departmentMonthPlan")
+@Api(value = "部门月度计划接口", tags = "部门月度计划接口")
+public class DepartmentMonthPlanController {
+
+    private final IDepartmentMonthPlanService planService;
+    /**
+     * 新增部门月计划
+     */
+    @PostMapping("/addDepartmentPlan")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "新增部门月计划")
+    public R addDepartmentPlan(@RequestBody DepartmentMonthPlan plan) {
+        return R.data(planService.addDepartmentPlan(plan));
+    }
+
+    /**
+     * 获取前5个部门列表
+     */
+    @GetMapping("/getDepartmentDict")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取部门列表")
+    public R getDepartmentDict() {
+        planService.getDepartmentDict();
+        return R.success("新增成功");
+    }
+}

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

@@ -68,5 +68,19 @@ public class ProjectCostBudgetController {
         return R.success("保存成功");
     }
 
+    /**
+     * 获取部门月计划
+     */
+    @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));
+    }
+
 
 }

+ 14 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetDisburseMapper.java

@@ -0,0 +1,14 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.control.entity.AnnualBudgetDisburse;
+import org.springblade.control.entity.AnnualBudgetIncome;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface AnnualBudgetDisburseMapper extends BaseMapper<AnnualBudgetDisburse> {
+
+}

+ 7 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetDisburseMapper.xml

@@ -0,0 +1,7 @@
+<?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.AnnualBudgetDisburseMapper">
+
+
+
+</mapper>

+ 14 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetIncomeMapper.java

@@ -0,0 +1,14 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.control.entity.AnnualBudget;
+import org.springblade.control.entity.AnnualBudgetIncome;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface AnnualBudgetIncomeMapper extends BaseMapper<AnnualBudgetIncome> {
+
+}

+ 7 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetIncomeMapper.xml

@@ -0,0 +1,7 @@
+<?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.AnnualBudgetIncomeMapper">
+
+
+
+</mapper>

+ 18 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.java

@@ -0,0 +1,18 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.control.entity.AnnualBudget;
+import org.springblade.control.entity.DepartmentMonthPlan;
+import org.springblade.control.entity.DictInfo;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface AnnualBudgetMapper extends BaseMapper<AnnualBudget> {
+
+}

+ 7 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml

@@ -0,0 +1,7 @@
+<?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.AnnualBudgetMapper">
+
+
+
+</mapper>

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

@@ -0,0 +1,25 @@
+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.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 java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface DepartmentMonthPlanMapper extends BaseMapper<DepartmentMonthPlan> {
+
+
+    List<DictInfo> getDepartmentDict();
+
+    String getDepartmentName(@Param("departmentType") Integer departmentType);
+}

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

@@ -0,0 +1,12 @@
+<?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.DepartmentMonthPlanMapper">
+
+
+    <select id="getDepartmentDict" resultType="org.springblade.control.entity.DictInfo">
+        select * from c_dict_info WHERE code = 'department_type' order by sort LIMIT 5
+    </select>
+    <select id="getDepartmentName" resultType="java.lang.String">
+        select dict_name from c_dict_info WHERE code = 'department_type' and dict_value = #{departmentType}
+    </select>
+</mapper>

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

@@ -13,6 +13,7 @@ import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.control.vo.ProjectCostBudgetVO2;
 import org.springblade.core.mp.support.Query;
 
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
@@ -37,4 +38,6 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     List<ProjectCostBudget> getAllChildrenPlan(@Param("id") Long id);
 
     void removeChildrenPlan(@Param("projectId") Long projectId);
+
+    List<ProjectCostBudgetVO> getDepartmentPlan(@Param("type") Integer type,@Param("startDate") LocalDate startDate,@Param("endDate") LocalDate endDate);
 }

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

@@ -65,6 +65,15 @@
     <select id="getAllChildrenPlan" resultType="org.springblade.control.entity.ProjectCostBudget">
         SELECT * FROM c_project_cost_budget  WHERE project_id = #{id} AND parent_id is not null
     </select>
+    <select id="getDepartmentPlan" resultType="org.springblade.control.vo.ProjectCostBudgetVO">
+        select pcb.*,
+               (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})
+    </select>
 
 
 </mapper>

+ 15 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetDisburseService.java

@@ -0,0 +1,15 @@
+package org.springblade.control.service;
+
+import org.springblade.control.entity.AnnualBudgetDisburse;
+import org.springblade.control.entity.AnnualBudgetIncome;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+public interface IAnnualBudgetDisburseService extends BaseService<AnnualBudgetDisburse> {
+
+
+}

+ 15 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetIncomeService.java

@@ -0,0 +1,15 @@
+package org.springblade.control.service;
+
+import org.springblade.control.entity.AnnualBudget;
+import org.springblade.control.entity.AnnualBudgetIncome;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+public interface IAnnualBudgetIncomeService extends BaseService<AnnualBudgetIncome> {
+
+
+}

+ 19 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetService.java

@@ -0,0 +1,19 @@
+package org.springblade.control.service;
+
+import org.springblade.control.entity.AnnualBudget;
+import org.springblade.control.entity.DepartmentMonthPlan;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+public interface IAnnualBudgetService extends BaseService<AnnualBudget> {
+
+
+}

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

@@ -0,0 +1,23 @@
+package org.springblade.control.service;
+
+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.vo.ProjectCostBudgetVO;
+import org.springblade.control.vo.ProjectProcessVO;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+public interface IDepartmentMonthPlanService extends BaseService<DepartmentMonthPlan> {
+
+    List<ProjectCostBudgetVO> addDepartmentPlan(DepartmentMonthPlan plan);
+
+    List<DictInfo> getDepartmentDict();
+}

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

@@ -36,4 +36,6 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     ProjectCostBudgetVO getPlanByProjectId(Long id);
     //修改项目计划
     void updatePlan(ProjectCostBudgetVO vo);
+    //根据部门类型和日期查询计划
+    List<ProjectCostBudgetVO> getDepartmentPlan(Integer type,String date);
 }

+ 23 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetDisburseServiceImpl.java

@@ -0,0 +1,23 @@
+package org.springblade.control.service.impl;
+
+import lombok.AllArgsConstructor;
+import org.springblade.control.entity.AnnualBudgetDisburse;
+import org.springblade.control.entity.AnnualBudgetIncome;
+import org.springblade.control.mapper.AnnualBudgetDisburseMapper;
+import org.springblade.control.mapper.AnnualBudgetIncomeMapper;
+import org.springblade.control.service.IAnnualBudgetDisburseService;
+import org.springblade.control.service.IAnnualBudgetIncomeService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+@Service
+@AllArgsConstructor
+public class AnnualBudgetDisburseServiceImpl extends BaseServiceImpl<AnnualBudgetDisburseMapper, AnnualBudgetDisburse> implements IAnnualBudgetDisburseService {
+
+
+}

+ 23 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetIncomeServiceImpl.java

@@ -0,0 +1,23 @@
+package org.springblade.control.service.impl;
+
+import lombok.AllArgsConstructor;
+import org.springblade.control.entity.AnnualBudget;
+import org.springblade.control.entity.AnnualBudgetIncome;
+import org.springblade.control.mapper.AnnualBudgetIncomeMapper;
+import org.springblade.control.mapper.AnnualBudgetMapper;
+import org.springblade.control.service.IAnnualBudgetIncomeService;
+import org.springblade.control.service.IAnnualBudgetService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+@Service
+@AllArgsConstructor
+public class AnnualBudgetIncomeServiceImpl extends BaseServiceImpl<AnnualBudgetIncomeMapper, AnnualBudgetIncome> implements IAnnualBudgetIncomeService {
+
+
+}

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

@@ -0,0 +1,31 @@
+package org.springblade.control.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.AllArgsConstructor;
+import org.springblade.control.entity.AnnualBudget;
+import org.springblade.control.entity.DepartmentMonthPlan;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.mapper.AnnualBudgetMapper;
+import org.springblade.control.mapper.DepartmentMonthPlanMapper;
+import org.springblade.control.service.IAnnualBudgetService;
+import org.springblade.control.service.IDepartmentMonthPlanService;
+import org.springblade.control.service.IProjectCostBudgetService;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+@Service
+@AllArgsConstructor
+public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper, AnnualBudget> implements IAnnualBudgetService {
+
+
+}

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

@@ -0,0 +1,74 @@
+package org.springblade.control.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
+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.mapper.DepartmentMonthPlanMapper;
+import org.springblade.control.mapper.ProjectProcessMapper;
+import org.springblade.control.service.IDepartmentMonthPlanService;
+import org.springblade.control.service.IProjectCostBudgetService;
+import org.springblade.control.service.IProjectProcessService;
+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.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 13:41
+ **/
+@Service
+@AllArgsConstructor
+public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMonthPlanMapper, DepartmentMonthPlan> implements IDepartmentMonthPlanService {
+
+    private final IProjectCostBudgetService budgetService;
+
+    /**
+     * 新增部门月计划
+     */
+    @Override
+    public List<ProjectCostBudgetVO> addDepartmentPlan(DepartmentMonthPlan plan) {
+        //判断数据库是否存在当前部门当前月数据
+        DepartmentMonthPlan one = this.getOne(new LambdaQueryWrapper<DepartmentMonthPlan>()
+                .eq(DepartmentMonthPlan::getDepartmentType, plan.getDepartmentType())
+                .eq(DepartmentMonthPlan::getPlanDate, plan.getPlanDate()));
+        if (one != null){
+            throw new ServiceException("新增失败,该部门该月份已存在计划");
+        }
+        //获取部门名称
+        String departmentName = baseMapper.getDepartmentName(plan.getDepartmentType());
+        //新增部门月计划,并且设置名称和起止日期,制定人
+        String planDate = plan.getPlanDate();
+        String[] date = planDate.split("-");
+        plan.setPlanName(date[0]+"年"+date[1]+"月"+departmentName+"预算计划");
+        this.save(plan);
+        //查询出部门当月的项目计划,返回
+        List<ProjectCostBudgetVO> voList = new ArrayList<>();
+        if (plan.getDepartmentType() != 5){
+            voList = budgetService.getDepartmentPlan(plan.getDepartmentType(),planDate);
+        }else {
+            voList.addAll(budgetService.getDepartmentPlan(5,planDate));
+            voList.addAll(budgetService.getDepartmentPlan(6,planDate));
+        }
+        return voList;
+    }
+
+    /**
+     * 获取部门列表,只要前5个
+     * @return
+     */
+    @Override
+    public List<DictInfo> getDepartmentDict() {
+        return baseMapper.getDepartmentDict();
+    }
+}

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

@@ -27,10 +27,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.time.LocalDate;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -202,6 +200,9 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 for (ProjectCostBudget budget : vo2ChildrenList) {
                     budget.setProjectId(vo.getProjectId());
                     budget.setParentId(vo2.getId());
+                    budget.setCostType(vo2.getCostType());
+                    budget.setUnitType(vo2.getUnitType());
+                    budget.setProjectProcess(vo2.getProjectProcess());
                 }
                 childrenList.addAll(vo2ChildrenList);
             }
@@ -218,6 +219,30 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         this.updateBatchById(parentList);
     }
 
+    /**
+     * 根据部门类型和日期查询计划
+     * @param type
+     * @param date
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudgetVO> getDepartmentPlan(Integer type, String date) {
+        //初始化时间段
+        String[] split = date.split("-");
+        int year = Integer.parseInt(split[0]);
+        int month = Integer.parseInt(split[1]);
+        LocalDate startDate;
+        LocalDate endDate;
+        startDate =  LocalDate.of(year,month,1);
+        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);
+        }
+        List<ProjectCostBudgetVO> departmentPlan = baseMapper.getDepartmentPlan(type, startDate, endDate);
+        return departmentPlan;
+    }
+
     /**
      * 统计一行的几个总金额
      */

+ 19 - 11
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/PublicScheduledTaskServiceImpl.java

@@ -7,6 +7,9 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 
 @Service
 @AllArgsConstructor
@@ -22,19 +25,24 @@ public class PublicScheduledTaskServiceImpl {
 
     /**
      * 定时删除费用管理的草稿数据信息
-     * cron = 三个月执行一次
+     * cron = 每天早上3点执行
      */
-    @Scheduled(cron = "0 0 0 1 */3 ?")
+    @Scheduled(cron = "0 0 3 * * ?")
     void delDraftDataInfo() {
-        LocalDate currentDate = LocalDate.now(); //当前时间
-        LocalDate threeMonthsAgo = currentDate.minusMonths(3); //三个月前的时间
-        emFinancialReimbursementService.remove(Wrappers.<EMFinancialReimbursementInfo>lambdaQuery().eq(EMFinancialReimbursementInfo::getIsTemp, 0).le(EMFinancialReimbursementInfo::getCreateTime, threeMonthsAgo));
-        emInvoiceService.remove(Wrappers.<EMInvoiceInfo>lambdaQuery().eq(EMInvoiceInfo::getIsTemp, 0).le(EMInvoiceInfo::getCreateTime, threeMonthsAgo));
-        emLoanService.remove(Wrappers.<EMLoanInfo>lambdaQuery().eq(EMLoanInfo::getIsTemp, 0).le(EMLoanInfo::getCreateTime, threeMonthsAgo));
-        emOutsourcingPayService.remove(Wrappers.<EMOutsourcingPayInfo>lambdaQuery().eq(EMOutsourcingPayInfo::getIsTemp, 0).le(EMOutsourcingPayInfo::getCreateTime, threeMonthsAgo));
-        emPayService.remove(Wrappers.<EMPayInfo>lambdaQuery().eq(EMPayInfo::getIsTemp, 0).le(EMPayInfo::getCreateTime, threeMonthsAgo));
-        emPurchaseService.remove(Wrappers.<EMPurchaseInfo>lambdaQuery().eq(EMPurchaseInfo::getIsTemp, 0).le(EMPurchaseInfo::getCreateTime, threeMonthsAgo));
-        emUseCarService.remove(Wrappers.<EMUseCarInfo>lambdaQuery().eq(EMUseCarInfo::getIsTemp, 0).le(EMUseCarInfo::getCreateTime, threeMonthsAgo));
+        LocalDate currentDate = LocalDate.now();
+        LocalTime midnight = LocalTime.MIDNIGHT;
+        LocalDateTime currentDateTime = LocalDateTime.of(currentDate, midnight); //当前日期时间
+        LocalDateTime threeMonthsAgoDateTime = currentDateTime.minusMonths(3); //三个月前日期时间
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String formattedDateTime = threeMonthsAgoDateTime.format(formatter);
+
+        emFinancialReimbursementService.remove(Wrappers.<EMFinancialReimbursementInfo>lambdaQuery().eq(EMFinancialReimbursementInfo::getIsTemp, 0).le(EMFinancialReimbursementInfo::getCreateTime, formattedDateTime));
+        emInvoiceService.remove(Wrappers.<EMInvoiceInfo>lambdaQuery().eq(EMInvoiceInfo::getIsTemp, 0).le(EMInvoiceInfo::getCreateTime, formattedDateTime));
+        emLoanService.remove(Wrappers.<EMLoanInfo>lambdaQuery().eq(EMLoanInfo::getIsTemp, 0).le(EMLoanInfo::getCreateTime, formattedDateTime));
+        emOutsourcingPayService.remove(Wrappers.<EMOutsourcingPayInfo>lambdaQuery().eq(EMOutsourcingPayInfo::getIsTemp, 0).le(EMOutsourcingPayInfo::getCreateTime, formattedDateTime));
+        emPayService.remove(Wrappers.<EMPayInfo>lambdaQuery().eq(EMPayInfo::getIsTemp, 0).le(EMPayInfo::getCreateTime, formattedDateTime));
+        emPurchaseService.remove(Wrappers.<EMPurchaseInfo>lambdaQuery().eq(EMPurchaseInfo::getIsTemp, 0).le(EMPurchaseInfo::getCreateTime, formattedDateTime));
+        emUseCarService.remove(Wrappers.<EMUseCarInfo>lambdaQuery().eq(EMUseCarInfo::getIsTemp, 0).le(EMUseCarInfo::getCreateTime, formattedDateTime));
     }
 
 }

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

@@ -1782,13 +1782,14 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             Elements bgBH = doc.select("el-input[placeholderxx~=报告编号.*]");
             Elements cbdwBH = doc.select("el-input[placeholderxx~=承包单位.*]");
             Elements jldwBH = doc.select("el-input[placeholderxx~=监理单位.*]");
+            Elements jcdwName = doc.select("el-input[placeholderxx~=检测单位名称.*]");
             Elements jlBH = doc.select("el-input[placeholderxx~=记录编号.*]");
             Elements gcName = doc.select("el-input[placeholderxx~=工程名称.*]");
             Elements sgName = doc.select("el-input[placeholderxx~=施工单位.*]");
             Elements wtName = doc.select("el-input[placeholderxx~=委托单位.*]");
             Elements htdName = doc.select("el-input[placeholderxx~=合同段/工区.*]");
 
-            ContractInfo contractInfo = jdbcTemplate.query("select construction_unit_name,supervision_unit_name,contract_name from m_contract_info where id = " + contractId, new BeanPropertyRowMapper<>(ContractInfo.class)).stream().findAny().orElse(null);
+            ContractInfo contractInfo = jdbcTemplate.query("select construction_unit_name,supervision_unit_name,contract_name,laboratory_name from m_contract_info where id = " + contractId, new BeanPropertyRowMapper<>(ContractInfo.class)).stream().findAny().orElse(null);
             if (contractInfo != null) {
                 //承包单位
                 if (cbdwBH.size() >= 1) {
@@ -1821,6 +1822,15 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         break;
                     }
                 }
+
+                //检测单位名称
+                if (jcdwName.size() >= 1) {
+                    for (Element element : jcdwName) {
+                        reData.put(element.attr("keyname"), ObjectUtils.isNotEmpty(contractInfo.getLaboratoryName()) ? contractInfo.getLaboratoryName() : "");
+                        break;
+                    }
+                }
+
                 //合同段/工区
                 if (htdName.size() >= 1) {
                     for (Element element : htdName) {

+ 108 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -3,15 +3,12 @@ package org.springblade.manager.service.impl;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.common.collect.Lists;
-import jodd.util.ArraysUtil;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang3.ObjectUtils;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
@@ -27,7 +24,6 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.dto.RangeInfo;
@@ -40,17 +36,18 @@ import org.springblade.manager.mapper.ContractInfoMapper;
 import org.springblade.manager.mapper.WbsTreeContractMapper;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.IWbsTreeContractService;
-import org.springblade.manager.utils.DiffListUtil;
 import org.springblade.manager.vo.*;
 import org.springblade.system.cache.ParamCache;
-import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedCaseInsensitiveMap;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.*;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -565,6 +562,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     .eq(WbsTreeContract::getWbsId, node.getWbsId()).eq(WbsTreeContract::getWbsType, node.getWbsType())
                     .eq(WbsTreeContract::getStatus, 1));
 
+            Map<Long, WbsTreeContract> tabMaps = tabs.stream().collect(Collectors.toMap(WbsTreeContract::getPKeyId, Function.identity()));
+
             //初始化表
             List<WbsTreeContract> sgTab = tabs.stream().filter(f -> "1,2,3".contains(f.getTableOwner())).collect(Collectors.toList());
             List<WbsTreeContract> jlTab = tabs.stream().filter(f -> "4,5,6".contains(f.getTableOwner())).collect(Collectors.toList());
@@ -648,6 +647,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     }
                 }
 
+                Set<String> filedNames = new HashSet<>();
                 //数据处理
                 for (Map.Entry<String, List<InsertDataVO>> oneTabData : maps.entrySet()) {
                     String initTabName = oneTabData.getKey();
@@ -657,11 +657,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
                     //一张实体表中,多组数据,复制表共用同一张实体表,只是pKeyId不同
                     Map<String, List<InsertDataVO>> oneTab = dataValue.stream().collect(Collectors.groupingBy(InsertDataVO::getPKeyId));
-
                     for (Map.Entry<String, List<InsertDataVO>> tab : oneTab.entrySet()) {
                         String tabPKeyId = tab.getKey();
                         List<InsertDataVO> tabData = tab.getValue();
                         StringBuilder dataSql = new StringBuilder();
+                        Set<String> exKeys = new LinkedHashSet<>();
                         List<String> keys = new LinkedList<>();
                         List<String> values = new LinkedList<>();
                         for (InsertDataVO vo : tabData) {
@@ -674,8 +674,31 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                 String data = vo.getData();
                                 values.add(data);
                             }
+                            if (ObjectUtil.isNotEmpty(vo.getDataLength()) && vo.getDataLength() > 250 && vo.getDataLength() <= 500) {
+                                //如果字段长度不够,那么扩容
+                                exKeys.add(vo.getKey() + "---" + vo.getDataLength());
+                            }
+                            if (ObjectUtil.isNotEmpty(vo.getDataLength()) && vo.getDataLength() > 500) {
+                                //如果超过500字符长度,那么直接异常提示
+                                filedNames.add(vo.getName());
+                            }
                         }
                         if (keys.size() > 0 && values.size() > 0 && keys.size() == values.size()) {
+                            //alter SQL(扩容字段长度)
+                            StringBuilder exStrBuilder = new StringBuilder();
+                            if (exKeys.size() > 0) {
+                                for (String exKey : exKeys) {
+                                    String[] split = exKey.split("---");
+                                    String key = split[0];
+                                    int length = Integer.parseInt(split[1]) + 10; //字段长度+10
+                                    String alterSql = "ALTER TABLE " + initTabName + " MODIFY " + key + " VARCHAR(" + length + ");";
+                                    exStrBuilder.append(alterSql);
+                                }
+                            }
+                            if (ObjectUtil.isNotEmpty(exStrBuilder)) {
+                                dataSql.append(exStrBuilder);
+                            }
+
                             //delete SQL(删除旧数据,去重)
                             String delSql = "delete from " + initTabName + " where p_key_id = " + tabPKeyId + ";";
                             //insert SQL(新增)
@@ -695,6 +718,40 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     }
                 }
 
+                //超过500字符长度,直接返回异常
+                if (filedNames.size() > 0) {
+                    //存储结果的Map
+                    Map<String, List<String>> resultMap = new HashMap<>();
+                    for (String str : filedNames) {
+                        String[] split = str.split("tabId:");
+                        String filedName = split[0];
+                        String tabId = split[1];
+                        WbsTreeContract tab = tabMaps.get(Long.parseLong(tabId));
+                        if (tab != null) {
+                            String tableName = tab.getNodeName();
+                            if (!resultMap.containsKey(tableName)) {
+                                //如果该表名不存在于Map中,则新建一个列表
+                                resultMap.put(tableName, new ArrayList<>());
+                            }
+                            //将字段名加入该表对应的列表中
+                            resultMap.get(tableName).add(filedName);
+                        }
+                    }
+                    if (resultMap.size() > 0) {
+                        List<String> errorList = new ArrayList<>();
+                        //遍历Map,拼接错误信息
+                        for (String tableName : resultMap.keySet()) {
+                            List<String> fields = resultMap.get(tableName);
+                            if (fields.size() > 0) {
+                                errorList.add("表:【" + tableName + "】中字段:" + StringUtils.join(fields, "、"));
+                            }
+                        }
+                        if (errorList.size() > 0) {
+                            throw new ServiceException("【" + StringUtils.join(errorList, "、") + "】填报的数据过长,同步失败!");
+                        }
+                    }
+                }
+
                 //入库
                 if (resultSQLS.size() > 0) {
                     List<List<String>> partition = Lists.partition(resultSQLS, 10);
@@ -781,19 +838,32 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                         //下拉框
                                         td = doc.select("el-select[keyname~=" + findIndex + ".*]");
                                     }
+                                    if (td.size() == 0) {
+                                        //测站点
+                                        td = doc.select("hc-form-select-search[keyname~=" + findIndex + ".*]");
+                                    }
                                     String placeholderValue = "";
+                                    String inputType = "";
                                     if (td.size() >= 1) {
                                         for (Element element : td) {
                                             placeholderValue = element.attr("placeholderxx");
+                                            inputType = element.attr("type");
                                             break;
                                         }
                                     }
-
-                                    //警告,空串跳过
+                                    //警告,空串跳过(根据placeholder、type匹配关联)
                                     if (!placeholderValue.contains("警告") && StringUtils.isNotEmpty(placeholderValue)) {
                                         if (StringUtils.isNotEmpty(htmlStringJL)) {
                                             Document docJL = Jsoup.parse(htmlStringJL);
                                             Elements tdJL = docJL.select("el-input[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
+
+                                            //特殊处理
+                                            if (placeholderValue.equals("测站点") && StringUtils.isNotEmpty(inputType)) {
+                                                tdJL = docJL.select("hc-form-select-search[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*][type~=" + this.escapeRegex(inputType) + ".*]");
+                                            } /*else if (placeholderValue.equals("日期:")) {
+                                                tdJL = docJL.select("el-date-picker[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*][type~=" + this.escapeRegex(inputType) + ".*]");
+                                            }*/
+
                                             if (tdJL.size() == 0) {
                                                 //日期格式
                                                 tdJL = docJL.select("el-date-picker[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
@@ -814,6 +884,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                                 //下拉框
                                                 tdJL = docJL.select("el-select[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
                                             }
+                                            if (tdJL.size() == 0) {
+                                                //测站点
+                                                tdJL = docJL.select("hc-form-select-search[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
+                                            }
                                             if (tdJL.size() >= 1) {
                                                 for (Element element : tdJL) {
                                                     String keyname = element.attr("keyname");
@@ -873,19 +947,33 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                             //下拉框
                                             td = doc.select("el-select[keyname~=" + findIndex + ".*]");
                                         }
+                                        if (td.size() == 0) {
+                                            //测站点
+                                            td = doc.select("hc-form-select-search[keyname~=" + findIndex + ".*]");
+                                        }
                                         String placeholderValue = "";
+                                        String inputType = "";
                                         if (td.size() >= 1) {
                                             for (Element element : td) {
                                                 placeholderValue = element.attr("placeholderxx");
+                                                inputType = element.attr("type");
                                                 break;
                                             }
                                         }
 
-                                        //警告,空串跳过
+                                        //警告,空串跳过(根据placeholder、type匹配关联)
                                         if (!placeholderValue.contains("警告") && StringUtils.isNotEmpty(placeholderValue)) {
                                             if (StringUtils.isNotEmpty(htmlStringJL)) {
                                                 Document docJL = Jsoup.parse(htmlStringJL);
                                                 Elements tdJL = docJL.select("el-input[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
+
+                                                //特殊处理
+                                                if (placeholderValue.equals("测站点") && StringUtils.isNotEmpty(inputType)) {
+                                                    tdJL = docJL.select("hc-form-select-search[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*][type~=" + this.escapeRegex(inputType) + ".*]");
+                                                } /*else if (placeholderValue.equals("日期:")) {
+                                                    tdJL = docJL.select("el-date-picker[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*][type~=" + this.escapeRegex(inputType) + ".*]");
+                                                }*/
+
                                                 if (tdJL.size() == 0) {
                                                     //日期格式
                                                     tdJL = docJL.select("el-date-picker[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
@@ -906,6 +994,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                                     //下拉框
                                                     tdJL = docJL.select("el-select[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
                                                 }
+                                                if (tdJL.size() == 0) {
+                                                    //测站点
+                                                    tdJL = docJL.select("hc-form-select-search[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
+                                                }
                                                 if (tdJL.size() >= 1) {
                                                     for (Element element : tdJL) {
                                                         String keyname = element.attr("keyname");
@@ -915,7 +1007,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                                             if (keyJL.length() > 3) { //排除key=key的时候,也就是找不到key值,正常为key_X
                                                                 String keyJLIndex = keynameJL[1];
                                                                 if (keyJLIndex.equals(index)) { //位置相同才复制
-                                                                    values.add(data + "_^_" + keyJLIndex + "---" + keyJL);
+                                                                    values.add(data + "_^_" + keyJLIndex + "---" + keyJL + "---" + placeholderValue + "tabId:" + pKeyId);
                                                                     break;
                                                                 }
                                                             }
@@ -929,10 +1021,12 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
                                 Set<String> dataResult = new HashSet<>();
                                 Set<String> keyResult = new HashSet<>();
+                                Set<String> nameResult = new HashSet<>();
                                 for (String v : values) {
                                     String[] split1 = v.split("---");
                                     dataResult.add(split1[0]);
                                     keyResult.add(split1[1]);
+                                    nameResult.add(split1[2]);
                                 }
                                 if (dataResult.size() > 0 && keyResult.size() > 0) {
                                     InsertDataVO vo = new InsertDataVO();
@@ -940,6 +1034,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                     vo.setInitTabName(initTabNameJL);
                                     vo.setKey(keyResult.stream().findAny().orElse(null));
                                     vo.setData(StringUtils.join(dataResult, "☆"));
+                                    vo.setDataLength(vo.getData().length());
+                                    vo.setName(nameResult.stream().findAny().orElse(null));
                                     resultData.add(vo);
                                 }
                             }

+ 5 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -404,7 +404,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().select(ContractInfo::getId, ContractInfo::getContractType).eq(ContractInfo::getPId, projectId));
         List<Long> contractInfosIds = contractInfos.stream().filter(f -> 1 == f.getContractType()).map(ContractInfo::getId).collect(Collectors.toList());
 
-        Map<Long, WbsTreePrivate> maps = wbsTreePrivatesAll.stream().collect(Collectors.toMap(WbsTreePrivate::getId, wbsTreePrivate -> wbsTreePrivate, (obj1, obj2) -> obj1));
+        Map<Long, WbsTreePrivate> maps = wbsTreePrivatesAll.stream().filter(f -> Objects.nonNull(f.getId())).collect(Collectors.toMap(WbsTreePrivate::getId, wbsTreePrivate -> wbsTreePrivate, (obj1, obj2) -> obj1));
 
         for (WbsTree wbsTree : wbsTreeListAll) {
             WbsTreePrivate wbsTreePrivate = maps.get(wbsTree.getId());
@@ -438,7 +438,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             //获取当前项目下所有合同段下的复制、新增节点
             String sql = "select id,old_id,project_id,contract_id from m_wbs_tree_contract where old_id is not null and project_id = " + projectId + " and contract_id in(" + org.apache.commons.lang.StringUtils.join(contractInfosIds, ",") + ") and wbs_type = " + wbsType + " and type = 1 and status = 1 and is_deleted = 0 and old_id is not null";
             List<WbsTreeContract> wbsTreeContractsCopyOrAddAll = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
-            Map<String, List<WbsTreeContract>> copyAddNodes = wbsTreeContractsCopyOrAddAll.stream().filter(f -> Objects.nonNull(f.getOldId())).collect(Collectors.groupingBy(WbsTreeContract::getOldId));
+            Map<String, List<WbsTreeContract>> copyAddNodes = wbsTreeContractsCopyOrAddAll.stream().filter(f -> ObjectUtil.isNotEmpty(f.getOldId())).collect(Collectors.groupingBy(WbsTreeContract::getOldId));
             List<WbsTreeContract> listContractAdd = new ArrayList<>();
             for (WbsTreeContract obj1 : listContract) {
                 List<WbsTreeContract> copyAddNodesNow = copyAddNodes.get(obj1.getId().toString());
@@ -487,7 +487,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().select(ContractInfo::getId, ContractInfo::getContractType).eq(ContractInfo::getContractType, 1).eq(ContractInfo::getPId, projectId));
         List<Long> contractInfosIds = contractInfos.stream().filter(f -> 1 == f.getContractType()).map(ContractInfo::getId).collect(Collectors.toList());
 
-        Map<Long, WbsTreePrivate> maps = wbsTreePrivatesAllNow.stream().collect(Collectors.toMap(WbsTreePrivate::getId, wbsTreePrivate -> wbsTreePrivate, (obj1, obj2) -> obj1));
+        Map<Long, WbsTreePrivate> maps = wbsTreePrivatesAllNow.stream().filter(f -> Objects.nonNull(f.getId())).collect(Collectors.toMap(WbsTreePrivate::getId, wbsTreePrivate -> wbsTreePrivate, (obj1, obj2) -> obj1));
 
         for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
             WbsTreePrivate treePrivateNow = maps.get(wbsTreePrivate.getId());
@@ -522,7 +522,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             //获取当前项目下所有合同段下的复制、新增节点
             String sql = "select id,old_id,project_id,contract_id from m_wbs_tree_contract where old_id is not null and project_id = " + projectId + " and contract_id in(" + org.apache.commons.lang.StringUtils.join(contractInfosIds, ",") + ") and wbs_type = " + wbsType + " and type = 1 and status = 1 and is_deleted = 0 and old_id is not null";
             List<WbsTreeContract> wbsTreeContractsCopyOrAddAll = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
-            Map<String, List<WbsTreeContract>> copyAddNodes = wbsTreeContractsCopyOrAddAll.stream().filter(f -> Objects.nonNull(f.getOldId())).collect(Collectors.groupingBy(WbsTreeContract::getOldId));
+            Map<String, List<WbsTreeContract>> copyAddNodes = wbsTreeContractsCopyOrAddAll.stream().filter(f -> ObjectUtil.isNotEmpty(f.getOldId())).collect(Collectors.groupingBy(WbsTreeContract::getOldId));
             List<WbsTreeContract> listContractAdd = new ArrayList<>();
             for (WbsTreeContract obj1 : listContract) {
                 List<WbsTreeContract> copyAddNodesNow = copyAddNodes.get(obj1.getId().toString());
@@ -1769,7 +1769,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     @Override
     public void syncCurrentFormInProject(Long pKeyId) {
-        WbsTreePrivate treePrivate = this.getOne(new LambdaQueryWrapper<WbsTreePrivate>().eq(WbsTreePrivate::getPKeyId,pKeyId));
+        WbsTreePrivate treePrivate = this.getOne(new LambdaQueryWrapper<WbsTreePrivate>().eq(WbsTreePrivate::getPKeyId, pKeyId));
         baseMapper.syncCurrentFormInProject(treePrivate);
         wbsTreeContractService.syncCurrentFormToAllContract(treePrivate);
     }