Browse Source

Merge remote-tracking branch 'origin/master'

liuyc 2 years ago
parent
commit
4717506cec

+ 13 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -116,6 +116,9 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "计划天数")
     @ApiModelProperty(value = "计划天数")
     private BigDecimal planDays;
     private BigDecimal planDays;
 
 
+    @ApiModelProperty(value = "计划人工成本")
+    private BigDecimal planStaffCost;
+
     @ApiModelProperty(value = "任务实际完成天数")
     @ApiModelProperty(value = "任务实际完成天数")
     private BigDecimal practicalTaskDays;
     private BigDecimal practicalTaskDays;
 
 
@@ -138,7 +141,7 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "实际计划开启时间")
     @ApiModelProperty(value = "实际计划开启时间")
     private LocalDate realPlanStartTime;
     private LocalDate realPlanStartTime;
 
 
-    @ApiModelProperty(value = "是否跨月,0不跨月,1跨月")
+    @ApiModelProperty(value = "实际工作是否跨月,0不跨月,1跨月")
     private Integer isTwoMonth;
     private Integer isTwoMonth;
 
 
     @ApiModelProperty(value = "实际开始月工资")
     @ApiModelProperty(value = "实际开始月工资")
@@ -147,4 +150,13 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "实际结束月工资")
     @ApiModelProperty(value = "实际结束月工资")
     private BigDecimal practicalEndMoney;
     private BigDecimal practicalEndMoney;
 
 
+    @ApiModelProperty(value = "计划是否跨月,0不跨月,1跨月")
+    private Integer planIsTwoMonth;
+
+    @ApiModelProperty(value = "计划开始月工资")
+    private BigDecimal planStartMoney;
+
+    @ApiModelProperty(value = "计划结束月工资")
+    private BigDecimal planEndMoney;
+
 }
 }

+ 77 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileAutoController.java

@@ -108,7 +108,83 @@ ArchiveFileAutoController extends BladeController {
                         }
                         }
                     }
                     }
 
 
-                    archive.setAutoFileSort(l + archive.getAutoFileSort());
+                    //新增不排序
+                    //archive.setAutoFileSort(archive.getAutoFileSort());
+                    //待修改
+                    archive.setIsDeleted(0);
+                    archive.setIsArchive(1);
+                    archive.setIsAutoFile(1);
+                    if(saveVos.getList() != null && saveVos.getList().size()>0 && saveVos.getList().get(0).getFileSize() != null) {
+                        archive.setFileSize(saveVos.getList().get(0).getFileSize());
+                    }
+                    archivesAutoService.save(archive);
+                } else {
+                    archivesAutoService.updateById(archive);
+                }
+            }
+        } catch (NumberFormatException e) {
+            e.printStackTrace();
+            return R.data(false);
+        }
+        return R.data(true);
+    }
+
+
+    /**
+     * 批量新增
+     */
+    @PostMapping("/batchSortSave")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "批量新增")
+    public R<Boolean> batchSortSave(@RequestBody ArchivesAutoVO archiveList) {
+        try {
+            for (ArchivesAutoVO archive : archiveList.getList()) {
+                if (archive.getId() == null) {
+
+                    archive.setId(SnowFlakeUtil.getId());
+                    int l = (int) System.currentTimeMillis();
+                    List<ArchivesAutoVO.ApprovalFile> saveList = archive.getApprovalFileList();
+                    ArchiveFileVO saveVos = new ArchiveFileVO();
+                    Integer pageN = 0;
+                    if (saveList != null && saveList.size() > 0) {
+                        int i = 1;
+                        List<ArchiveFileVO> list = new ArrayList<>();
+                        for (ArchivesAutoVO.ApprovalFile approvalFile : saveList) {
+                            ArchiveFileVO saveVo = BeanUtil.copy(approvalFile, ArchiveFileVO.class);
+                            saveVo.setSort(l + i);
+                            saveVo.setIsAutoFile(1);
+                            saveVo.setStatus(new Integer("0").equals(saveVo.getIsApproval()) ? 2 : 0);
+                            saveVo.setIsCertification(new Integer("0").equals(saveVo.getIsNeedCertification()) ? 1 : 0);
+                            saveVo.setArchiveId(archive.getId());
+                            saveVo.setOriginId(archive.getId());
+                            if (saveVo.getFileUrl() != null && saveVo.getFileUrl().lastIndexOf(".") > -1
+                                    && (saveVo.getFileUrl().lastIndexOf(".") + 1) < saveVo.getFileUrl().length()) {
+                                String name = saveVo.getFileUrl().substring(saveVo.getFileUrl().lastIndexOf(".") + 1);
+                                saveVo.setFileType((long) FileUtils.getFileType(name));
+                            }
+                            saveVo.setSourceType(2);
+                            saveVo.setProjectId(archive.getProjectId() == null ? "" : archive.getProjectId().toString());
+                            saveVo.setContractId(archive.getContractId() == null ? "" : archive.getContractId().toString());
+                            list.add(saveVo);
+                            if (saveVo.getFilePage() != null && !saveVo.getFilePage().equals("")) {
+                                pageN = pageN + saveVo.getFilePage();
+                            }
+                            i++;
+                        }
+                        saveVos.setList(list);
+                    }
+                    this.archiveFileClient.saveArchiveFile(saveVos);
+                    archive.setFileN(saveVos.getSize());
+                    archive.setPageN(pageN);
+                    List<ArchiveTreeContract> archiveTreeContracts = this.archiveTreeContractClient.queryAllChildByAncestors(archive.getNodeId()+"", archive.getContractId() == null ? null : archive.getContractId());
+                    if (archiveTreeContracts != null && archiveTreeContracts.size() > 0) {
+                        archive.setTreeSort(archiveTreeContracts.get(0).getTreeSort());
+                        if (archiveTreeContracts.get(0).getStorageType() != null) {
+                            archive.setCarrierType(archiveTreeContracts.get(0).getStorageType().toString());
+                        }
+                    }
+
+                    archive.setAutoFileSort(archive.getAutoFileSort());
                     //待修改
                     //待修改
                     archive.setIsDeleted(0);
                     archive.setIsDeleted(0);
                     archive.setIsArchive(1);
                     archive.setIsArchive(1);

+ 4 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -381,11 +381,13 @@ public class ArchivesAutoController extends BladeController {
 			//先验证当前项目是否在自动组卷中,组卷中直接返回
 			//先验证当前项目是否在自动组卷中,组卷中直接返回
 			//ProjectInfo projectInfo = projectClient.getById(String.valueOf(projectId));
 			//ProjectInfo projectInfo = projectClient.getById(String.valueOf(projectId));
 			ContractInfo contract = contractClient.getContractById(contractId);
 			ContractInfo contract = contractClient.getContractById(contractId);
-			Integer isArchivesAuto = 100;
+			Integer isArchivesAuto = 0;
 			if (contract != null) {
 			if (contract != null) {
 				isArchivesAuto = contract.getIsArchivesAuto();
 				isArchivesAuto = contract.getIsArchivesAuto();
-				if(isArchivesAuto==-1 || isArchivesAuto==null || isArchivesAuto==0){
+				if( isArchivesAuto==0){
 					isArchivesAuto=100;
 					isArchivesAuto=100;
+				}else if (isArchivesAuto==-1 || isArchivesAuto==null) {
+					isArchivesAuto=0;
 				}
 				}
 			}
 			}
 			return R.data(isArchivesAuto);
 			return R.data(isArchivesAuto);

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -172,7 +172,7 @@
                 #{nodeId}
                 #{nodeId}
             </foreach>
             </foreach>
         </if>
         </if>
-        order by u.tree_sort,u.auto_file_sort,u.file_number,u.create_time asc
+        order by u.tree_sort,u.auto_file_sort is null ,u.auto_file_sort,u.file_number is null,u.file_number,u.create_time asc
         limit #{current}, #{size}
         limit #{current}, #{size}
     </select>
     </select>
 
 

+ 83 - 33
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -441,6 +441,22 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 list.addAll(constructUnit.get(i));
                 list.addAll(constructUnit.get(i));
             }
             }
         }
         }
+        //获取当前所有岗位类型,用于统计计划人工支出
+        List<DictInfo> postType = baseMapper.getAllPostType();
+        if (postType == null || postType.size() <= 0){
+            throw new ServiceException("保存失败,没有配置岗位类型");
+        }
+        //根据岗位id分类
+        Map<Long, List<DictInfo>> map = postType.parallelStream()
+                .collect(Collectors.groupingBy(DictInfo::getId));
+        //获取当前任务类型,如果是临时任务,就不用计算人工成本
+        List<DictInfo> taskInfo = baseMapper.getAllTaskInfo();
+        if (taskInfo == null || taskInfo.size() <= 0){
+            throw new ServiceException("保存失败,没有配置任务类型");
+        }
+        //根据任务类型id分类
+        Map<Long, List<DictInfo>> map2 = taskInfo.parallelStream()
+                .collect(Collectors.groupingBy(DictInfo::getId));
         List<ProjectCostBudget> childrenList = new ArrayList<>();
         List<ProjectCostBudget> childrenList = new ArrayList<>();
         List<ProjectCostBudget> parentList = new ArrayList<>();
         List<ProjectCostBudget> parentList = new ArrayList<>();
         //把所有子计划分离出来,并且设置父类id
         //把所有子计划分离出来,并且设置父类id
@@ -448,6 +464,14 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             List<ProjectCostBudgetVO2> vo2ChildrenList = vo2.getChildrenList();
             List<ProjectCostBudgetVO2> vo2ChildrenList = vo2.getChildrenList();
             if (vo2ChildrenList != null && vo2ChildrenList.size() > 0){
             if (vo2ChildrenList != null && vo2ChildrenList.size() > 0){
                 for (ProjectCostBudget budget : vo2ChildrenList) {
                 for (ProjectCostBudget budget : vo2ChildrenList) {
+                    //如果计划正在进行中或者已经完成,则跳过
+                    if (budget.getStatus() != null && budget.getStatus() != 1){
+                        continue;
+                    }
+                    //如果保存太快,没有生成planDays,就查询
+                    if (budget.getPlanDays() == null || budget.getPlanDays().intValue() == 0){
+                        budget.setPlanDays(new BigDecimal( CommonUtil.getWorkDays(budget.getPlanStartTime(),budget.getPlanEndTime())));
+                    }
                     budget.setProjectId(vo.getProjectId());
                     budget.setProjectId(vo.getProjectId());
                     budget.setParentId(vo2.getId());
                     budget.setParentId(vo2.getId());
                     budget.setCostType(vo2.getCostType());
                     budget.setCostType(vo2.getCostType());
@@ -456,12 +480,57 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     budget.setBudgetType(vo2.getBudgetType());
                     budget.setBudgetType(vo2.getBudgetType());
                     budget.setProjectProcess(vo2.getProjectProcess());
                     budget.setProjectProcess(vo2.getProjectProcess());
                     budget.setTaskDetail(vo2.getTaskDetail());
                     budget.setTaskDetail(vo2.getTaskDetail());
+                    budget.setPostType(vo2.getPostType());
+                    //只计算固定计划的人工成本
+                    if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
+                        //计划人工支出
+                        budget.setPlanStaffCost(budget.getPlanDays().multiply(new BigDecimal(map.get(vo2.getPostType()).get(0).getDictValue())));
+                        //如果跨月
+                        if (budget.getPlanStartTime().getMonthValue() != budget.getPlanEndTime().getMonthValue()) {
+                            budget.setPlanIsTwoMonth(1);
+                            //计算开始到月底多少个工作日
+                            int days = CommonUtil.getWorkDays(budget.getPlanStartTime(), LocalDate.of(vo2.getPlanStartTime().getYear(), budget.getPlanStartTime().getMonthValue(), budget.getPlanStartTime().getMonth().maxLength()));
+                            if (days > budget.getPlanDays().intValue()){
+                                budget.setPlanStartMoney(budget.getPlanStaffCost());
+                                budget.setPlanEndMoney(new BigDecimal(0));
+                            }else {
+                                budget.setPlanStartMoney(new BigDecimal(days).multiply(new BigDecimal(map.get(budget.getPostType()).get(0).getDictValue())));
+                                budget.setPlanEndMoney(budget.getPlanStaffCost().subtract(budget.getPlanStartMoney()));
+                            }
+                        }
+                    }
                 }
                 }
                 childrenList.addAll(vo2ChildrenList);
                 childrenList.addAll(vo2ChildrenList);
             }else {
             }else {
                 //无子计划
                 //无子计划
                 ProjectCostBudget budget = new ProjectCostBudget();
                 ProjectCostBudget budget = new ProjectCostBudget();
                 BeanUtils.copyProperties(vo2, budget);
                 BeanUtils.copyProperties(vo2, budget);
+                //如果主计划被清空,然后把计划金额也清空
+                if (budget.getPlanTaskType() == null){
+                    budget.setPlanIsTwoMonth(0);
+                    budget.setPlanStartMoney(new BigDecimal(0));
+                    budget.setPlanEndMoney(new BigDecimal(0));
+                }else {
+                    //存在数据,则判断是否是固定计划
+                    if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
+                        //计划人工支出
+                        budget.setPlanStaffCost(budget.getPlanDays().multiply(new BigDecimal(map.get(budget.getPostType()).get(0).getDictValue())));
+                        //如果跨月
+                        if (budget.getPlanStartTime().getMonthValue() != budget.getPlanEndTime().getMonthValue()) {
+                            budget.setPlanIsTwoMonth(1);
+                            //计算开始到月底多少个工作日
+                            int days = CommonUtil.getWorkDays(budget.getPlanStartTime(), LocalDate.of(budget.getPlanStartTime().getYear(), budget.getPlanStartTime().getMonthValue(), budget.getPlanStartTime().getMonth().maxLength()));
+                            if (days > budget.getPlanDays().intValue()){
+                                budget.setPlanStartMoney(budget.getPlanStaffCost());
+                                budget.setPlanEndMoney(new BigDecimal(0));
+                            }else {
+                                budget.setPlanStartMoney(new BigDecimal(days).multiply(new BigDecimal(map.get(budget.getPostType()).get(0).getDictValue())));
+                                budget.setPlanEndMoney(budget.getPlanStaffCost().subtract(budget.getPlanStartMoney()));
+                            }
+                        }
+                    }
+
+                }
                 parentList.add(budget);
                 parentList.add(budget);
             }
             }
         }
         }
@@ -2104,46 +2173,27 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         List<ProjectCostBudget> budgets = baseMapper.getBudgetByYear(y);
         List<ProjectCostBudget> budgets = baseMapper.getBudgetByYear(y);
         List<BigDecimal> list = new ArrayList<>();
         List<BigDecimal> list = new ArrayList<>();
         if (budgets != null && budgets.size() > 0){
         if (budgets != null && budgets.size() > 0){
-            //获取当前所有用户
-
             for (int i = 0; i < 12; i++) {
             for (int i = 0; i < 12; i++) {
                 BigDecimal big = new BigDecimal(0);
                 BigDecimal big = new BigDecimal(0);
                 for (ProjectCostBudget budget : budgets) {
                 for (ProjectCostBudget budget : budgets) {
                     //如果计划实际开始时间和实际结束时间中有当月
                     //如果计划实际开始时间和实际结束时间中有当月
                     if ((budget.getPracticalFinishTime().getMonthValue() == (i+1) && budget.getPracticalFinishTime().getYear() == y)
                     if ((budget.getPracticalFinishTime().getMonthValue() == (i+1) && budget.getPracticalFinishTime().getYear() == y)
                             || ((budget.getRealPlanStartTime().getMonthValue() == (i+1)) && budget.getRealPlanStartTime().getYear() == y)){
                             || ((budget.getRealPlanStartTime().getMonthValue() == (i+1)) && budget.getRealPlanStartTime().getYear() == y)){
-                        //如果计划开始时间和结束时间在同一个月中,则直接算入当月
-                        if (budget.getPracticalFinishTime().getMonthValue() == budget.getRealPlanStartTime().getMonthValue()) {
-                            big = big.add(budget.getActualTotalMoney());
-                        }else {
-                            //计划实际开始时间和结束时间不在一个月中,
-                            // 如果实际结束时间是1月,则计算从1月1号到实际结束时间的工作日
-                            if (budget.getPracticalFinishTime().getMonthValue() == 1 && budget.getPracticalFinishTime().getYear() == y){
-                                int workDays = CommonUtil.getWorkDays(LocalDate.of(y, 1, 1), budget.getPracticalFinishTime());
-                                //如果工作日大于实际工作时间,则直接使用人工成本
-                                if (workDays > budget.getPracticalTaskDays().intValue()){
-                                    big = big.add(budget.getActualTotalMoney());
-                                }else {
-                                    //如果工作日小于实际工作时间,则时间乘以个人工资
-                                    big = big.add(budget.getActualTotalMoney());
-                                }
-                            }else if (budget.getRealPlanStartTime().getMonthValue() == 12 && budget.getRealPlanStartTime().getYear() == y){
-                                //如果开始时间是12月,则计算结束时间为当年12月31日的工作日
-                                int workDays = CommonUtil.getWorkDays(budget.getRealPlanStartTime(), LocalDate.of(y, 12, 1));
-                                //如果工作日大于实际工作时间,则直接使用人工成本
-                                if (workDays > budget.getPracticalTaskDays().intValue()){
-                                    big = big.add(budget.getActualTotalMoney());
-                                }else {
-                                    //如果工作日小于实际工作时间,则时间乘以个人工资
-                                    big = big.add(budget.getActualTotalMoney());
-                                }
+                        //如果实际结束时间是当月
+                        if ((budget.getPracticalFinishTime().getMonthValue() == (i+1) && budget.getPracticalFinishTime().getYear() == y)) {
+                            if (budget.getIsTwoMonth() == 0){
+                                //人工成本没跨月,证明开始时间和结束时间是同一个月,直接使用人工成本到当月
+                                big = big.add(budget.getActualTotalMoney());
                             }else {
                             }else {
-                                //开始时间和结束时间不跨年
-                                //如果开始时间是当月
-                                //先获取实际开始当月的工作日,如果这个工作日大于实际工时,那么直接使用人工成本到这个月
-                                //如果工作日小于实际工时,则用工作日除以实际工时,乘以人工成本,然后下个月加上
-                                //如果结束时间是当月
-
+                                big = big.add(budget.getPracticalEndMoney());
+                            }
+                            ////如果实际开始时间是当月
+                        }else if ((budget.getRealPlanStartTime().getMonthValue() == (i+1)) && budget.getRealPlanStartTime().getYear() == y){
+                            if (budget.getIsTwoMonth() == 0){
+                                //人工成本没跨月,证明开始时间和结束时间是同一个月,直接使用人工成本到当月
+                                big = big.add(budget.getActualTotalMoney());
+                            }else {
+                                big = big.add(budget.getPracticalStartMoney());
                             }
                             }
                         }
                         }
                     }
                     }