瀏覽代碼

复制数据

huangjn 3 年之前
父節點
當前提交
de4826ff63

+ 118 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -44,6 +44,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.jackson.JsonUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.evisa.feign.EVisaClient;
 import org.springblade.evisa.vo.CertBeanVO;
@@ -57,6 +58,7 @@ import org.springblade.manager.vo.WbsTreeContractTreeVOS;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
 import org.springframework.beans.BeanUtils;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springblade.business.service.IInformationQueryService;
@@ -101,6 +103,103 @@ public class InformationWriteQueryController extends BladeController {
 
 	private final EVisaClient eVisaClient;
 
+	private final JdbcTemplate jdbcTemplate;
+
+	/**
+	 * 复制节点填报数据
+	 */
+	@PostMapping("/copyContractNodeSubmitBusinessData")
+	@ApiOperationSupport(order = 25)
+	@ApiOperation(value = "复制节点填报数据")
+	public R<Boolean> copyContractNodeSubmitBusinessData(@RequestBody CopyContractTreeNodeVO copyVO){
+		if(StringUtils.isNotEmpty(copyVO.getNeedCopyPrimaryKeyId()) && copyVO.getCopyBatchToPaths().size() > 0){
+			//获取被复制节点的表格
+			List<WbsTreeContract> tableList = this.wbsTreeContractClient.queryChildByParentId(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(copyVO.getNeedCopyPrimaryKeyId()), "queryTable");
+			if(tableList != null && tableList.size() > 0){
+				//获取表格的业务数据
+				Map<String, List<List<Map<String, Object>>>> tableBusinessDataMap = new HashMap<>();
+				for(WbsTreeContract treeContract : tableList){
+					List<Map<String, Object>> tableBusinessData = this.jdbcTemplate.queryForList("select * from " + treeContract.getInitTableName() + " where p_key_id = " + treeContract.getPKeyId());
+					if(tableBusinessData.size() > 0){
+						//设置参数
+						List<List<Map<String, Object>>> list;
+						if(tableBusinessDataMap.containsKey(treeContract.getId().toString())){
+							list = tableBusinessDataMap.get(treeContract.getId().toString());
+						} else {
+							list = new ArrayList<>();
+						}
+						list.add(tableBusinessData);
+						tableBusinessDataMap.put(treeContract.getId().toString(), list);
+					}
+				}
+
+				//获取数据写入的节点信息
+				List<CopyContractTreeNodeVO.CopyBatch> batchPathList = copyVO.getCopyBatchToPaths();
+				//新增数据SQL
+				List<String> saveSqlList = new ArrayList<>();
+				for(CopyContractTreeNodeVO.CopyBatch copyBatch : batchPathList){
+					//获取表格信息
+					List<WbsTreeContract> copyToTableList = this.wbsTreeContractClient.queryChildByParentId(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(copyBatch.getPrimaryKeyId()), "queryTable");
+					if(copyToTableList != null && copyToTableList.size() > 0){
+						//检测是否表格是否存在差异(如果存在oldId则优先使用这个字段,不存在时才使用id)
+						List<WbsTreeContract> remainTableList = copyToTableList.stream().filter(toTable -> tableBusinessDataMap.containsKey(StringUtils.isNotEmpty(toTable.getOldId()) ? toTable.getOldId() : toTable.getId().toString())).collect(Collectors.toList());
+						//循环有数据的表格
+						for(WbsTreeContract remainTable : remainTableList){
+							if(StringUtils.isNotEmpty(remainTable.getInitTableName())){
+								//获取主键
+								String id = StringUtils.isNotEmpty(remainTable.getOldId()) ? remainTable.getOldId() : remainTable.getId().toString();
+								if(tableBusinessDataMap.containsKey(id)){
+									//获取对应表格的数据
+									Iterator<List<Map<String, Object>>> oneLevelIterator = tableBusinessDataMap.get(id).iterator();
+									while (oneLevelIterator.hasNext()){
+										List<Map<String, Object>> dataMapList = oneLevelIterator.next();
+										Iterator<Map<String, Object>> iterator = dataMapList.iterator();
+
+										while (iterator.hasNext()){
+											Map<String, Object> map = iterator.next();
+											map.remove("id");
+											map.remove("p_key_id");
+											//拼接sql
+											StringBuilder sql = new StringBuilder("insert into " + remainTable.getInitTableName() + " (id, p_key_id");
+											StringBuilder valueSql = new StringBuilder(" values (" + SnowFlakeUtil.getId() + "," + remainTable.getPKeyId());
+											//循环需要复制的数据
+											for(Map.Entry<String, Object> mapEntry : map.entrySet()){
+												sql.append(",").append(mapEntry.getKey());
+												if(mapEntry.getValue() == null){
+													valueSql.append(",").append(mapEntry.getValue());
+												} else {
+													valueSql.append(",'").append(mapEntry.getValue()).append("'");
+												}
+											}
+											//生成最终sql
+											saveSqlList.add(sql.append(")").append(valueSql).append(")").toString());
+											iterator.remove();
+											break;
+										}
+										if(dataMapList.size() <= 0){
+											oneLevelIterator.remove();
+										}
+										break;
+									}
+								}
+							}
+						}
+					}
+				}
+				//保存数据
+				JsonUtil.toJson(saveSqlList);
+				if(saveSqlList.size() > 0){
+					for(String sql : saveSqlList){
+						this.jdbcTemplate.execute(sql);
+					}
+				}
+				return R.data(true);
+			}
+		}
+
+		return R.data(300, false, "被复制节点未找到业务数据");
+	}
+
 	/**
 	 * 单个废除
 	 */
@@ -156,6 +255,18 @@ public class InformationWriteQueryController extends BladeController {
 					}
 					break;
 			}
+		} else {
+			//查询表格
+			List<WbsTreeContract> tableList = this.wbsTreeContractClient.queryChildByParentId(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(primaryKeyId), "queryTable");
+			if(tableList != null && tableList.size() > 0){
+				for(WbsTreeContract table : tableList){
+					if(new Integer("2").equals(table.getIsTabPdf())){
+						//这些表格中,但凡有一个能够预览,就开放预览
+						status = "2";
+						break;
+					}
+				}
+			}
 		}
 
 		return R.data(status);
@@ -385,7 +496,10 @@ public class InformationWriteQueryController extends BladeController {
 					//设置旧ID
 					newData.setOldId(node.getId().toString());
 					//设置新ID
-					newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
+					if(new Integer("1").equals(node.getType())){
+						//如果是节点类型才重塑ID
+						newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
+					}
 					//设置父节点ID
 					if(vo.getNeedCopyPrimaryKeyId().equals(node.getPKeyId().toString())){
 						//找到复制的节点,将parentId更改为 parent.getId()
@@ -432,7 +546,9 @@ public class InformationWriteQueryController extends BladeController {
 						//重塑primaryKeyId
 						newData.setPKeyId(SnowFlakeUtil.getId());
 						//设置新ID
-						newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
+						if(new Integer("1").equals(node.getType())){
+							newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
+						}
 						//设置父节点ID
 						if(vo.getNeedCopyPrimaryKeyId().equals(node.getPKeyId().toString())){
 							//找到复制的节点,将parentId更改为 parent.getId()

+ 56 - 5
blade-service/blade-business/src/main/java/org/springblade/business/controller/RecycleBinController.java

@@ -1,13 +1,18 @@
 package org.springblade.business.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 
+import org.apache.commons.lang.StringUtils;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.manager.feign.WbsTreeContractClient;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -15,6 +20,12 @@ import org.springblade.business.entity.RecycleBin;
 import org.springblade.business.service.IRecycleBinService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  *  控制器
  *
@@ -23,19 +34,50 @@ import org.springblade.core.boot.ctrl.BladeController;
  */
 @RestController
 @AllArgsConstructor
-@RequestMapping("/recyclebin")
+@RequestMapping("/recycleBin")
 @Api(value = "客户端回收站", tags = "客户端回收站")
 public class RecycleBinController extends BladeController {
 
 	private final IRecycleBinService recycleBinService;
 
+	private final WbsTreeContractClient wbsTreeContractClient;
+
+	/**
+	 * 恢复
+	 */
 	@PostMapping("/regain")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "恢复")
 	public R<Boolean> regain(@RequestParam String ids){
-//		if(){
-//
-//		}
+		if(StringUtils.isNotEmpty(ids)){
+			//获取数据
+			List<RecycleBin> recycleBinList = this.recycleBinService.list(Wrappers.<RecycleBin>lambdaQuery().in(RecycleBin::getId, Arrays.asList(ids.split(","))));
+			//划分数据类型
+			//工程划分
+			List<RecycleBin> nodeTypeList = recycleBinList.stream().filter(recycleBin -> new Integer("1").equals(recycleBin.getDelType())).distinct().collect(Collectors.toList());
+			if(nodeTypeList.size() > 0){
+				//恢复集合
+				List<String> processNodeList = new ArrayList<>();
+				List<String> recycleBinIds = new ArrayList<>();
+				for(RecycleBin recycleBin : nodeTypeList){
+					if(StringUtils.isNotEmpty(recycleBin.getBusinessId())){
+						if(recycleBin.getBusinessId().contains(",")){
+							processNodeList.addAll(new ArrayList<>(Arrays.asList(recycleBin.getBusinessId().split(","))));
+						} else {
+							processNodeList.add(recycleBin.getBusinessId());
+						}
+						recycleBinIds.add(recycleBin.getId().toString());
+					}
+				}
+				try{
+//					this.wbsTreeContractClient
+				}catch (Exception e){
+					e.printStackTrace();
+				}
+			}
+			//文件类型
+			List<RecycleBin> filetypeList = recycleBinList.stream().filter(recycleBin -> new Integer("2").equals(recycleBin.getDelType())).distinct().collect(Collectors.toList());
+		}
 		return null;
 	}
 
@@ -46,7 +88,16 @@ public class RecycleBinController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "分页")
 	public R<IPage<RecycleBin>> list(RecycleBin recycleBin, Query query) {
-		return R.data(this.recycleBinService.page(Condition.getPage(query), Condition.getQueryWrapper(recycleBin)));
+		QueryWrapper<RecycleBin> wrapper = Condition.getQueryWrapper(recycleBin);
+
+		//获取当前时间
+		Date nowDate = DateUtil.now();
+		//减30天
+		Date oldDate = DateUtil.minusDays(nowDate, 30);
+
+		wrapper.lambda().between(RecycleBin::getCreateTime, oldDate, nowDate);
+
+		return R.data(this.recycleBinService.page(Condition.getPage(query), wrapper));
 	}
 	
 }

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

@@ -48,7 +48,7 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
     public List<WbsTreeContract> queryChildByParentId(WbsTreeContract treeNode, String queryTable) {
         if ("queryTable".equals(queryTable)) {
             //查询表格
-            return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, treeNode.getId()).eq(WbsTreeContract::getContractId, treeNode.getContractId()).eq(WbsTreeContract::getType, "2").eq(WbsTreeContract::getWbsType, "2"));
+            return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, treeNode.getId()).eq(WbsTreeContract::getContractId, treeNode.getContractId()).eq(WbsTreeContract::getType, "2"));
         } else {
             return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, treeNode.getId()).eq(WbsTreeContract::getContractId, treeNode.getContractId()).eq(WbsTreeContract::getType, "1").eq(WbsTreeContract::getWbsType, treeNode.getWbsType()));
         }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -318,6 +318,7 @@
         from m_wbs_tree_private
         where is_deleted = 0
           and major_data_type = 5
+          and wbs_type = 4
           and project_id = #{projectId}
     </select>