Bläddra i källkod

Merge remote-tracking branch 'origin/master'

liuyc 2 år sedan
förälder
incheckning
7f0b11eda2

+ 5 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/AppWbsTreeContractVO.java

@@ -1,6 +1,8 @@
 package org.springblade.manager.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.manager.entity.TableFile;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.AppUser;
 
@@ -13,4 +15,7 @@ public class AppWbsTreeContractVO extends WbsTreeContract {
     // 填报用户信息
     private List<AppUser> appUserList;
 
+    @ApiModelProperty(value = "附件")
+    private List<TableFile> fileList;
+
 }

+ 22 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractVO7.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.tool.node.INode;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.manager.entity.TableFile;
+import org.springblade.manager.entity.WbsTreeContract;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class WbsTreeContractVO7 extends WbsTreeContract {
+
+    @ApiModelProperty(value = "附件")
+    private List<TableFile> fileList;
+
+}

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

@@ -1163,11 +1163,81 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         List<ProjectCostBudget> allPlan = budgetService.getAllPlanByYear(y);
         Boolean isBudget = true;
         Map<Integer, List<ProjectCostBudget>> allPlanMap = new HashMap<>();
+        Boolean isOtherBudget = true;
         if (allPlan != null && allPlan.size() > 0){
+            List<ProjectCostBudget> parentList = new ArrayList<>();
             //如果不为空,根据costType分组
             allPlanMap = allPlan.parallelStream()
                     .collect(Collectors.groupingBy(ProjectCostBudget::getCostType));
-            //分解出父计划和子计划,需要用父计划其他预算支出
+            //所有父计划id
+            Set<Long> parentIds = new HashSet<>();
+            Set<Long> longs = allPlan.stream().filter(l -> l.getParentId() == 0).map(ProjectCostBudget::getId).collect(Collectors.toSet());
+            Set<Long> longs2 = allPlan.stream().filter(l -> l.getParentId() > 0).map(ProjectCostBudget::getParentId).collect(Collectors.toSet());
+            parentIds.addAll(longs);
+            parentIds.addAll(longs2);
+            parentList = budgetService.listByIds(parentIds);
+            Map<Long, List<ProjectCostBudget>> map = allPlan.parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudget::getParentId));
+            parentList = parentList.stream().filter(l->l.getBudgetCountMoney().subtract(l.getBudgetStaffCost()).intValue() != 0).collect(Collectors.toList());
+            if (parentList != null && parentList.size() > 0) {
+                //循环父计划,统计子计划
+                for (ProjectCostBudget budget : parentList) {
+                    BigDecimal noStaffCost = budget.getBudgetCountMoney().subtract(budget.getBudgetStaffCost());
+                    if (map.get(budget.getId()) != null && map.get(budget.getId()).size() > 0) {
+                        List<ProjectCostBudget> budgetList = map.get(budget.getId());
+                        //有子计划才设置,没子计划证明有值
+                        //最小计划开始时间
+                        LocalDate start = LocalDate.MAX;
+                        //最大计划开始时间
+                        LocalDate end = LocalDate.MIN;
+                        //总天数
+                        BigDecimal total = new BigDecimal(0);
+                        //开始月工作日
+                        BigDecimal startDays = new BigDecimal(0);
+                        //结束月工作日
+                        BigDecimal endDays = new BigDecimal(0);
+                        for (ProjectCostBudget costBudget : budgetList) {
+                            if (costBudget.getPlanStartTime().isBefore(start)) {
+                                start = costBudget.getPlanStartTime();
+                            }
+                            if (costBudget.getPlanEndTime().isAfter(end)) {
+                                end = costBudget.getPlanEndTime();
+                            }
+                            total = total.add(costBudget.getPlanDays());
+                            if (costBudget.getPlanIsTwoMonth() == 0) {
+                                //如果开始时间和最小计划时间是一个月,则直接算入开始工作日
+                                if (start.getMonthValue() == costBudget.getPlanStartTime().getMonthValue()) {
+                                    startDays = startDays.add(costBudget.getPlanDays());
+                                } else {
+                                    //开始时间和最小计划时间不是一个月,算入结束工作日
+                                    endDays = endDays.add(costBudget.getPlanDays());
+                                }
+
+                            } else {
+                                startDays = startDays.add(costBudget.getPlanStartMonthDays());
+                                endDays = endDays.add(costBudget.getPlanEndMonthDays());
+                            }
+
+                        }
+                        budget.setPlanStartTime(start);
+                        budget.setPlanEndTime(end);
+                        budget.setPlanDays(total);
+                        //如果没跨月
+                        if (start.getMonthValue() == end.getMonthValue()) {
+                            budget.setPlanIsTwoMonth(0);
+                            budget.setPlanStartMoney(noStaffCost);
+                        } else {
+                            //跨月
+                            budget.setPlanIsTwoMonth(1);
+                            BigDecimal decimal = startDays.divide(total, 2, BigDecimal.ROUND_HALF_UP).multiply(noStaffCost);
+                            budget.setPlanStartMoney(decimal);
+                            budget.setPlanEndMoney(noStaffCost.subtract(decimal));
+                        }
+                    }
+                }
+            }else {
+                isOtherBudget = false;
+            }
 
         }else {
             isBudget = false;

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -213,4 +213,12 @@ public class WbsTreeContractController extends BladeController {
         return R.data(wbsTreeContract);
     }
 
+    @GetMapping("/search-node-tablesAndFile")
+    @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "查询当前节点下所有表的附件信息", notes = "传入节点primaryKeyId、type、合同段id、项目id")
+    public R<List<AppWbsTreeContractVO>> searchNodeAllTableAndFile(String primaryKeyId, String type, String contractId, String projectId) {
+        List<AppWbsTreeContractVO> list = iWbsTreeContractService.searchNodeAllTableAndFile(primaryKeyId, type, contractId, projectId);
+        return R.data(list);
+    }
+
 }

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TableFileMapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.manager.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.manager.entity.TableFile;
 import org.springblade.manager.vo.TableFileVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -44,4 +45,5 @@ public interface TableFileMapper extends BaseMapper<TableFile> {
 
     void delDataById(String id, Long recordId);
 
+    List<TableFile> getAllFileByIds(@Param("ids") List<Long> ids);
 }

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TableFileMapper.xml

@@ -36,6 +36,12 @@
     <select id="selectTableFileList" resultMap="TableFileVO">
         select *,domain_url as url from m_table_file where is_deleted = 0 and type=2 and tab_id = #{pKid}
     </select>
+    <select id="getAllFileByIds" resultType="org.springblade.manager.entity.TableFile">
+        SELECT mtf.* from m_table_file mtf WHERE  type = 2 and tab_id in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
 
     <delete id="delDataById">
         delete from m_table_file where id= #{id}

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

@@ -32,6 +32,8 @@ import java.util.List;
  */
 public interface ITableFileService extends IService<TableFile> {
 
+    List<TableFile> getAllFileByIds(List<Long> list);
+
     /**
      * 自定义分页
      *

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

@@ -65,4 +65,5 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
 
     boolean syncContractTabSort(String projectId);
 
+    List<AppWbsTreeContractVO> searchNodeAllTableAndFile(String primaryKeyId, String type, String contractId, String projectId);
 }

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

@@ -35,6 +35,11 @@ import java.util.List;
 @Service
 public class TableFileServiceImpl extends ServiceImpl<TableFileMapper, TableFile> implements ITableFileService {
 
+    @Override
+    public List<TableFile> getAllFileByIds(List<Long> ids) {
+        return baseMapper.getAllFileByIds(ids);
+    }
+
     @Override
     public IPage<TableFileVO> selectTableFilePage(IPage<TableFileVO> page, TableFileVO tableFile) {
         return page.setRecords(baseMapper.selectTableFilePage(page, tableFile));

+ 26 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -37,6 +37,7 @@ import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.mapper.ContractInfoMapper;
 import org.springblade.manager.mapper.WbsTreeContractMapper;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
+import org.springblade.manager.service.ITableFileService;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.vo.*;
 import org.springblade.system.cache.ParamCache;
@@ -54,6 +55,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigInteger;
+import java.time.Year;
 import java.util.*;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -71,6 +73,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     private final JdbcTemplate jdbcTemplate;
     private final InformationQueryClient informationQueryClient;
     private final ContractClient contractClient;
+    private final ITableFileService tableFileService;
     @Autowired
     StringRedisTemplate redisTemplate;
 
@@ -875,6 +878,29 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return false;
     }
 
+    @Override
+    public List<AppWbsTreeContractVO> searchNodeAllTableAndFile(String primaryKeyId, String type, String contractId, String projectId) {
+        List<AppWbsTreeContractVO> vos = this.searchNodeAllTable(primaryKeyId, type, contractId, projectId);
+        if (vos != null && vos.size() > 0) {
+            List<Long> list = vos.stream().map(AppWbsTreeContractVO::getPKeyId).collect(Collectors.toList());
+            List<TableFile> files = tableFileService.getAllFileByIds(list);
+            if (files != null && files.size() > 0) {
+                Map<String, List<TableFile>> map = files.parallelStream()
+                        .collect(Collectors.groupingBy(TableFile::getTabId));
+                List<AppWbsTreeContractVO> voList = new ArrayList<>();
+                for (AppWbsTreeContractVO vo : vos) {
+                    if (map.get(vo.getPKeyId()+"") != null && map.get(vo.getPKeyId()+"").size() > 0) {
+                        vo.setFileList(map.get(vo.getPKeyId()+""));
+                        voList.add(vo);
+                    }
+                }
+                return voList;
+            }
+            return null;
+        }
+        return null;
+    }
+
     /**
      * 批量修改合同段表单sort
      *