Bläddra i källkod

Merge remote-tracking branch 'origin/master'

liuyc 2 år sedan
förälder
incheckning
2778651e76
39 ändrade filer med 561 tillägg och 112 borttagningar
  1. 1 3
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 4 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/DefaultConfig.java
  3. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/DepartmentMonthPlanDTO.java
  4. 79 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EmployeeTaskInfo.java
  5. 7 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  6. 13 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/RangeInfo.java
  7. 1 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  8. 5 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/DefaultConfigController.java
  9. 1 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/DefaultConfigMapper.xml
  10. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  11. 22 13
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  12. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.java
  13. 3 3
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml
  14. 30 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.java
  15. 24 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.xml
  16. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  17. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/WorkDateInfoMapper.java
  18. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/WorkDateInfoMapper.xml
  19. 34 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IEmployeeTaskInfoService.java
  20. 26 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  21. 2 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  22. 71 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EmployeeTaskInfoServiceImpl.java
  23. 98 27
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  24. 2 0
      blade-service/blade-manager/src/main/java/com/jfireel/expression/node/CalculateNode.java
  25. 20 2
      blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MinusNode.java
  26. 10 1
      blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MutliNode.java
  27. 1 0
      blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/OperatorResultNode.java
  28. 7 10
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java
  29. 11 9
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java
  30. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  31. 7 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java
  32. 18 14
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/FormulaClientImpl.java
  33. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  34. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java
  35. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java
  36. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  37. 20 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  38. 16 0
      blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java
  39. 6 1
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java

+ 1 - 3
blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java

@@ -27,12 +27,10 @@ import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_
  */
 public interface LauncherConstant {
 
-
     String APPLICATION_MANAGER_NAME = APPLICATION_NAME_PREFIX + "manager";
 
     String APPLICATION_ARCHIVE_NAME = APPLICATION_NAME_PREFIX + "archive";
 
-
     String APPLICATION_VISUAL_NAME = APPLICATION_NAME_PREFIX + "visual";
 
     /**
@@ -48,7 +46,7 @@ public interface LauncherConstant {
     /**
      * nacos dev 地址 172.31.222.127   192.168.0.109     127.0.0.1
      */
-    String NACOS_DEV_ADDR = "127.0.0.1:8848";
+    String NACOS_DEV_ADDR = "192.168.0.109:8848";
 
     /**
      * nacos prod 地址

+ 4 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/DefaultConfig.java

@@ -68,5 +68,8 @@ public class DefaultConfig extends BaseEntity {
 	*/
 		private String fullScreen;
 
-
+	/**
+	 * 所属 客户端
+	 */
+	private String clientId;
 }

+ 1 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/DepartmentMonthPlanDTO.java

@@ -18,7 +18,7 @@ import java.time.LocalDate;
 public class DepartmentMonthPlanDTO {
 
     @ApiModelProperty(value = "部门类型")
-    private Integer departmentType;
+    private Long deptId;
 
 
     @ApiModelProperty(value = "计划开始日期")

+ 79 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EmployeeTaskInfo.java

@@ -0,0 +1,79 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.NullSerializer;
+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/5/12 9:21
+ **/
+@Data
+@TableName("c_employee_task_info")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "员工任务信息表", description = "员工任务信息表")
+public class EmployeeTaskInfo extends BaseEntity {
+
+    @ApiModelProperty(value = "预算id")
+    private Long budgetId;
+
+    @ApiModelProperty(value = "预算父计划id")
+    private Long budgetParentId;
+
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "单位类型1施工2监理3建设")
+    private Integer unitType;
+
+    @ApiModelProperty(value = "费用分摊部门")
+    private Long deptId;
+
+    @ApiModelProperty(value = "费用类型")
+    private Integer costType;
+
+    @ApiModelProperty(value = "项目环节")
+    private Long projectProcess;
+
+    @ApiModelProperty(value = "预算类型")
+    private Integer budgetType;
+
+    @ApiModelProperty(value = "工作类型,0预算1实际")
+    private Integer workType;
+
+    @ApiModelProperty(value = "岗位类型")
+    private Long postType;
+
+    @ApiModelProperty(value = "任务类型")
+    private Integer taskDetail;
+
+    @ApiModelProperty(value = "员工id")
+    @JsonSerialize(nullsUsing = NullSerializer.class)
+    private Long employeeId;
+
+    @ApiModelProperty(value = "员工当天工资")
+    private BigDecimal employeeSalary;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "当天日期")
+    private LocalDate oneDay;
+
+
+
+}

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

@@ -1,5 +1,7 @@
 package org.springblade.control.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -83,6 +85,7 @@ public class ProjectCostBudget extends BaseEntity {
     private Integer approve;
 
     @ApiModelProperty(value = "计划任务类型")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Long planTaskType;
 
     @ApiModelProperty(value = "计划任务描述")
@@ -102,6 +105,7 @@ public class ProjectCostBudget extends BaseEntity {
             pattern = "yyyy-MM-dd"
     )
     @ApiModelProperty(value = "计划开始日期")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private LocalDate planStartTime;
 
     @DateTimeFormat(
@@ -111,12 +115,15 @@ public class ProjectCostBudget extends BaseEntity {
             pattern = "yyyy-MM-dd"
     )
     @ApiModelProperty(value = "计划结束日期")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private LocalDate planEndTime;
 
     @ApiModelProperty(value = "计划天数")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private BigDecimal planDays;
 
     @ApiModelProperty(value = "计划人工成本")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private BigDecimal planStaffCost;
 
     @ApiModelProperty(value = "任务实际完成天数")

+ 13 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/RangeInfo.java

@@ -15,7 +15,6 @@ import java.util.stream.Collectors;
  * @Date 2022/9/22 17:52
  * @description TODO
  */
-@Data
 public class RangeInfo {
 
     @ApiModelProperty( value = "方向",required = true)
@@ -36,6 +35,7 @@ public class RangeInfo {
     private List<Integer> gSize;
     @ApiModelProperty("偏差范围")
     private String dev;
+    @JSONField(serialize = false)
     private List<String> gDev;
     @ApiModelProperty(
             value = "表单key",
@@ -46,15 +46,24 @@ public class RangeInfo {
     private Long pkId;
     @ApiModelProperty("命名有误此字段应为:合格数量,也可以用百分比表示如2%")
     private String pass;
+    @JSONField(serialize = false)
     private List<Integer> gPass;
     @ApiModelProperty("容量")
     private String capacity;
+    @JSONField(serialize = false)
     private List<Integer> gCapacity;
 
     public Boolean verify() {
         return Func.isNotBlank(design) && ((Func.isNotBlank(size)) || (Func.isNotBlank(capacity))) && Func.isNotBlank(key) && (Func.isNotEmpty(pkId) || Func.isNotBlank(dev));
     }
 
+    public String getDirection() {
+        return direction;
+    }
+
+    public void setDirection(String direction) {
+        this.direction = direction;
+    }
 
     public String getDesign() {
         return design;
@@ -101,6 +110,7 @@ public class RangeInfo {
         this.size = size;
     }
 
+    @JSONField(serialize = false)
     public List<Integer> getSizeList() {
         return gSize;
     }
@@ -122,7 +132,7 @@ public class RangeInfo {
         this.dev = dev;
     }
 
-
+    @JSONField(serialize = false)
     public List<String> getDevList() {
         return gDev;
     }
@@ -157,6 +167,7 @@ public class RangeInfo {
         return gPass.size() > i ? gPass.get(i) : gPass.get(gPass.size() - 1);
     }
 
+    @JSONField(serialize = false)
     public List<Integer> getPassList() {
         return gPass;
     }

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -181,5 +181,5 @@ public interface WbsTreeContractClient {
 
     //获取 节点下表单
     @GetMapping(API_PREFIX + "/searchNodeAllTableInfo")
-    List<AppWbsTreeContractVO> searchNodeAllTableInfo(@RequestParam String primaryKeyId, @RequestParam String type, @RequestParam String contractId, @RequestParam String projectId);
+    List<AppWbsTreeContractVO> searchNodeAllTableInfo(@RequestParam String primaryKeyId, @RequestParam String type, @RequestParam String contractId, @RequestParam String projectId,@RequestParam Long userId);
 }

+ 5 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/DefaultConfigController.java

@@ -63,6 +63,7 @@ public class DefaultConfigController extends BladeController {
 	@ApiOperation(value = "详情", notes = "传入defaultConfig")
 	public R<DefaultConfig> detail(DefaultConfig defaultConfig, BladeUser user) {
 		defaultConfig.setCreateUser(user.getUserId());
+		defaultConfig.setClientId(user.getClientId());
 		DefaultConfig detail = defaultConfigService.getOne(Condition.getQueryWrapper(defaultConfig));
 		return R.data(detail);
 	}
@@ -138,9 +139,11 @@ public class DefaultConfigController extends BladeController {
     @PostMapping("/saveOrUpdate")
     @ApiOperationSupport(order = 8)
     @ApiOperation(value = "新增或修改")
-    public R<Boolean> saveOrUpdate(@Valid @RequestBody DefaultConfig newConfig) {
+    public R<Boolean> saveOrUpdate(@Valid @RequestBody DefaultConfig newConfig,BladeUser bladeUser) {
         //查询是否存在配置信息
-        DefaultConfig oldConfig = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
+        DefaultConfig oldConfig = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery()
+				.eq(DefaultConfig::getCreateUser, bladeUser.getUserId())
+				.eq(DefaultConfig::getClientId, bladeUser.getClientId()));
         if (oldConfig != null) {
             //修改
             if (StringUtils.isNotEmpty(newConfig.getColor())) {

+ 1 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/DefaultConfigMapper.xml

@@ -20,6 +20,7 @@
         <result column="sms_time_out" property="smsTimeOut"/>
         <result column="shot_web_rtc" property="shotWebRtc"/>
         <result column="full_screen" property="fullScreen"/>
+        <result column="client_id" property="clientId"/>
     </resultMap>
 
 

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

@@ -902,7 +902,7 @@
     </select>
 
     <select id="getTabussTimeInfo" resultMap="tabBusstimeInfoResultMap">
-        select * from m_tab_busstime_info where is_deleted = 0 and
+        select * from m_tab_busstime_info where is_deleted = 0
         <if test="tables != null">
             and tab_en_name in
             <foreach collection="tables" item="wbsIdc" open="(" separator="," close=")">

+ 22 - 13
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -360,7 +360,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         //修改主流程状态为3
         this.update(Wrappers.<Task>lambdaUpdate().set(Task::getStatus, 3).eq(Task::getId, task.getId()));
         //修改业务数据状态为未上报
-        this.updateBusinessDataByFormDataId(task, 0, null);
+       // this.updateBusinessDataByFormDataId(task, 0, null);
+        this.updateBusinessDataByFormDataId(task, 0, null,-1L);
 
         return true;
     }
@@ -615,14 +616,14 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         //修改主流程状态为已完成
                         this.update(Wrappers.<Task>lambdaUpdate().set(Task::getStatus, 2).set(Task::getUpdateTime, new Date()).eq(Task::getId, masterTask.getId()));
                         //修改对应的业务数据状态为已审批
-                        this.updateBusinessDataByFormDataId(masterTask, 2, finalPdfUrl);
+                        this.updateBusinessDataByFormDataId(masterTask, 2, finalPdfUrl,taskApprovalVO.getUserId());
 
                         //返回电签成功的pdf路径,给试验用
                         return finalPdfUrl;
                     }
                 } else {
                     //只更新PDF路径
-                    this.updateBusinessDataByFormDataId(masterTask, 1, eVisaStatus.contains("@@@@") ? eVisaStatus.split("@@@@")[1] : null);
+                    this.updateBusinessDataByFormDataId(masterTask, 1, eVisaStatus.contains("@@@@") ? eVisaStatus.split("@@@@")[1] : null,taskApprovalVO.getUserId());
                     return eVisaStatus.contains("@@@@") ? eVisaStatus.split("@@@@")[1] : null;
                 }
             } else if ("eVisaError".equals(eVisaStatus) || eVisaStatus.contains("eVisaError")) {
@@ -693,7 +694,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             }
             this.update(Wrappers.<Task>lambdaUpdate().set(Task::getStatus, 3).set(Task::getUpdateTime, new Date()).eq(Task::getProcessInstanceId, masterProcessInstanceId));
             //修改对应的业务数据状态为已废除
-            this.updateBusinessDataByFormDataId(this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getProcessInstanceId, masterProcessInstanceId)), 3, null);
+            this.updateBusinessDataByFormDataId(this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getProcessInstanceId, masterProcessInstanceId)), 3, null,taskApprovalVO.getUserId());
 
             //任务废除通知
             this.abolishMessage(masterTask, currentLink, comment);
@@ -935,11 +936,11 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     /**
      * 修改业务数据状态
      */
-    private void updateBusinessDataByFormDataId(Task task, Integer status, String newFileUrl) {
+    private void updateBusinessDataByFormDataId(Task task, Integer status, String newFileUrl,Long UserId) {
         switch (task.getApprovalType()) {
             case 1:
                 //资料填报
-                this.updateWriteBusinessDataStatus(task.getFormDataId(), status, newFileUrl);
+                this.updateWriteBusinessDataStatus(task.getFormDataId(), status, newFileUrl,UserId);
                 break;
             case 2:
                 //工程文件
@@ -970,17 +971,22 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
      * 资料填报
      */
     @Transactional
-    public void updateWriteBusinessDataStatus(String formDataId, Integer status, String newFileUrl) {
-
+    public void updateWriteBusinessDataStatus(String formDataId, Integer status, String newFileUrl,Long userId) {
+        String pdfPage ="";
+        Long pdfSize =0L;
+        String dateInfo = "";
         try {
-            String pdfPage = commonFileClient.getPdfNum(newFileUrl);
-            Long pdfSize = CommonUtil.getResourceLength(newFileUrl);
+            System.out.println("----- 电签成功--------");
+            pdfPage = commonFileClient.getPdfNum(newFileUrl);
+            pdfSize = CommonUtil.getResourceLength(newFileUrl);
+            System.out.println("----- 电签成功--------==pdfPage"+pdfPage);
+            System.out.println("----- 电签成功--------==pdfSize"+pdfSize);
             List<String> list = Arrays.asList(formDataId.split(","));
             for(String iId : list){
                 //获取
-                String dateInfo = "";
                 InformationQuery queryinfo = informationQueryService.getById(iId);
-                List<AppWbsTreeContractVO> WbsTreeContract = wbsTreeContractClient.searchNodeAllTableInfo(queryinfo.getWbsId() + "", queryinfo.getClassify() + "", queryinfo.getContractId() + "", queryinfo.getProjectId() + "");
+
+                List<AppWbsTreeContractVO> WbsTreeContract = wbsTreeContractClient.searchNodeAllTableInfo(queryinfo.getWbsId() + "", queryinfo.getClassify() + "", queryinfo.getContractId() + "", queryinfo.getProjectId() + "",userId);
                 List<String> collect = new ArrayList<>();
                 Map<String,String> idMap = new HashMap<>();
                 for(AppWbsTreeContractVO appWbsTreeContractVO : WbsTreeContract){
@@ -996,7 +1002,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         dateInfo = maps.get(tabBusstimeInfo.getColKey())+"";
                     }
                 }
-
+                System.out.println("----- 电签成功--------==修改---="+dateInfo);
                 this.informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getStatus, status)
                         .set(InformationQuery::getEVisaPdfUrl, newFileUrl)
                         .set(InformationQuery::getReportNumber, null)
@@ -1011,6 +1017,9 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     .set(InformationQuery::getEVisaPdfUrl, newFileUrl)
                     .set(InformationQuery::getReportNumber, null)
                     .set(InformationQuery::getAuditUserIdAndName, null)
+                    .set(InformationQuery::getEVisaPdfPage, pdfPage)
+                    .set(InformationQuery::getEVisaPdfSize, pdfSize)
+                    .set(InformationQuery::getBusinessTime, dateInfo)
                     .in(InformationQuery::getId, Arrays.asList(formDataId.split(","))));
         }
 

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

@@ -25,7 +25,7 @@ public interface DepartmentMonthPlanMapper extends BaseMapper<DepartmentMonthPla
 
     List<DictInfo> getDepartmentDict();
 
-    String getDepartmentName(@Param("departmentType") Integer departmentType);
+    String getDepartmentName(@Param("deptId") Long deptId);
 
     List<DepartmentMonthPlanVO> getPage(IPage page, @Param("dto") DepartmentMonthPlanDTO dto, @Param("userId") Long userId);
 

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

@@ -10,7 +10,7 @@
         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 dept_name from blade_dept WHERE id = #{deptId} and is_deleted = 0
     </select>
     <select id="getPage" resultType="org.springblade.control.vo.DepartmentMonthPlanVO">
         SELECT dmp.*,
@@ -25,8 +25,8 @@
                 (select bu.name from blade_user bu WHERE bu.id = dmp.plan_designer) as 'planDesignerName'
         FROM c_department_month_plan dmp
         where dmp.plan_designer = #{userId} and dmp.is_deleted = 0
-        <if test="dto.departmentType != null and dto.departmentType != ''">
-            and dmp.department_type = #{dto.departmentType}
+        <if test="dto.deptId != null and dto.deptId != ''">
+            and dmp.dept_id = #{dto.deptId}
         </if>
         <if test="dto.planStartDate != null and dto.planStartDate != ''">
             and DATE_FORMAT(dmp.plan_start_date ,'%Y-%m') BETWEEN #{dto.planStartDate} AND #{dto.planEndDate}

+ 30 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.java

@@ -0,0 +1,30 @@
+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.*;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.control.vo.ProjectCostBudgetVO2;
+import org.springblade.control.vo.ProjectCostBudgetVO3;
+import org.springblade.system.user.entity.User;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface EmployeeTaskInfoMapper extends BaseMapper<EmployeeTaskInfo> {
+    void deleteByBudgetId(@Param("id") Long id);
+
+    void deleteByBudgetParentId(@Param("ids") List<Long> ids,@Param("parentId") Long parentId);
+
+    void deleteByBudgetIdAndParentId(@Param("id") Long id);
+}

+ 24 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.xml

@@ -0,0 +1,24 @@
+<?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.EmployeeTaskInfoMapper">
+
+
+    <delete id="deleteByBudgetId">
+        delete from c_employee_task_info
+        where budget_id = #{id}
+    </delete>
+    <delete id="deleteByBudgetParentId">
+        delete from c_employee_task_info
+        where budget_parent_id = #{parentId}
+        <if test="ids != null and ids.size > 0">
+            and budget_id not in
+            <foreach collection="ids" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+    </delete>
+    <delete id="deleteByBudgetIdAndParentId">
+        delete from c_employee_task_info
+        where budget_id = #{id} or budget_parent_id = #{id}
+    </delete>
+</mapper>

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

@@ -191,7 +191,7 @@
 
     <select id="getBudgetByYear" resultType="org.springblade.control.entity.ProjectCostBudget">
         select *  from c_project_cost_budget pcb
-        WHERE pcb.is_deleted = 0  and task_approve = 1  and (select cdi.dict_value from c_dict_info cdi WHERE cdi.id = pcb.plan_task_type) = 1 and pcb.task_approve = 1 and (DATE_FORMAT(pcb.practical_finish_time ,'%Y') = #{year} or DATE_FORMAT(pcb.real_plan_start_time ,'%Y') = #{year})
+        WHERE pcb.is_deleted = 0 and (select cdi.dict_value from c_dict_info cdi WHERE cdi.id = pcb.plan_task_type) = 1 and pcb.task_approve = 1 and (DATE_FORMAT(pcb.practical_finish_time ,'%Y') = #{year} or DATE_FORMAT(pcb.real_plan_start_time ,'%Y') = #{year})
     </select>
 
     <select id="getBudgetByYear2" resultType="org.springblade.control.entity.ProjectCostBudget">

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

@@ -16,4 +16,6 @@ import java.util.List;
 public interface WorkDateInfoMapper extends BaseMapper<WorkDateInfo> {
 
     Integer getWorkDays(@Param("start") LocalDate start, @Param("end") LocalDate end);
+
+    List<LocalDate> getWorkDaysList(@Param("start") LocalDate start, @Param("end") LocalDate end);
 }

+ 5 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/WorkDateInfoMapper.xml

@@ -8,4 +8,9 @@
         WHERE DATE_FORMAT(one_day,'%Y-%m-%d') between DATE_FORMAT(#{start} ,'%Y-%m-%d') and DATE_FORMAT(#{end},'%Y-%m-%d')
         and is_work = 1
     </select>
+    <select id="getWorkDaysList" resultType="java.time.LocalDate">
+        select one_day  from c_work_date_info
+        WHERE DATE_FORMAT(one_day,'%Y-%m-%d') between DATE_FORMAT(#{start} ,'%Y-%m-%d') and DATE_FORMAT(#{end},'%Y-%m-%d')
+          and is_work = 1
+    </select>
 </mapper>

+ 34 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IEmployeeTaskInfoService.java

@@ -0,0 +1,34 @@
+package org.springblade.control.service;
+
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.entity.EmployeeTaskInfo;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.ProjectCostBudgetStats;
+import org.springblade.control.vo.*;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:41
+ **/
+public interface IEmployeeTaskInfoService extends BaseService<EmployeeTaskInfo> {
+
+    //根据预算id删除工作信息
+    void deleteByBudgetId(Long id);
+
+    //根据预算id删除工作信息,清空所有
+    void deleteByBudgetIdAndParentId(Long id);
+
+    //根据父预算id删除工作信息,并且排除到正在进行中的计划
+    void deleteByBudgetParentId(List<Long> ids,Long parentId);
+}

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

@@ -8,6 +8,7 @@ import org.springblade.control.dto.AnnualBudgetDTO;
 import org.springblade.control.entity.*;
 import org.springblade.control.mapper.AnnualBudgetMapper;
 import org.springblade.control.mapper.DepartmentMonthPlanMapper;
+import org.springblade.control.mapper.WorkDateInfoMapper;
 import org.springblade.control.service.*;
 import org.springblade.control.vo.*;
 import org.springblade.core.log.exception.ServiceException;
@@ -49,6 +50,8 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
 
     private final IProjectProcessService processService;
 
+    private final WorkDateInfoMapper dateInfoMapper;
+
     /**
      * 新增年度经营预算
      * @param dto
@@ -553,7 +556,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         }
         List<AnnualProjectCostVO> mapList = new ArrayList<>();
         //按年查询所有支出,按照项目分组,然后再按照月份分组统计
-        //目前查询人工支出
+        //查询人工支出
         List<ProjectCostBudget> budgetByYear = budgetService.getBudgetByYear(y);
         Map<Long, List<ProjectCostBudget>> map = budgetByYear.parallelStream()
                 .collect(Collectors.groupingBy(ProjectCostBudget::getProjectId));
@@ -583,7 +586,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                                 throw new ServiceException("计划年份异常2");
                             }
                             if (budget.getPracticalFinishTime().getYear() != y){
-                                //如果结束时间不是今年,则使用开始金额
+                                //如果结束时间不是今年,则开始月大于等于当前月才计算
                                 if (budget.getRealPlanStartTime().getMonthValue() == i) {
                                     big = big.add(budget.getPracticalStartMoney());
                                 }
@@ -593,8 +596,27 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                                 }
                             }
                         }else {
-                            if (budget.getPracticalFinishTime().getMonthValue() == i) {
-                                big = big.add(budget.getActualTotalMoney());
+                            //开始和结束时间没有跨年,但是需要判断是否跨月,如果没有跨月,则判断是否是当前月完成
+                            if (budget.getIsTwoMonth() == 0) {
+                                if (budget.getPracticalFinishTime().getMonthValue() == i) {
+                                    big = big.add(budget.getActualTotalMoney());
+                                }
+                            }else {
+                                //如果跨月则判断是否包含当前月
+                                LocalDate startTime = budget.getRealPlanStartTime();
+                                LocalDate endTime = budget.getPracticalFinishTime();
+                                if (startTime.getMonthValue() <= i && endTime.getMonthValue() >= i){
+                                    if (startTime.getMonthValue() == i){
+                                        //开始时间是当月,获取当月工作日,除以总工作日,乘以总工资
+
+                                    }else if (endTime.getMonthValue() == i){
+                                        //开始时间是当月,获取当月工作日,除以总工作日,乘以总工资
+                                    }else {
+                                        //判断此月之前的工作日,如果此工作日已经大于总工作日,那么此月不算支出
+
+                                        //获取此月整月工作日,用总工作日,减去此月之前的工作日,如果此月工作日大于结果工作日,则使用结果工作日
+                                    }
+                                }
                             }
                         }
                     }

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

@@ -64,13 +64,13 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
     public List<ProjectCostBudgetVO> addDepartmentPlan(DepartmentMonthPlan plan) {
         //判断数据库是否存在当前部门当前月数据
         DepartmentMonthPlan one = this.getOne(new LambdaQueryWrapper<DepartmentMonthPlan>()
-                .eq(DepartmentMonthPlan::getDepartmentType, plan.getDepartmentType())
+                .eq(DepartmentMonthPlan::getDeptId, plan.getDeptId())
                 .eq(DepartmentMonthPlan::getPlanDate, plan.getPlanDate()));
         if (one != null){
             throw new ServiceException("新增失败,该部门该月份已存在计划");
         }
         //获取部门名称
-        String departmentName = baseMapper.getDepartmentName(plan.getDepartmentType());
+        String departmentName = baseMapper.getDepartmentName(plan.getDeptId());
         //新增部门月计划,并且设置名称和起止日期,制定人
         Long userId = SecureUtil.getUserId();
         plan.setPlanDesigner(userId);

+ 71 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EmployeeTaskInfoServiceImpl.java

@@ -0,0 +1,71 @@
+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.apache.commons.lang.StringUtils;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
+import org.springblade.control.entity.*;
+import org.springblade.control.mapper.*;
+import org.springblade.control.service.IContractInfoService;
+import org.springblade.control.service.IEmployeeTaskInfoService;
+import org.springblade.control.service.IProjectCostBudgetService;
+import org.springblade.control.vo.*;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.system.user.entity.User;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:43
+ **/
+@Service
+@AllArgsConstructor
+public class EmployeeTaskInfoServiceImpl extends BaseServiceImpl<EmployeeTaskInfoMapper, EmployeeTaskInfo> implements IEmployeeTaskInfoService {
+
+
+    /**
+     * 根据预算id删除工作信息
+     * @param id
+     */
+    @Override
+    public void deleteByBudgetId(Long id) {
+        baseMapper.deleteByBudgetId(id);
+    }
+
+    /**
+     * 根据预算id删除工作信息,清空所有
+     * @param id
+     */
+    @Override
+    public void deleteByBudgetIdAndParentId(Long id) {
+        baseMapper.deleteByBudgetIdAndParentId(id);
+    }
+
+    /**
+     * 根据父预算id删除工作信息,并且排除到正在进行中的计划
+     * @param ids
+     * @param parentId
+     */
+    @Override
+    public void deleteByBudgetParentId(List<Long> ids, Long parentId) {
+        baseMapper.deleteByBudgetParentId(ids,parentId);
+    }
+}

+ 98 - 27
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -55,6 +55,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
 
     private final WorkDateInfoMapper dateInfoMapper;
 
+    private final IEmployeeTaskInfoService employeeTaskInfoService;
+
 
     /**
      * 批量新增或修改预算
@@ -480,14 +482,10 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         for (ProjectCostBudgetVO2 vo2 : list) {
             List<ProjectCostBudgetVO2> vo2ChildrenList = vo2.getChildrenList();
             if (vo2ChildrenList != null && vo2ChildrenList.size() > 0){
-//                //是否跨月
-//                Boolean isTwoMonth = false;
-//                //总计划天数
-//                BigDecimal totalDays = new BigDecimal(0);
-//                //子计划开始月计划总天数
-//                BigDecimal startTotalDays = new BigDecimal(0);
-//                //子计划结束月计划总天数
-//                BigDecimal endTotalDays = new BigDecimal(0);
+                //选出正在进行中的子计划id
+                List<Long> ids = vo2ChildrenList.stream().filter(l -> l.getStatus() != null && l.getStatus() != 1).map(ProjectCostBudgetVO2::getId).collect(Collectors.toList());
+                //清空除进行中之外的子计划的 员工任务信息表
+                employeeTaskInfoService.deleteByBudgetParentId(ids,vo2.getId());
                 for (ProjectCostBudget budget : vo2ChildrenList) {
                     //如果计划正在进行中或者已经完成,则跳过
                     if (budget.getStatus() != null && budget.getStatus() != 1){
@@ -506,12 +504,43 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     budget.setProjectProcess(vo2.getProjectProcess());
                     budget.setTaskDetail(vo2.getTaskDetail());
                     budget.setPostType(vo2.getPostType());
-                    //设置主计划总天数
-//                    totalDays = totalDays.add(budget.getPlanDays());
+
+                    //先删除任务计划表中的信息
+                    if (budget.getId() == null){
+                        budget.setId(SnowFlakeUtil.getId());
+                    }
+
                     //只计算固定计划的人工成本
                     if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
+                        LocalDate startTime = budget.getPlanStartTime();
+                        LocalDate endTime = budget.getPlanEndTime();
+                        List<EmployeeTaskInfo> infoList = new ArrayList<>();
+                        //获取岗位单价
+                        BigDecimal postMoney = new BigDecimal(map.get(vo2.getPostType()).get(0).getDictValue());
+                        //获取计划日期中的工作日
+                        List<LocalDate> workDaysList = dateInfoMapper.getWorkDaysList(startTime, endTime);
+                        for (LocalDate today : workDaysList) {
+                            //保存预算到任务计划表
+                            EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
+                            employeeTaskInfo.setBudgetId(budget.getId());
+                            employeeTaskInfo.setProjectId(budget.getProjectId());
+                            employeeTaskInfo.setBudgetParentId(budget.getParentId());
+                            employeeTaskInfo.setUnitType(budget.getUnitType());
+                            employeeTaskInfo.setDeptId(budget.getDeptId());
+                            employeeTaskInfo.setCostType(budget.getCostType());
+                            employeeTaskInfo.setTaskDetail(budget.getTaskDetail());
+                            employeeTaskInfo.setProjectProcess(budget.getProjectProcess());
+                            employeeTaskInfo.setBudgetType(budget.getBudgetType());
+                            employeeTaskInfo.setOneDay(today);
+                            employeeTaskInfo.setWorkType(0);
+                            employeeTaskInfo.setPostType(budget.getPostType());
+                            employeeTaskInfo.setEmployeeSalary(postMoney);
+                            infoList.add(employeeTaskInfo);
+                        }
+                        employeeTaskInfoService.saveBatch(infoList);
+
                         //计划人工支出
-                        budget.setPlanStaffCost(budget.getPlanDays().multiply(new BigDecimal(map.get(vo2.getPostType()).get(0).getDictValue())));
+                        budget.setPlanStaffCost(budget.getPlanDays().multiply(postMoney));
                         //如果跨月
                         if (budget.getPlanStartTime().getMonthValue() != budget.getPlanEndTime().getMonthValue()) {
                             //跨月则改变状态
@@ -532,7 +561,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
 //                                endTotalDays = endTotalDays.add(budget.getPlanDays().subtract(new BigDecimal(days)));
                                 budget.setPlanStartMonthDays(new BigDecimal(days));
                                 budget.setPlanEndMonthDays(budget.getPlanDays().subtract(new BigDecimal(days)));
-                                budget.setPlanStartMoney(new BigDecimal(days).multiply(new BigDecimal(map.get(budget.getPostType()).get(0).getDictValue())));
+                                budget.setPlanStartMoney(new BigDecimal(days).multiply(postMoney));
                                 budget.setPlanEndMoney(budget.getPlanStaffCost().subtract(budget.getPlanStartMoney()));
                             }
                         }else {
@@ -541,18 +570,6 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     }
                 }
                 childrenList.addAll(vo2ChildrenList);
-//                //有子计划也要为父计划设置是否跨月,并且跨月多少天,预算多少钱
-//                ProjectCostBudget costBudget = new ProjectCostBudget();
-//                costBudget.setId(vo2.getId());
-//                if (isTwoMonth){
-//                    costBudget.setPlanIsTwoMonth(1);
-//                    costBudget.setPlanStartMonthDays(startTotalDays);
-//                    costBudget.setPlanEndMonthDays(endTotalDays);
-//                }else {
-//                    costBudget.setPlanIsTwoMonth(0);
-//                }
-//                costBudget.setPlanDays(totalDays);
-//                parentList.add(costBudget);
             }else {
                 //无子计划
                 ProjectCostBudget budget = new ProjectCostBudget();
@@ -562,9 +579,42 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     budget.setPlanIsTwoMonth(0);
                     budget.setPlanStartMoney(new BigDecimal(0));
                     budget.setPlanEndMoney(new BigDecimal(0));
+                    employeeTaskInfoService.deleteByBudgetIdAndParentId(budget.getId());
                 }else {
+                    //如果计划正在进行中或者已经完成,则跳过
+                    if (budget.getStatus() != null && budget.getStatus() != 1){
+                        continue;
+                    }
+                    employeeTaskInfoService.deleteByBudgetId(budget.getId());
                     //存在数据,则判断是否是固定计划
                     if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
+                        LocalDate startTime = budget.getPlanStartTime();
+                        LocalDate endTime = budget.getPlanEndTime();
+                        List<EmployeeTaskInfo> infoList = new ArrayList<>();
+                        //获取岗位单价
+                        BigDecimal postMoney = new BigDecimal(map.get(vo2.getPostType()).get(0).getDictValue());
+                        //获取计划日期中的工作日
+                        List<LocalDate> workDaysList = dateInfoMapper.getWorkDaysList(startTime, endTime);
+                        for (LocalDate today : workDaysList) {
+                            //保存预算到任务计划表
+                            EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
+                            employeeTaskInfo.setBudgetId(budget.getId());
+                            employeeTaskInfo.setProjectId(budget.getProjectId());
+                            employeeTaskInfo.setBudgetParentId(budget.getParentId());
+                            employeeTaskInfo.setUnitType(budget.getUnitType());
+                            employeeTaskInfo.setDeptId(budget.getDeptId());
+                            employeeTaskInfo.setCostType(budget.getCostType());
+                            employeeTaskInfo.setTaskDetail(budget.getTaskDetail());
+                            employeeTaskInfo.setProjectProcess(budget.getProjectProcess());
+                            employeeTaskInfo.setBudgetType(budget.getBudgetType());
+                            employeeTaskInfo.setOneDay(today);
+                            employeeTaskInfo.setWorkType(0);
+                            employeeTaskInfo.setPostType(budget.getPostType());
+                            employeeTaskInfo.setEmployeeSalary(postMoney);
+                            infoList.add(employeeTaskInfo);
+                        }
+                        employeeTaskInfoService.saveBatch(infoList);
+
                         //计划人工支出
                         budget.setPlanStaffCost(budget.getPlanDays().multiply(new BigDecimal(map.get(budget.getPostType()).get(0).getDictValue())));
                         //如果跨月
@@ -974,17 +1024,38 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         if (list != null && list.size() > 0){
             BigDecimal big = new BigDecimal(0);
             for (ProjectCostBudget budget : list) {
+                //判断是否跨年
                 if (budget.getRealPlanStartTime().getYear() != year || budget.getPracticalFinishTime().getYear() != year){
                     if (budget.getIsTwoMonth() != 1){
                         throw new ServiceException("计划年份异常");
                     }
                     if (budget.getPracticalFinishTime().getYear() != year){
-                        //如果结束时间不是今年,则使用开始金额
-                        big = big.add(budget.getPracticalStartMoney());
+                        //如果结束时间不是今年,则使用开始时间到年底的工作日,除以总工作日
+                        LocalDate start = budget.getRealPlanStartTime();
+                        LocalDate end = LocalDate.of(start.getYear(),12,31);
+                        Integer workDays = dateInfoMapper.getWorkDays(start, end);
+                        //如果工作日大于等于实际完成工作日,则直接把人工支出算到上一年
+                        if (workDays >= budget.getPracticalTaskDays().intValue()){
+                            big = big.add(budget.getActualTotalMoney());
+                        }else {
+                            if (budget.getPracticalTaskDays().intValue() != 0) {
+                                BigDecimal decimal = new BigDecimal(workDays).divide(budget.getPracticalTaskDays()).multiply(budget.getActualTotalMoney()).setScale(2, RoundingMode.HALF_UP);
+                                big = big.add(decimal);
+                            }
+                        }
                     }else {
-                        big = big.add(budget.getPracticalEndMoney());
+                        //开始时间不是今年
+                        LocalDate start = budget.getRealPlanStartTime();
+                        LocalDate end = LocalDate.of(start.getYear(),12,31);
+                        Integer workDays = dateInfoMapper.getWorkDays(start, end);
+                        //如果工作日大于等于实际完成工作日,则今年的支出就是0
+                        if (workDays < budget.getPracticalTaskDays().intValue()){
+                            BigDecimal decimal = new BigDecimal(workDays).divide(budget.getPracticalTaskDays()).multiply(budget.getActualTotalMoney()).setScale(2, RoundingMode.HALF_UP);
+                            big = big.add(budget.getActualTotalMoney().subtract(decimal));
+                        }
                     }
                 }else {
+                    //不跨年直接使用实际工资
                     big = big.add(budget.getActualTotalMoney());
                 }
             }

+ 2 - 0
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/CalculateNode.java

@@ -11,4 +11,6 @@ public interface CalculateNode {
     TokenType type();
 
     String literals();
+    String COLON=":";
+    String DXD_REG="[0-9.-]+(\\*[0-9.-]+)+";
 }

+ 20 - 2
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MinusNode.java

@@ -1,11 +1,13 @@
 package com.jfireel.expression.node.impl;
 
+import com.jfireel.expression.Expression;
 import com.jfireel.expression.token.Operator;
 import com.jfireel.expression.util.number.SubtractUtil;
 import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.StringUtils;
 
 import java.math.BigDecimal;
+import java.util.HashMap;
 import java.util.Map;
 
 public class MinusNode extends OperatorResultNode {
@@ -17,9 +19,12 @@ public class MinusNode extends OperatorResultNode {
     public Object calculate(Map<String, Object> variables) {
         Object leftValue = leftOperand.calculate(variables);
         Object rightValue = rightOperand.calculate(variables);
-        String reg = "[0-9.-]+(\\*[0-9.-]+)+";
-        if (StringUtils.handleNull(leftValue).matches(reg) && StringUtils.handleNull(rightValue).matches(reg)) {
+        String leftStr=StringUtils.handleNull(leftValue);
+        String rightStr=StringUtils.handleNull(rightValue);
+        if (leftStr.matches(DXD_REG) && rightStr.matches(DXD_REG)) {
             return CustomFunction.dXd(rightValue, leftValue);
+        }else if(leftStr.contains(COLON)&&rightStr.contains(COLON)){
+            return fraction(leftStr)-fraction(rightStr);
         }
         if (leftValue instanceof String && StringUtils.isNumber(leftValue)) {
             leftValue = new BigDecimal(leftValue.toString());
@@ -36,6 +41,19 @@ public class MinusNode extends OperatorResultNode {
         return SubtractUtil.calculate((Number) leftValue, (Number) rightValue);
     }
 
+    public static double fraction(String s){
+        String[] arr = s.split(COLON);
+        return Double.parseDouble(arr[0])/Double.parseDouble(arr[1]);
+    }
+
+
+/*    public static void main(String[] args) {
+        Map<String,Object> map = new HashMap<>();
+        map.put("A","1:2.36");
+        map.put("B","1:4");
+        System.out.println(Expression.parse("A-B").calculate(map).toString());
+    }*/
+
 //	public Object calculateOld(Map<String, Object> variables) {
 //		Object leftValue = leftOperand.calculate(variables);
 //		if(leftValue instanceof String && StringUtils.isNumber(leftValue)) {

+ 10 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MutliNode.java

@@ -1,5 +1,6 @@
 package com.jfireel.expression.node.impl;
 
+import com.jfireel.expression.Expression;
 import com.jfireel.expression.token.Operator;
 import com.jfireel.expression.util.number.MultiplyUtil;
 import com.mixsmart.utils.CustomFunction;
@@ -7,6 +8,7 @@ import com.mixsmart.utils.StringUtils;
 
 import java.math.BigDecimal;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -22,7 +24,7 @@ public class MutliNode extends OperatorResultNode {
         Object rightValue = rightOperand.calculate(variables);
         String reg = "[0-9.-]+(\\*[0-9.-]+)+";
         if (StringUtils.handleNull(leftValue).matches(reg) && StringUtils.handleNull(rightValue).matches(reg)) {
-            return CustomFunction.dXd(rightValue, leftValue);
+            return CustomFunction.dXd(rightValue, leftValue,1,1);
         } else if (StringUtils.handleNull(leftValue).matches(reg)) {
             int n = StringUtils.handleNull(leftValue).trim().split("[*]").length;
             String rightValueStr = Collections.nCopies(n, rightValue).stream().map(StringUtils::handleNull).collect(Collectors.joining("*"));
@@ -47,4 +49,11 @@ public class MutliNode extends OperatorResultNode {
         return MultiplyUtil.calculate((Number) leftValue, (Number) rightValue);
     }
 
+/*    public static void main(String[] args) {
+        Map<String,Object> map = new HashMap<>();
+        map.put("A","1*2");
+        map.put("B","1*2");
+        System.out.println(Expression.parse("A*B").calculate(map).toString());
+    }*/
+
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/OperatorResultNode.java

@@ -36,6 +36,7 @@ public abstract class OperatorResultNode implements CalculateNode {
         return Token.OPERATOR_RESULT;
     }
 
+    @Override
     public String literals() {
         return leftOperand.literals() + type.getLiterals() + rightOperand.literals();
     }

+ 7 - 10
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -1051,12 +1051,7 @@ public class CustomFunction {
               .toEpochMilli();
     }
 
-/*    public static void main(String[] args) {
-             List<Object> l1 = Arrays.asList("16:00","2023年6月29日 16:10:31","2023年6月29日 16:09");
-             List<Object> l2 = Arrays.asList("2023年6月29日16:50");
-        System.out.println(minutesPassed(l1,l2));
 
-    }*/
 
     public static Object k2d(Object k) {
         Matcher mt = RegexUtils.matcher("[A-Z]*(\\d*)\\+([\\d|\\.]*)", k.toString());
@@ -2582,11 +2577,13 @@ public class CustomFunction {
         return dXd(design, data, xN, scale, mode);
     }
 
-//    public static void main(String[] args) {
-//        String a="100*100";
-//        List<Object>list  = new ArrayList<>(Arrays.asList("101*102","201*198"));
-//        list.forEach(d-> System.out.println(dXd(a,d)));
-//    }
+/*
+    public static void main(String[] args) {
+        String a="100/200";
+        List<Object>list  = new ArrayList<>(Arrays.asList(101,102,201,198));
+        list.forEach(d-> System.out.println(dXd(a,d)));
+    }
+*/
 
     /**
      * @return java.lang.Object

+ 11 - 9
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -556,18 +556,20 @@ public class FormulaUtils {
             e.printStackTrace();
         }
     }
-
-    public static Map<String, String> getElementCell(String uri) {
+    public static Map<String, String> getElementCell(String uri){
+        return getElementCell(uri,null);
+    }
+    public static Map<String, String> getElementCell(String uri,String key) {
         try {
             InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(uri);
+            String filter=" [keyname]";
+            if(Func.isNotBlank(key)){
+                filter="[keyname^="+key+"__]";
+            }
             Document document=Jsoup.parse(IoUtil.readToString(inputStreamByUrl));
             Map<String,String> result= document
                     .select("table").first()
-                    .select("el-input[keyname]").stream()
-//                    .select("tr").stream()有缺漏的情况
-//                    .flatMap(tr -> tr.select("td").stream())
-//                    .filter(d -> !d.children().isEmpty())
-//                    .map(d -> d.children().get(0))
+                    .select(filter).stream()
                     .map(d -> d.attr("keyname")).filter(StringUtils::isNotEmpty).map(e -> e.split("__"))
                     .collect(
                             Collectors.toMap(
@@ -589,8 +591,8 @@ public class FormulaUtils {
     }
 
 /*    public static void main(String[] args) {
-        Map<String,String> map=getElementCell("/www/wwwroot/Users/hongchuangyanfa/Desktop/privateUrl/1645670856300429312.html");
-        System.out.println();
+        Map<String,String> map=getElementCell("/www/wwwroot/Users/hongchuangyanfa/Desktop/privateUrl/1688447882195107840.html","key_31");
+        System.out.println(map);
     }*/
     /**
      * @Description  定位信息排序

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -489,6 +489,8 @@ public class ExcelTabController extends BladeController {
         Elements trs = table.select("tr");
         if(StringUtils.isNotEmpty(excelTab.getTabId())){
             updateWrapper.set("init_table_id", excelTab.getTabId());
+            org.springblade.manager.entity.TableInfo tableInfo = tableInfoService.getById(excelTab.getTabId());
+            updateWrapper.set("init_table_name", tableInfo.getTabEnName());
         }else {
             if (aPrivate.getInitTableId() == null) {
                 org.springblade.manager.entity.TableInfo tableInfo = tableInfoService.getOne(new LambdaQueryWrapper<org.springblade.manager.entity.TableInfo>()

+ 7 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -272,7 +272,7 @@ public class FormulaController {
     @GetMapping("/range")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "自动填充数据", notes = "根据设计值、偏差范围、频率自动填充数据")
-    public R<Map<String, Object>> rangeList(RangeInfo info) throws FileNotFoundException {
+    public R<Map<String, Object>> rangeList(RangeInfo info) throws FileNotFoundException, InterruptedException {
         if (info.verify()) {
             String bak = info.getKey().replaceAll("key_\\d+__", "");
             info.setKey(info.getKey().replaceAll("__[\\d_]+", ""));
@@ -291,7 +291,12 @@ public class FormulaController {
             if (Func.isBlank(info.getPass())) {
                 info.setPass(info.getSize());
             }
-            Map<String, String> keymap = this.tabService.getTablbCols(info.getPkId().toString(), null);
+            WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
+                    .eq(WbsTreeContract::getPKeyId, info.getPkId()));
+            if(wbsTreeContract==null){
+                return R.fail("表流水号有误");
+            }
+            Map<String, String> keymap = FormulaUtils.getElementCell(wbsTreeContract.getHtmlUrl());
             if (!keymap.containsKey(info.getKey())) {
                 System.out.println("获取元素定位失败");
                 keymap.put(info.getKey(), bak);

+ 18 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/FormulaClientImpl.java

@@ -1,13 +1,17 @@
 package org.springblade.manager.feign;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.mixsmart.utils.FormulaUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.entity.Formula;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.service.IExcelTabService;
 import org.springblade.manager.service.IFormulaService;
+import org.springblade.manager.service.IWbsTreeContractService;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -25,6 +29,7 @@ public class FormulaClientImpl implements FormulaClient {
     private final IFormulaService service;
     private final JdbcTemplate jdbcTemplate;
     private final IExcelTabService excelTabService;
+    private final IWbsTreeContractService  wbsTreeContractService;
 
     @Override
     public void formulaExecute() {
@@ -33,21 +38,20 @@ public class FormulaClientImpl implements FormulaClient {
     @Override
     public String dPoint(Long pkId, String key) {
         StringBuilder sb = new StringBuilder();
-        try {
-            Map<String, String> keysMap = this.excelTabService.getTablbCols(String.valueOf(pkId), null);
-            Long id = this.jdbcTemplate.queryForObject("select d.formula_id from m_wbs_tree_contract a join m_table_info b on a.init_table_name=b.tab_en_name join m_wbs_form_element c on c.f_id=b.id join m_element_formula_mapping d on c.id=d.element_id where a.p_key_id=" + pkId + " and c.e_key='" + key + "'  ORDER BY d.scope desc limit 1", Long.class);
-            if (Func.isNotEmpty(id)) {
-                Formula formula = this.service.getById(id);
-                if (Func.isNotEmpty(formula)) {
-                    formula.getRelyList().forEach(e -> {
-                        String heard = e.split(StringPool.COLON)[1];
-                        sb.append(heard).append("__").append(keysMap.get(heard)).append(StringPool.COMMA);
-                    });
-                }
+        WbsTreeContract wtc= this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkId));
+        if(wtc==null){
+          return  "表id有误";
+        }
+        Map<String, String> keysMap = FormulaUtils.getElementCell(wtc.getHtmlUrl());
+        Long id = this.jdbcTemplate.queryForObject("select d.formula_id from m_wbs_tree_contract a join m_table_info b on a.init_table_name=b.tab_en_name join m_wbs_form_element c on c.f_id=b.id join m_element_formula_mapping d on c.id=d.element_id where a.p_key_id=" + pkId + " and c.e_key='" + key + "'  ORDER BY d.scope desc limit 1", Long.class);
+        if (Func.isNotEmpty(id)) {
+            Formula formula = this.service.getById(id);
+            if (Func.isNotEmpty(formula)) {
+                formula.getRelyList().forEach(e -> {
+                    String heard = e.split(StringPool.COLON)[1];
+                    sb.append(heard).append("__").append(keysMap.get(heard)).append(StringPool.COMMA);
+                });
             }
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
-            sb.append("无法获取定位信息");
         }
         return sb.toString();
     }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -420,8 +420,8 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
     }
 
     @Override
-    public List<AppWbsTreeContractVO> searchNodeAllTableInfo(String primaryKeyId, String type, String contractId, String projectId) {
-        List<AppWbsTreeContractVO> list = wbsTreeContractService.searchNodeAllTable(primaryKeyId, type, contractId, projectId);
+    public List<AppWbsTreeContractVO> searchNodeAllTableInfo(String primaryKeyId, String type, String contractId, String projectId,Long userId) {
+        List<AppWbsTreeContractVO> list = wbsTreeContractService.searchNodeAllTable(primaryKeyId+":"+userId, type, contractId, projectId);
         return list;
     }
 

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -167,7 +167,8 @@ public class FormulaTurnPoint implements FormulaStrategy {
             });
             if(tmpList.size()>0){
                 FormData[] fda= new FormData[]{dsbh,dmgcsj,dmgcsc,dmgcpc,sjgcsc};
-                Map<Integer,List<Object>> group=tmpList.stream().collect(Collectors.groupingBy(e->tmpList.indexOf(e)/fda.length));
+                AtomicInteger ai = new AtomicInteger(0);
+                Map<Integer,List<Object>> group=tmpList.stream().collect(Collectors.groupingBy(e->ai.getAndIncrement()%fda.length));
                 for(int i=0;i<fda.length;i++){
                     FormData fd= fda[i];
                     FormulaUtils.write(fd,group.get(i),true);

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

@@ -55,7 +55,7 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
     List<WbsContractNodeVo> appSearchConcealedNodes(long primaryKeyId, Long contractId);
 
     // 频率设计值  添加表单
-    boolean addTabInfoByRan(RangeInfo info, List<Object> moreData, String[] excLenght) throws FileNotFoundException;
+    boolean addTabInfoByRan(RangeInfo info, List<Object> moreData, String[] excLenght) throws FileNotFoundException, InterruptedException;
 
     boolean syncTabData(String pKeyId) throws Exception;
 

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

@@ -585,10 +585,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             if(wop.size()>0){
                 /*存在检验表*/
                 tec.getKeyMappers().stream().filter(e->wop.contains(e.getTableName())&&tec.formDataMap.containsKey(e.getCode())).forEach(k->{
-                    /*包含的单元格超过三个就算实测项目*/
+                    /*包含的单元格超过三个就算实测项目部分实测值元素只有一个单元格,拼接写入全部数据*/
                     /*k.getEName().contains("实测值")&&k.getEName().contains("偏差值")*/
                     FormData ft=tec.formDataMap.get(k.getCode());
-                    if(ft.getCoordsList().size()>5){
+                    if(ft.getCoordsList().size()>5||(k.getEName().contains("实测值")&&!k.getEName().contains("设计值")&&!k.getEName().contains("合格率"))){
                         tec.checkItems.add(ft);
                     }else if(k.getEName().contains("检验日期")){
                         tec.checkDate.add(ft);
@@ -1071,8 +1071,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 targetItem.setDesigns(designList.getValues().stream().map(ElementData::getValue).flatMap(e -> CustomFunction.obj2ListNe(e).stream()).filter(StringUtils::isNumber).map(StringUtils::obj2Double).collect(Collectors.toList()));
                             }
                             AtomicInteger index = new AtomicInteger();
-                            int len = targetItem.getDesigns().size();
-                            if (len > 0) {
+                            if (targetItem.getDesigns()!=null&&targetItem.getDesigns().size()>0) {
+                                int len = targetItem.getDesigns().size();
                                 targetItem.setData(new ArrayList<>(list.stream().map(StringUtils::obj2Double).collect(Collectors.groupingBy(k -> index.getAndIncrement() / len, LinkedHashMap::new, Collectors.toList())).values()));
                             } else {
                                 targetItem.setData(Collections.singletonList(list.stream().map(StringUtils::obj2Double).collect(Collectors.toList())));

+ 20 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.service.impl;
 
+import cn.hutool.core.swing.ScreenUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -25,6 +26,7 @@ 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.secure.utils.SecureUtil;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.dto.RangeInfo;
@@ -411,6 +413,19 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
     @Override
     public List<AppWbsTreeContractVO> searchNodeAllTable(String primaryKeyId, String tableOwner, String contractId, String projectId) {
+
+        //由于fegin 调用时,获取不到UserId
+        Long userId =-1L;
+        if(primaryKeyId.indexOf(":")>=0){
+            String ds[] = primaryKeyId.split(":");
+            primaryKeyId = ds[0];
+            userId = Long.parseLong(ds[1]);
+            if(userId == -1L){
+                userId =  AuthUtil.getUserId();
+            }
+        }else{
+            userId = AuthUtil.getUserId();
+        }
         WbsTreeContract wbsTreeContract = baseMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, primaryKeyId));
         if (wbsTreeContract == null) {
@@ -418,9 +433,9 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         }
 
         //当前项目合同段只会存在一个角色roleId
-        SaveUserInfoByProject userInfo = baseMapper.selectRoleInfo(AuthUtil.getUserId(), contractId, projectId);
+        SaveUserInfoByProject userInfo = baseMapper.selectRoleInfo(userId, contractId, projectId);
         if (userInfo == null) {
-            throw new ServiceException("请先分配当前用户对该合同段的角色信息");
+            throw new ServiceException("请先分配当前用户对该合同段的角色信息="+ SecureUtil.getUserId());
         }
         String roleId = userInfo.getRoleId();
 
@@ -462,7 +477,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
     // 频率添加表单
     @Override
-    public boolean addTabInfoByRan(RangeInfo info, List<Object> moreData, String[] excLenght) {
+    public boolean addTabInfoByRan(RangeInfo info, List<Object> moreData, String[] excLenght) throws InterruptedException {
         WbsTreeContract wbsInfo = this.baseMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, info.getPkId()));
 
@@ -535,8 +550,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 WbsTreeContract wbsTreeContract = new WbsTreeContract();
                 BeanUtil.copy(wbsInfo, wbsTreeContract);
                 wbsTreeContract.setPKeyId(newPkId);
+                Thread.sleep(200);
                 wbsTreeContract.setCreateTime(new Date());
                 wbsTreeContract.setTabGroupId(tabGroupId);
+                wbsTreeContract.setSort(wbsInfo.getSort());
                 String nodeName = wbsTreeContractList2.get(wbsTreeContractList2.size() - 1).getNodeName();
 
                 if (nodeName.indexOf("_PL_") >= 0) {

+ 16 - 0
blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java

@@ -209,5 +209,21 @@ public class DeptController extends BladeController {
     }
 
 
+    /**
+     * 获取所有部门
+     */
+    @GetMapping("/listAllByType")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "deptName", value = "部门名称", paramType = "query", dataType = "string"),
+            @ApiImplicitParam(name = "fullName", value = "部门全称", paramType = "query", dataType = "string"),
+            @ApiImplicitParam(name = "deptType", value = "部门类型", paramType = "query", dataType = "string")
+    })
+    @ApiOperationSupport(order = 11)
+    @ApiOperation(value = "列表", notes = "传入dept")
+    public R<List<Dept>> listAllByType(@ApiIgnore @RequestParam Map<String, Object> dept, BladeUser bladeUser) {
+        QueryWrapper<Dept> queryWrapper = Condition.getQueryWrapper(dept, Dept.class);
+        List<Dept> list = deptService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Dept::getTenantId, bladeUser.getTenantId()) : queryWrapper);
+        return R.data(list);
+    }
 
 }

+ 6 - 1
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java

@@ -180,7 +180,12 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
 
     @Override
     public List<DeptVO> getUserDeptTreeInfo(String tenantId,String deptType) {
-        return ForestNodeMerger.merge(baseMapper.getUserDeptTreeInfo(tenantId,deptType));
+        if(deptType.equals("-1")){
+            deptType="";
+            return ForestNodeMerger.merge(baseMapper.getUserDeptTreeInfo(tenantId,deptType));
+        }else{
+            return baseMapper.getUserDeptTreeInfo(tenantId,deptType);
+        }
     }
 
 }