Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

liuyc 2 жил өмнө
parent
commit
17d7c59501

+ 57 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java

@@ -314,6 +314,63 @@ public class ArchiveFileController extends BladeController {
 		return R.data(false);
 	}
 
+	/**
+	 * 批量上报2,每行数据单独上报
+	 */
+	@PostMapping("/batchApproval2")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "批量上报")
+	public R<Boolean> batchApproval2(@RequestBody StartTaskVO startTaskVO) throws IOException {
+		String archiveTaskIds = startTaskVO.getIds();
+		if(StringUtils.isNotEmpty(archiveTaskIds)){
+			String[] ids = archiveTaskIds.split(",");
+			for (String id : ids) {
+
+				//生成流程实体
+				TaskVO taskVO = new TaskVO();
+				BeanUtils.copyProperties(startTaskVO, taskVO);
+				if (taskVO.getUserTasks() != null && taskVO.getUserTasks().size() > 0) {
+					//标记为自定义流程
+					taskVO.setFixedFlowId(Long.parseLong("0"));
+				}
+
+				taskVO.setFormDataId(id);
+				taskVO.setApprovalType(2);
+				ArchiveFile archiveFile = this.archiveFileService.getBaseMapper().selectById(id);
+				taskVO.setTaskName(archiveFile.getFileName());
+				//启动流程
+				this.taskClient.startTask(taskVO);
+				//修改状态为待审批
+				String[] archiveTaskIdArray = id.split(",");
+				boolean update = this.archiveFileService.update(Wrappers.<ArchiveFile>lambdaUpdate().set(ArchiveFile::getStatus, 1).in(ArchiveFile::getId, Arrays.asList(archiveTaskIdArray)));
+				if (update) {
+					//通过WebSocket推送数量条数
+					if (ObjectUtil.isNotEmpty(startTaskVO.getUserTasks())) {
+						for (StartTaskVO.CustomUserTask userTask : startTaskVO.getUserTasks()) {
+							Map<String, String> stringMap = iTaskService.getTaskCount(startTaskVO.getProjectId(), startTaskVO.getContractId(), userTask.getUserId());
+							webSocket.sendMessageByUserId(userTask.getUserId(), JSON.toJSONString(stringMap));
+						}
+					}
+				}
+			}
+			List<ArchiveFile> archiveFiles = this.archiveFileService.getBaseMapper().selectBatchIds(Arrays.asList(archiveTaskIds.split(",")));
+			StringBuilder builder = new StringBuilder();
+			if (archiveFiles != null && archiveFiles.size() > 0) {
+				for (ArchiveFile archiveFile : archiveFiles) {
+					builder.append(archiveFile.getFileName()+"-");
+				}
+			}
+			String title = builder.toString();
+			//新增操作日志
+			JSONObject json = new JSONObject();
+			json.put("operationObjIds", Func.toStrList(archiveTaskIds));
+			json.put("operationObjName", title.substring(0,title.length()-1));
+			this.operationLogClient.saveUserOperationLog(25, "其它文件", "工程文件", json);
+			return R.data(true);
+		}
+		return R.data(false);
+	}
+
 	/**
 	 * 批量编辑
 	 */

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

@@ -94,7 +94,7 @@ public class FormulaMileage implements FormulaStrategy {
         }
         if(Func.isNotEmpty(mileageList)){
               List<String>  zhpw =mileageList.stream().filter(Mileage::isChecked).map(Mileage::getZhPw).collect(Collectors.toList());
-            Map<String,String[]> coordinateMap  =  mileageClient.mileage2Coordinate(zhpw,Func.toLong(tec.getConstantMap().get("contractId")));
+            Map<String,String[]> coordinateMap  =  mileageClient.mileage2Coordinate(zhpw,Func.toLong(tec.getContractId()));
             /*G10缓存对象*/
             if(coordinateMap.size()>0){
                 mileageList.forEach(m->{

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

@@ -57,6 +57,7 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
     boolean submitFullName(String pKeyId, String fullNames);
 
     boolean syncNodeParam(String projectId, String pKeyId);
+    boolean syncPrivateProjectFormula(Long projectId, Long pKeyId);
 
     boolean syncProjectEVisa(String projectId, String pKeyId) throws FileNotFoundException;
 

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

@@ -25,14 +25,18 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.*;
+import org.springblade.manager.dto.FormulaBean;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO3;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.*;
+import org.springblade.manager.service.IElementFormulaMappingService;
+import org.springblade.manager.service.IFormulaService;
 import org.springblade.manager.service.ITableInfoService;
 import org.springblade.manager.service.IWbsTreePrivateService;
 import org.springblade.manager.vo.*;
 import org.springblade.system.cache.ParamCache;
+import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
@@ -46,6 +50,7 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.*;
 import java.util.function.Function;
+import java.util.stream.Collector;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -66,6 +71,8 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     private final JdbcTemplate jdbcTemplate;
     private final TextdictInfoServiceImpl textDictInfoService;
     private final InformationQueryClient informationQueryClient;
+    private final IElementFormulaMappingService elementFormulaMappingService;
+    private final IFormulaService formulaService;
 
     @Override
     public List<WbsTreePrivateVO> tree(String wbsId, String projectId) {
@@ -885,6 +892,97 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return false;
     }
 
+    @Override
+    public boolean syncPrivateProjectFormula(Long projectId, Long pKeyId) {
+        if(projectId!=null&&pKeyId!=null){
+            ProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
+            ProjectInfo sourceProject=jdbcTemplate.queryForObject("select a.* from m_project_info a join m_wbs_tree_private b on a.id=b.project_id where b.p_key_id="+projectInfo.getReferenceWbsTemplateId()+" limit 1",new BeanPropertyRowMapper<>(ProjectInfo.class));
+            /*只需要同步私有引用就可以了*/
+            if("private".equals(projectInfo.getReferenceWbsTemplateType())&&sourceProject!=null){
+                WbsTreePrivate selectNodeNow = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, pKeyId).eq(WbsTreePrivate::getStatus, 1));
+                if (selectNodeNow == null) {
+                    throw new ServiceException("未获取到当前选择同步的节点信息,请联系管理员");
+                }
+                List<ElementFormulaMapping> insertList=new ArrayList<>();
+                List<Formula> insertFormulaList=new ArrayList<>();
+                List<Formula> updateFormulaList=new ArrayList<>();
+                /*同步公共部分*/
+                global(sourceProject.getId(),projectInfo.getId(),insertList,insertFormulaList,updateFormulaList);
+                /*同步节点部分,查找模版的叶子节点,查找目标叶子节点,id一样的是关联数据  */
+
+                /*保存记录*/
+                if(!insertList.isEmpty()) {
+                    this.elementFormulaMappingService.saveBatch(insertList);
+                }
+                if(!insertFormulaList.isEmpty()) {
+                    this.formulaService.saveBatch(insertFormulaList);
+                }
+                if(!updateFormulaList.isEmpty()) {
+                    this.formulaService.updateBatchById(updateFormulaList);
+                }
+            }
+        }
+        return false;
+    }
+
+    private void global(Long srcProjectId,Long distProjectId,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
+        Map<Long,ElementFormulaMapping> efmListScope10Map=new HashMap<>();
+        Map<Long,Formula> formulaScope10Map = new HashMap<>();
+        List<ElementFormulaMapping> efmListScope10=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,distProjectId).eq(ElementFormulaMapping::getScope, FormulaBean.PRO_GLOBAL));
+        if(Func.isNotEmpty(efmListScope10)) {
+            /*全局scope=10 每个元素和efm一对一*/
+            efmListScope10Map = efmListScope10.stream().collect(Collectors.toMap(ElementFormulaMapping::getElementId, o -> o));
+            formulaScope10Map = this.formulaService.listByIds(efmListScope10.stream().map(ElementFormulaMapping::getFormulaId).collect(Collectors.toList())).stream().collect(Collectors.toMap(Formula::getId, f -> f));
+        }
+        Map<Long,ElementFormulaMapping> sourceEfmListScope10Map =new HashMap<>();
+        Map<Long,Formula> sourceFormulaScope10Map = new HashMap<>();
+        List<ElementFormulaMapping> sourceEfmListScope10=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,srcProjectId).eq(ElementFormulaMapping::getScope, FormulaBean.PRO_GLOBAL));
+        if(Func.isNotEmpty(sourceEfmListScope10)) {
+            sourceEfmListScope10Map = sourceEfmListScope10.stream().collect(Collectors.toMap(ElementFormulaMapping::getElementId, o -> o));
+            sourceFormulaScope10Map = this.formulaService.listByIds(sourceEfmListScope10.stream().map(ElementFormulaMapping::getFormulaId).collect(Collectors.toList())).stream().collect(Collectors.toMap(Formula::getId, f -> f));
+        }
+
+        String[] exclude= new String[]{"id"};
+        Map<Long, ElementFormulaMapping> finalEfmListScope10Map = efmListScope10Map;
+        Map<Long, Formula> finalFormulaScope10Map = formulaScope10Map;
+        Map<Long, Formula> finalSourceFormulaScope10Map = sourceFormulaScope10Map;
+        sourceEfmListScope10Map.forEach((k, v)->{
+            if(!finalEfmListScope10Map.containsKey(k)){
+                /*不存在*/
+                ElementFormulaMapping target = new ElementFormulaMapping();
+                BeanUtils.copyProperties(v,target,exclude);
+                insertList.add(target);
+                Formula sf= finalFormulaScope10Map.get(v.getFormulaId());
+                Formula target2= new Formula();
+                BeanUtils.copyProperties(sf,target2);
+                Long id=SnowFlakeUtil.getId();
+                target.setFormulaId(id);
+                target2.setId(id);
+                insertFormulaList.add(target2);
+            }else{
+                /*存在则比较,有差异则覆盖*/
+                Formula sf= finalSourceFormulaScope10Map.get(v.getFormulaId());
+                Formula tf= finalFormulaScope10Map.get(finalEfmListScope10Map.get(k).getFormulaId());
+                if(!tf.getFormula().equals(sf.getFormula())){
+                    BeanUtils.copyProperties(sf,tf,exclude);
+                    updateFormulaList.add(tf);
+                }
+
+            }
+        });
+    }
+    private void part(Long srcProjectId,Long distProjectId,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
+        /**/
+        Map<String,ElementFormulaMapping> efmListScope20Map=new HashMap<>();
+        Map<String,ElementFormulaMapping> sourceEfmListScope20Map=new HashMap<>();
+        Map<Long,Formula> formulaScope20Map = new HashMap<>();
+        List<ElementFormulaMapping> efmListScope20=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,distProjectId).eq(ElementFormulaMapping::getScope, FormulaBean.PRO_PART));
+        List<ElementFormulaMapping>sourceEfmListScope20=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,srcProjectId).eq(ElementFormulaMapping::getScope, FormulaBean.PRO_PART));
+        efmListScope20Map= efmListScope20.stream().collect(Collectors.toMap(e->e.getElementId()+""+e.getNodeId(),t->t));
+        sourceEfmListScope20Map= sourceEfmListScope20.stream().collect(Collectors.toMap(e->e.getElementId()+""+e.getNodeId(),t->t));
+
+    }
+
     /**
      * 电签同步-获取所有子级节点、表
      */