Browse Source

数据问题

hongchuangyanfa 3 năm trước cách đây
mục cha
commit
742ad4367a
15 tập tin đã thay đổi với 327 bổ sung175 xóa
  1. 1 1
      blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
  2. 7 1
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java
  3. 1 1
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  4. 2 0
      blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java
  5. 1 0
      blade-common/src/main/java/org/springblade/common/utils/MathUtil.java
  6. 12 0
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java
  7. 5 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreeContract.java
  8. 126 75
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  9. 128 89
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExpaileHtml.java
  10. 5 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.xml
  11. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java
  12. 26 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  13. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  14. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  15. 1 0
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml

+ 1 - 1
blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java

@@ -110,7 +110,7 @@ public class SocialTokenGranter extends AbstractTokenGranter {
 			if (user == null || user.getId() == null) {
 				throw new InvalidGrantException("social grant failure, user is null");
 			}
-			bladeUserDetails = new BladeUserDetails(user.getId(),
+			bladeUserDetails = new BladeUserDetails(user.getId(),user.getPhone(),
 				tenantId, result.getData().getOauthId(), user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(result.getData().getRoles()), Func.toStr(userOauth.getAvatar(), TokenUtil.DEFAULT_AVATAR),
 				userOauth.getUsername(), AuthConstant.ENCRYPT + user.getPassword(), detail, true, true, true, true,
 				AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));

+ 7 - 1
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetails.java

@@ -63,6 +63,11 @@ public class BladeUserDetails extends User {
 	 * 岗位id
 	 */
 	private final String postId;
+
+	/**
+	 * 岗位id
+	 */
+	private final String  phone;
 	/**
 	 * 角色id
 	 */
@@ -80,7 +85,7 @@ public class BladeUserDetails extends User {
 	 */
 	private final Kv detail;
 
-	public BladeUserDetails(Long userId, String tenantId, String oauthId, String name, String realName, String deptId, String postId, String roleId, String roleName, String avatar, String username, String password, Kv detail, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
+	public BladeUserDetails(Long userId, String phone,String tenantId, String oauthId, String name, String realName, String deptId, String postId, String roleId, String roleName, String avatar, String username, String password, Kv detail, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
 		super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
 		this.userId = userId;
 		this.tenantId = tenantId;
@@ -94,6 +99,7 @@ public class BladeUserDetails extends User {
 		this.roleName = roleName;
 		this.avatar = avatar;
 		this.detail = detail;
+		this.phone = phone;
 	}
 
 }

+ 1 - 1
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -158,7 +158,7 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
             }
             // 成功则清除登录错误次数
             delFailCount(tenantId, username);
-            return new BladeUserDetails(user.getId(),
+            return new BladeUserDetails(user.getId(),user.getPhone(),
                     user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
                     username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
                     AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));

+ 2 - 0
blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java

@@ -64,6 +64,8 @@ public class BladeJwtTokenEnhancer implements TokenEnhancer {
 		info.put(TokenUtil.AVATAR, principal.getAvatar());
 		info.put(TokenUtil.DETAIL, principal.getDetail());
 		info.put(TokenUtil.LICENSE, TokenUtil.LICENSE_NAME);
+		info.put("phone", principal.getPhone());
+
 		((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(info);
 
 		//token状态设置

+ 1 - 0
blade-common/src/main/java/org/springblade/common/utils/MathUtil.java

@@ -149,6 +149,7 @@ public class MathUtil {
     }
 
     public static double sim(String str1, String str2) {
+
         int ld = ld(str1, str2);
         return 1 - (double) ld / Math.max(str1.length(), str2.length());
     }

+ 12 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java

@@ -150,6 +150,18 @@ public class OssEndpoint {
 		return R.data(bladeFile);
 	}
 
+	/**
+	 * 上传文件
+	 *
+	 * @param file 文件
+	 * @return ObjectStat
+	 */
+	@SneakyThrows
+	@PostMapping("/put-file2")
+	public R<String> putFile2(@RequestParam MultipartFile file) {
+		BladeFile bladeFile = ossBuilder.template().putFile(file.getOriginalFilename(), file.getInputStream());
+		return R.data(bladeFile.getLink());
+	}
 	/**
 	 * 上传文件
 	 *

+ 5 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreeContract.java

@@ -177,5 +177,9 @@ public class WbsTreeContract extends BaseEntity {
     @ApiModelProperty(value = "是否关联清表 '0'否 '1'是")
     private Integer isLinkTable;
 
-
+    /**
+     * 清表Id
+     */
+    @ApiModelProperty(value = "是否关联清表 '0'否 '1'是")
+    private long excelId;
 }

+ 126 - 75
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -294,9 +294,10 @@ public class ExcelTabController extends BladeController {
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "查询当前节点下所有表单", notes = "传入父节点id")
 	public R<List<WbsNodeTableVO>> selectByNodeTable(@ApiParam(value = "树节点Id", required = true) @RequestParam String id,
-										 @ApiParam(value = "wbsType", required = true) @RequestParam Integer wbsType) {
+										 @ApiParam(value = "wbsType", required = true) @RequestParam Integer wbsType,
+										 @ApiParam(value = "wbsType", required = true) @RequestParam String projectid) {
 		if(wbsType==1){
-			List<WbsNodeTableVO> rs = wbsTreeService.selectByNodeTable(id);
+			List<WbsNodeTableVO> rs = wbsTreeService.selectByNodeTableByExcel(id,projectid);
 			if (!("").equals(rs) && rs.size() > 0) {
 				return R.data(rs);
 			}
@@ -329,6 +330,31 @@ public class ExcelTabController extends BladeController {
 			excelTab.setAlias(ancestors);
 		}
 		excelTabService.saveOrUpdate(excelTab);
+		// 关联清表信息计算
+
+		List<ExcelTabWbsTypeVO> linkDataInfo = wbsExclTabParmVO.getLinkDataInfo();
+
+		if(linkDataInfo!=null && linkDataInfo.size()>=1){
+			for (ExcelTabWbsTypeVO info : linkDataInfo){
+				String[] pk_id = info.getLinkIds().split(",");
+				for(String pkInfo : pk_id){
+
+					/*wbsTree.setPKeyId(Long.parseLong(pkInfo));
+					WbsTreePrivate aPrivate = wbsTreePrivateService.getOne(Condition.getQueryWrapper(wbsTree));
+					aPrivate.setExcelId(excelTab.getId());
+					aPrivate.setIsLinkTable(2);*/
+
+					UpdateWrapper<WbsTreePrivate> updateWrapper = new UpdateWrapper<>();
+					updateWrapper.in("p_key_id",Long.parseLong(pkInfo));
+					updateWrapper.set("is_link_table",2);
+					updateWrapper.set("excel_id",excelTab.getId());
+
+					wbsTreePrivateService.update(updateWrapper);
+				}
+			}
+		}
+
+
 		return R.success("添加成功!");
 	}
 
@@ -362,7 +388,7 @@ public class ExcelTabController extends BladeController {
 
 		UpdateWrapper<WbsTreePrivate> updateWrapper = new UpdateWrapper<>();
 		updateWrapper.in("p_key_id",tabId);
-		updateWrapper.set("is_link_table",1);
+		updateWrapper.set("is_link_table",2);
 		updateWrapper.set("excel_id",exceTabId);
 
 		wbsTreePrivateService.update(updateWrapper);
@@ -395,21 +421,11 @@ public class ExcelTabController extends BladeController {
 		// 标题坐标
 		List<Map<String,String>> zikey = new ArrayList<>();
 
-		int index_id = 0;
+
 		// 循环解析
 		for(int i = 0 ;i < trs.size() ;i++) {
 			Element tr = trs.get(i);
-			boolean index_stat = Boolean.parseBoolean(tr.attr("index_stat"));
-
-			if(index_stat && index_id==0){
-				index_id = 1;
-				zikey = new ArrayList<>();
-			}
-
-			if(!index_stat && index_id==1 && zikey.size()>=1){
-				index_id = 2;
-				zikey = new ArrayList<>();
-			}
+			boolean index_stat = Boolean.parseBoolean(tr.attr("indexstat"));
 
 			Elements tds = tr.select("td");
 			for (int j = 0; j < tds.size(); j++) {
@@ -419,7 +435,8 @@ public class ExcelTabController extends BladeController {
 				int x2 = Integer.parseInt( data.attr("x2"));
 				int y1 = Integer.parseInt( data.attr("y1"));
 				int y2 = Integer.parseInt( data.attr("y2"));
-
+				int xytype = Integer.parseInt( data.attr("xytype"));
+				System.out.println(data.html());
 
 				if(!textInfo.isEmpty() && !textInfo.equals("/")){
 					Map<String,String> dataInfo =new HashMap<String,String>();
@@ -428,22 +445,22 @@ public class ExcelTabController extends BladeController {
 					dataInfo.put("x2",data.attr("x2"));
 					dataInfo.put("y1",data.attr("y1"));
 					dataInfo.put("y2",data.attr("y2"));
+					dataInfo.put("xytype",data.attr("xytype"));
 					zikey.add(dataInfo);
-				}else if(data.html().indexOf("input")>=0){
-
+				}else if(data.html().indexOf("el-input")>=0){
 					List arrayList = new ArrayList<>();
-
-
-					for(int k=zikey.size()-1;k>=0 ;k--){
+					List left = new ArrayList<>();
+					List top = new ArrayList<>();
+					for(int k=zikey.size()-1 ; k>=0 ;k--){
 						String name = zikey.get(k).get("name").replaceAll("[^\u4E00-\u9FA5]", "");
 						int xx1 = Integer.parseInt( zikey.get(k).get("x1"));
 						int xx2 = Integer.parseInt( zikey.get(k).get("x2"));
 						int yy1 = Integer.parseInt( zikey.get(k).get("y1"));
 						int yy2 = Integer.parseInt( zikey.get(k).get("y2"));
-
+						int xytype2 = Integer.parseInt( zikey.get(k).get("xytype"));
 						// 左匹配
-						if( yy1<=y1 && yy2>=y2 && xx2<x1 && StringUtils.isNotEmpty(name)){
-							arrayList.add(name);
+						if( yy1<=y1 && yy2>=y2 && xx2<x1 && StringUtils.isNotEmpty(name) && xytype2==xytype){
+							left.add(name);
 							if(!index_stat){
 								break;
 							}
@@ -451,41 +468,43 @@ public class ExcelTabController extends BladeController {
 
 						//向 上 匹配
 						if(index_stat){
-							if( xx1<=x1 && xx2 >=x2 && yy2<y1 ){
-								arrayList.add(name);
+							if( xx1<=x1 && xx2 >=x2 && yy2<y1 && xytype2==xytype){
+								top.add(name);
 							}
 						}
 					}
 
+					arrayList.addAll(left);
+					arrayList.addAll(top);
+
 					Set<String> resultSet = new HashSet<>();
 					MathUtil.getCombination(arrayList, resultSet);
 					double maxInfo = 0;
-					if(!resultSet.isEmpty()){
-
-						for(WbsFormElement wbsFormElement : dataList){
-							for(String bx : resultSet){
-								double dataxx =  MathUtil.sim(bx,wbsFormElement.getEName().replaceAll("[^\u4E00-\u9FA5]", ""));
-								if(maxInfo < dataxx){
-									System.out.println("x1-x2="+x1+","+x2+"y1-y2="+y1+","+y2+bx+"="+dataxx+"_jieh="+resultSet);
-									data.empty().text(bx);
-									maxInfo = dataxx;
+					String textDataInfo = "";
+					String textDataType = "";
+					if (!resultSet.isEmpty()) {
+						for (String bx : resultSet) {
+							for (WbsFormElement wbsFormElement : dataList) {
+								if(bx.equals(wbsFormElement.getEName())){
+									textDataInfo= wbsFormElement.getEName();
+									textDataType = wbsFormElement.getEKey();
+									break;
+								}else {
+									double dataxx = MathUtil.sim(bx, wbsFormElement.getEName());
+									if (maxInfo < dataxx) {
+										textDataInfo = wbsFormElement.getEName();
+										textDataType = wbsFormElement.getEKey();
+										maxInfo = dataxx;
+									}
 								}
 							}
 						}
 					}
-					System.out.println(maxInfo);
+					data.children().get(0).attr("placeholder",textDataInfo).attr("v-model","formData."+textDataType+"_"+i+j);
 				}
 			}
 		}
-
-
-		//
-		// for (Map<String,String> d:zikey){
-		// System.out.println(d.get("name")+"x1"+d.get("x1"));
-		//  }
-
 		fileInputStream.close();
-
 		File writefile = new File(thmlUrl);
 		FileUtil.writeToFile(writefile, doc.html(), Boolean.parseBoolean("UTF-8"));
 		System.out.println("完成");
@@ -493,6 +512,34 @@ public class ExcelTabController extends BladeController {
 	}
 
 
+	/**
+	 * 清表生成html
+	 */
+	@GetMapping("/get-excel-html_buss")
+	@ApiOperationSupport(order = 16)
+	@ApiOperation(value = "清表生成html", notes = "清表生成html")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "excelId", value = "excelId", required = true)
+	})
+	public R getExcelHtmlByBuss(Long excelId) throws IOException {
+		ExcelTab excelTab = excelTabService.getById(excelId);
+		if(excelTab ==null ){
+			return R.fail("该数据下无此节点!");
+		}
+		if(excelTab.getHtmlUrl()==null){
+			return R.fail("请上传清表!");
+		}
+
+		File file1 = ResourceUtil.getFile(excelTab.getHtmlUrl());
+		FileInputStream fileInputStream = new FileInputStream(file1);
+		String htmlString =   IoUtil.readToString(fileInputStream);
+		// 解析 style
+		Document doc = Jsoup.parse(htmlString);
+		Element table = doc.select("table").first();
+		doc.select("Col").remove();
+		fileInputStream.close();
+		return R.data(table+"");
+	}
 
 	/**
 	 * 清表生成html
@@ -553,6 +600,7 @@ public class ExcelTabController extends BladeController {
 
 		int s_index = 0;
 		boolean index_stat = false;
+		int xy_type = 1  ;
 		// 横向计算
 		for(int i = 0 ;i < trs.size() ;i++) {
 			Element tr = trs.get(i);
@@ -560,6 +608,7 @@ public class ExcelTabController extends BladeController {
 
 			int x_width = 0 ;
 			int y_width = 0 ;
+			int text_width = 0;
 			//区域计算
 			for (int j = 0; j < tds.size(); j++) {
 				Element data = tds.get(j);
@@ -570,35 +619,39 @@ public class ExcelTabController extends BladeController {
 				data.removeAttr("class");
 				data.attr("style",styleMap.get(keyId).replaceAll("break-word","inherit"));
 				// 第一列
-				if(j==0 && classInfo.indexOf("border-left-style")>=0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")>=0 && !index_stat){
-					x_width +=colspan;
-				}else if(j == tds.size()-1 && classInfo.indexOf("border-right-style")>=0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")>=0 && !index_stat && j>=1){
-					x_width +=colspan;
-				}else if(classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")>=0 && !index_stat && j>=1){
-					x_width +=colspan;
+
+				// 计算线开始
+				if(classInfo.indexOf("border-left-style")>=0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")>=0 && classInfo.indexOf("border-right-style")>=0){
+					x_width += colspan;
 				}
 
-				// 计算退出
-				if(j==0 && classInfo.indexOf("border-left-style")<0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")<0 && index_stat && classInfo.indexOf("border-right-style")<0){
-					y_width +=colspan;
-				}else if(j == tds.size()-1 && classInfo.indexOf("border-right-style")<0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")<0 && index_stat && j>=1){
-					y_width +=colspan;
-				}else if(classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")<0 &&index_stat && j>=1){
-					y_width +=colspan;
+				// 计算结束
+				if(classInfo.indexOf("border-left-style")< 0 &&  classInfo.indexOf("border-bottom-style")<0 && classInfo.indexOf("border-right-style")<0){
+					y_width += colspan;
 				}
-			}
 
-			if(x_width == maxCol && !index_stat && s_index==0){
-				s_index = i + 1;
-				index_stat = true ;
+				String name = data.text().replaceAll("[^\u4E00-\u9FA5]", "");
+				if(!name.isEmpty()){
+					text_width += colspan;
+				}
 			}
 
-			if(y_width == maxCol && index_stat && s_index>0){
-				s_index = i + 1;
-				index_stat = false ;
+			if(index_stat){
+				//是否需要改变
+				if(maxCol == y_width ){
+					index_stat =  false ;
+					xy_type+=1;
+				}
+				if(maxCol == text_width){
+					xy_type+=1;
+				}
+			}else{ // 区域外
+				if(maxCol == x_width ){
+					index_stat =  true ;
+					xy_type+=1;
+				}
 			}
-
-			tr.attr("index_stat",index_stat+"");
+			tr.attr("indexStat",index_stat+"");
 
 			int x= 0;
 			for (int j = 0; j < tds.size(); j++) {
@@ -674,12 +727,9 @@ public class ExcelTabController extends BladeController {
 					}
 				}
 
-
-				// System.out.println(StringUtil.trimAllWhitespace(textInfo)+""+StringUtil.trimAllWhitespace(textInfo).length());
+				System.out.println(StringUtil.trimAllWhitespace(textInfo)+""+StringUtil.trimAllWhitespace(textInfo).length());
 				data.text(textInfo.replaceAll(" ",""));
 
-
-
 				// 设置td 属性
 				data.attr("trIndex",i+"");
 				data.attr("tdIndex",j+"");
@@ -687,24 +737,25 @@ public class ExcelTabController extends BladeController {
 				data.attr("x2",x2+"");
 				data.attr("y1",y1+"");
 				data.attr("y2",y2+"");
+				data.attr("xytype",xy_type+"");
 				String parm = i+","+j+","+x1+","+x2+","+y1+","+y2;
 				// 设置文本信息
 				if(textInfo.indexOf("年")>=0 && textInfo.indexOf("月")>=0&& textInfo.indexOf("日")>=0){
-					data.empty().append("<el-date-picker style='width:100%;height:100%' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+"  type='date' format='yyyy 年 MM 月 dd 日' placeholder='请选择时间'> </el-date-picker>");
+					data.empty().append("<el-date-picker  style='width:100%;height:100%' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+"  type='date' format='yyyy 年 MM 月 dd 日' placeholder='请选择时间'> </el-date-picker>");
 				}
 
 				if(textInfo.isEmpty() || textInfo.equals("/") || textInfo.equals("-")){
 					if(index_stat){
 						if(rowspan>=1){
-							data.empty().append("<el-input type='textarea' @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%'   :rows="+rowspan*2+" placeholder=''> </el-input>");
+							data.empty().append("<el-input type='textarea'  @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%'   :rows="+rowspan*2+" placeholder=''> </el-input>");
 						}else{
-							data.empty().append("<el-input type='text' @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%' placeholder=''> </el-input>");
+							data.empty().append("<el-input type='text'  @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%' placeholder=''> </el-input>");
 						}
 					}else{
 						if(j==0 ){
 							if(colspan ==maxCol && i>=1 && i<=2){
 								if(rowspan>=1){
-									data.empty().append("<el-input type='textarea' @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%'   :rows="+rowspan*2+" placeholder=''> </el-input>");
+									data.empty().append("<el-input type='textarea'  @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%'   :rows="+rowspan*2+" placeholder=''> </el-input>");
 								}else{
 									data.empty().append("<el-input type='text' @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%' placeholder=''> </el-input>");
 								}
@@ -715,7 +766,7 @@ public class ExcelTabController extends BladeController {
 								if(rowspan>=1){
 									data.empty().append("<el-input type='textarea' @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%'   :rows="+rowspan*2+" placeholder=''> </el-input>");
 								}else{
-									data.empty().append("<el-input type='text' @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%' placeholder=''> </el-input>");
+									data.empty().append("<el-input  type='text' @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%' placeholder=''> </el-input>");
 								}
 							}
 						}

+ 128 - 89
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExpaileHtml.java

@@ -21,9 +21,9 @@ import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
 public class ExpaileHtml {
-/*
+
     public static void main(String[] args) throws IOException {
-        getHtmlInfo();
+  //     getHtmlInfo();
         try {
             Thread.sleep(500);
         } catch (InterruptedException e) {
@@ -32,10 +32,6 @@ public class ExpaileHtml {
         //String inHtmlUrl = "/Users/hongchuangyanfa/Desktop/123654.html";
        getjiexiInfo();
     }
-*/
-
-
-
 
 
 
@@ -50,7 +46,6 @@ public class ExpaileHtml {
 
         String dataInfox = dataList.stream().map(WbsFormElement::getEName).collect(Collectors.joining(","));
 
-        System.out.println(dataInfox);
         Document doc = Jsoup.parse(htmlString);
         Element table = doc.select("table").first();
         Elements trs = table.select("tr");
@@ -63,18 +58,7 @@ public class ExpaileHtml {
         // 循环解析
         for(int i = 0 ;i < trs.size() ;i++) {
             Element tr = trs.get(i);
-            boolean index_stat = Boolean.parseBoolean(tr.attr("index_stat"));
-
-            if(index_stat && index_id==0){
-                index_id = 1;
-                zikey = new ArrayList<>();
-            }
-
-            if(!index_stat && index_id==1 && zikey.size()>=1){
-                index_id = 2;
-                zikey = new ArrayList<>();
-            }
-
+            boolean index_stat = Boolean.parseBoolean(tr.attr("indexStat"));
             Elements tds = tr.select("td");
             for (int j = 0; j < tds.size(); j++) {
                 Element data = tds.get(j);
@@ -83,6 +67,7 @@ public class ExpaileHtml {
                 int x2 = Integer.parseInt( data.attr("x2"));
                 int y1 = Integer.parseInt( data.attr("y1"));
                 int y2 = Integer.parseInt( data.attr("y2"));
+                int xytype = Integer.parseInt( data.attr("xytype"));
 
 
                 if(!textInfo.isEmpty() && !textInfo.equals("/")){
@@ -92,22 +77,24 @@ public class ExpaileHtml {
                     dataInfo.put("x2",data.attr("x2"));
                     dataInfo.put("y1",data.attr("y1"));
                     dataInfo.put("y2",data.attr("y2"));
+                    dataInfo.put("xytype",data.attr("xytype"));
                     zikey.add(dataInfo);
                 }else if(data.html().indexOf("input")>=0){
 
                     List arrayList = new ArrayList<>();
-
-
-                    for(int k=zikey.size()-1;k>=0 ;k--){
+                    List left = new ArrayList<>();
+                    List top = new ArrayList<>();
+                    for(int k=0 ; k< zikey.size() ;k++){
                         String name = zikey.get(k).get("name").replaceAll("[^\u4E00-\u9FA5]", "");
                         int xx1 = Integer.parseInt( zikey.get(k).get("x1"));
                         int xx2 = Integer.parseInt( zikey.get(k).get("x2"));
                         int yy1 = Integer.parseInt( zikey.get(k).get("y1"));
                         int yy2 = Integer.parseInt( zikey.get(k).get("y2"));
+                        int xytype2 = Integer.parseInt( zikey.get(k).get("xytype"));
 
                         // 左匹配
-                        if( yy1<=y1 && yy2>=y2 && xx2<x1 && StringUtils.isNotEmpty(name)){
-                             arrayList.add(name);
+                        if( yy1<=y1 && yy2>=y2 && xx2<x1 && StringUtils.isNotEmpty(name) && xytype2==xytype){
+                            left.add(name);
                             if(!index_stat){
                                 break;
                             }
@@ -115,43 +102,47 @@ public class ExpaileHtml {
 
                         //向 上 匹配
                         if(index_stat){
-                            if( xx1<=x1 && xx2 >=x2 && yy2<y1 ){
-                                arrayList.add(name);
+                            if( xx1<=x1 && xx2 >=x2 && yy2<y1 && xytype2==xytype){
+                                top.add(name);
                             }
                         }
                     }
-
-                    Set<String> resultSet = new HashSet<>();
-                    System.out.println(dataInfox+"==="+arrayList.size());
-                    MathUtil.getCombination(arrayList, resultSet);
-                    double maxInfo = 0;
-                    if(!resultSet.isEmpty()){
-
-                        for(WbsFormElement wbsFormElement : dataList){
-                            for(String bx : resultSet){
-                                double dataxx =  MathUtil.sim(bx,wbsFormElement.getEName());
-                                if(maxInfo < dataxx){
-                                    System.out.println("x1-x2="+x1+","+x2+"y1-y2="+y1+","+y2+bx+"="+dataxx+"_jieh="+resultSet);
-                                    data.empty().text(bx);
-                                    maxInfo = dataxx;
+                    arrayList.addAll(left);
+                    arrayList.addAll(top);
+
+                    // 计算匹配
+                         Set<String> resultSet = new HashSet<>();
+
+                        MathUtil.getCombination(arrayList, resultSet);
+
+                    System.out.println(data.children().get(0).attr("value","1"));
+                    //System.out.println("x1-x2="+x1+","+x2+"y1-y2="+y1+","+y2+"——"+arrayList+"_jieh="+resultSet);
+                        double maxInfo = 0;
+                        if (!resultSet.isEmpty()) {
+                            for (String bx : resultSet) {
+                                for (WbsFormElement wbsFormElement : dataList) {
+                                    if(bx.equals(wbsFormElement.getEName())){
+                                        data.empty().text(wbsFormElement.getEName());
+                                       // dataList.remove(wbsFormElement);
+                                        break;
+                                    }else {
+                                        double dataxx = MathUtil.sim(bx, wbsFormElement.getEName());
+                                        if (maxInfo < dataxx) {
+                                            data.empty().text(wbsFormElement.getEName());
+                                            maxInfo = dataxx;
+                                        }
+                                    }
                                 }
                             }
                         }
-                    }
-                    System.out.println(maxInfo);
                 }
             }
         }
 
 
-        //
-       // for (Map<String,String> d:zikey){
-           // System.out.println(d.get("name")+"x1"+d.get("x1"));
-      //  }
-
         inputStream.close();
-
-        File writefile = new File(inHtmlUrl);
+        String inHtmlUrl2 = "/Users/hongchuangyanfa/Desktop/123654321.html";
+        File writefile = new File(inHtmlUrl2);
         FileUtil.writeToFile(writefile, doc.html(), Boolean.parseBoolean("UTF-8"));
         System.out.println("完成");
     }
@@ -163,23 +154,71 @@ public class ExpaileHtml {
         info.setEName("承包单位");
 
         WbsFormElement info1 = new WbsFormElement();
-        info1.setEName("工程名称");
+        info1.setEName("合同段");
 
         WbsFormElement info2 = new WbsFormElement();
-        info2.setEName("年月日");
+        info2.setEName("监理单位");
 
         WbsFormElement info3 = new WbsFormElement();
-        info3.setEName("隧道净高实测");
+        info3.setEName("编号");
+
 
         WbsFormElement info4 = new WbsFormElement();
-        info3.setEName("基坑尺寸设计值");
+        info4.setEName("工程名称");
+
+        WbsFormElement info5 = new WbsFormElement();
+        info5.setEName("施工日期");
+
+        WbsFormElement info6 = new WbsFormElement();
+        info6.setEName("桩号及部位");
+
+        WbsFormElement info7 = new WbsFormElement();
+        info7.setEName("检验日期");
+
+        WbsFormElement info8 = new WbsFormElement();
+        info8.setEName("基坑尺寸长设计值");
+
+        WbsFormElement info9 = new WbsFormElement();
+        info9.setEName("基坑尺寸宽设计值");
+
+        WbsFormElement info10 = new WbsFormElement();
+        info10.setEName("基坑尺寸宽实测值");
 
+        WbsFormElement info11 = new WbsFormElement();
+        info11.setEName("基坑尺寸长实测值");
+
+        WbsFormElement info12 = new WbsFormElement();
+        info12.setEName("结论");
+
+        WbsFormElement info13 = new WbsFormElement();
+        info13.setEName("检查人结论");
+
+        WbsFormElement info14 = new WbsFormElement();
+        info14.setEName("日期");
+
+        WbsFormElement info15 = new WbsFormElement();
+        info15.setEName("承包人专业工程师");
+
+        WbsFormElement info16 = new WbsFormElement();
+        info16.setEName("现场监理");
 
         elementList.add(info);
         elementList.add(info1);
         elementList.add(info2);
         elementList.add(info3);
-
+        elementList.add(info4);
+        elementList.add(info5);
+        elementList.add(info6);
+        elementList.add(info7);
+        elementList.add(info8);
+        elementList.add(info9);
+        elementList.add(info10);
+        elementList.add(info11);
+        elementList.add(info12);
+        elementList.add(info13);
+        elementList.add(info14);
+        elementList.add(info15);
+        elementList.add(info16);
         return elementList;
     }
 
@@ -218,8 +257,8 @@ public class ExpaileHtml {
         int maxCol = doc.select("Col").size();
         String [] rowData = new String[trs.size()+1];
 
-        int s_index = 0;
         boolean index_stat = false;
+        int xy_type = 1  ;
         // 横向计算
         for(int i = 0 ;i < trs.size() ;i++) {
             Element tr = trs.get(i);
@@ -227,6 +266,8 @@ public class ExpaileHtml {
 
             int x_width = 0 ;
             int y_width = 0 ;
+            int text_width = 0;
+
             //区域计算
             for (int j = 0; j < tds.size(); j++) {
                 Element data = tds.get(j);
@@ -236,43 +277,47 @@ public class ExpaileHtml {
                 String classInfo = styleMap.get(keyId);
                 data.removeAttr("class");
                 data.attr("style",styleMap.get(keyId).replaceAll("break-word","inherit"));
-                // 第一列
-                if(j==0 && classInfo.indexOf("border-left-style")>=0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")>=0 && !index_stat){
-                    x_width +=colspan;
-                }else if(j == tds.size()-1 && classInfo.indexOf("border-right-style")>=0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")>=0 && !index_stat && j>=1){
-                    x_width +=colspan;
-                }else if(classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")>=0 && !index_stat && j>=1){
-                    x_width +=colspan;
+
+                // 计算线开始
+                if(classInfo.indexOf("border-left-style")>=0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")>=0 && classInfo.indexOf("border-right-style")>=0){
+                    x_width += colspan;
                 }
 
-                // 计算退出
-                if(j==0 && classInfo.indexOf("border-left-style")<0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")<0 && index_stat && classInfo.indexOf("border-right-style")<0){
-                    y_width +=colspan;
-                }else if(j == tds.size()-1 && classInfo.indexOf("border-right-style")<0 && classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")<0 && index_stat && j>=1){
-                    y_width +=colspan;
-                }else if(classInfo.indexOf("border-top-style")>=0 && classInfo.indexOf("border-bottom-style")<0 &&index_stat && j>=1){
-                    y_width +=colspan;
+                // 计算结束
+                if(classInfo.indexOf("border-left-style")< 0 && classInfo.indexOf("border-top-style")<0 && classInfo.indexOf("border-bottom-style")<0 && classInfo.indexOf("border-right-style")<0){
+                    y_width += colspan;
                 }
-            }
 
-            if(x_width == maxCol && !index_stat && s_index==0){
-                s_index = i + 1;
-                index_stat = true ;
+                String name = data.text().replaceAll("[^\u4E00-\u9FA5]", "");
+                if(!name.isEmpty()){
+                    text_width += colspan;
+                }
             }
 
-            if(y_width == maxCol && index_stat && s_index>0){
-                s_index = i + 1;
-                index_stat = false ;
+            // 在区域内
+            if(index_stat){
+                //是否需要改变
+                if(maxCol == y_width ){
+                    index_stat =  false ;
+                    xy_type+=1;
+                }
+                if(maxCol == text_width){
+                    xy_type+=1;
+                }
+            }else{ // 区域外
+                if(maxCol == x_width ){
+                    index_stat =  true ;
+                    xy_type+=1;
+                }
             }
-            tr.attr("index_stat",index_stat+"");
+            tr.attr("indexStat",index_stat+"");
 
+            // 计算单元格坐标
             int x= 0;
             for (int j = 0; j < tds.size(); j++) {
                 Element data = tds.get(j);
-
                 int colspan = data.attr("COLSPAN").equals("") ? 0 : Integer.parseInt(data.attr("COLSPAN"));
                 int rowspan = data.attr("ROWSPAN").equals("") ? 0 : Integer.parseInt(data.attr("ROWSPAN"));
-
                 Map<String, String> textObject = new HashMap<>();
                 // 计算
                 int x1 =0;
@@ -292,7 +337,7 @@ public class ExpaileHtml {
                 }
                 String textInfo = data.text().trim();
 
-                // y 坐标
+                //x y 坐标
                 y1=i+1;
                 if(rowspan==0){
                     y2 = i+1;
@@ -340,11 +385,7 @@ public class ExpaileHtml {
                     }
                 }
 
-
-               // System.out.println(StringUtil.trimAllWhitespace(textInfo)+""+StringUtil.trimAllWhitespace(textInfo).length());
                 data.text(textInfo.replaceAll(" ",""));
-
-
                 // 设置td 属性
                 data.attr("trIndex",i+"");
                 data.attr("tdIndex",j+"");
@@ -352,13 +393,12 @@ public class ExpaileHtml {
                 data.attr("x2",x2+"");
                 data.attr("y1",y1+"");
                 data.attr("y2",y2+"");
-
-
+                data.attr("xytype",xy_type+"");
 
                 // 设置文本信息
-               /* if(textInfo.indexOf("年")>=0 && textInfo.indexOf("月")>=0&& textInfo.indexOf("日")>=0){
+                if(textInfo.indexOf("年")>=0 && textInfo.indexOf("月")>=0&& textInfo.indexOf("日")>=0){
                     data.empty().append("<input type='time' style='width:100%;height:100%' placeholder=''> </input>");
-                }*/
+                }
                 if(textInfo.isEmpty() || textInfo.equals("/") || textInfo.equals("—") || textInfo.equals("—") || textInfo.equals("-")){
                     if(index_stat){
                         data.empty().append("<input type='text' style='width:100%;height:100%' placeholder=''> </input>");
@@ -377,7 +417,6 @@ public class ExpaileHtml {
                 }
             }
         }
-
         // 写入
         inputStream.close();
         String inHtmlUrl = "/Users/hongchuangyanfa/Desktop/123654.html";

+ 5 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.xml

@@ -82,7 +82,7 @@
 
 
     <select id="getWbsTypeList" resultMap="wbsResultMap">
-        SELECT id,wbs_name as wbsName,1 as wbsType from m_wbs_info where is_deleted=0
+        SELECT a.project_id as id, CONCAT_WS("_",b.project_name,a.full_name) as wbsName,1 as wbsType from m_wbs_tree_private a,m_project_info b where a.is_deleted=0 and a.parent_id=0 and a.project_id = b.id and b.is_deleted=0
     </select>
 
     <select id="lazyTree" resultMap="treeNodeResultMap2">
@@ -102,15 +102,15 @@
         parent_id = dept.id and is_deleted = 0 AND type = 1
         ) AS "has_children"
         FROM
-        m_wbs_tree dept
+        m_wbs_tree_private dept
         WHERE
         dept.parent_id = #{parentId} AND dept.is_deleted = 0
         <if test="tenantId!=null and tenantId!=''">
             and dept.tenant_id = #{tenantId}
         </if>
-        AND dept.wbs_id = #{wbsId}
-        AND dept.type = 1
-        AND status = 1
+        AND dept.project_id = #{wbsId}
+/*        AND dept.type = 1
+        AND status = 1*/
         ORDER BY dept.sort
     </select>
 

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java

@@ -72,6 +72,9 @@ public interface WbsTreeMapper extends BaseMapper<WbsTree> {
      */
     List<WbsNodeTableVO> selectByNodeTable(@Param("id") String id);
 
+
+    List<WbsNodeTableVO> selectByNodeTableByExcel(@Param("id") String id,@Param("projectid") String projectid);
+
     /**
      * 根据Ids查询元素
      */

+ 26 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -57,6 +57,7 @@
         <result column="tableOwner" property="tableOwner"/>
         <result column="initTableName" property="initTableName"/>
         <result column="sort" property="sort"/>
+        <result column="pKeyId" property="pKeyId"/>
     </resultMap>
 
     <resultMap id="wbsFormElementMap" type="org.springblade.manager.vo.WbsFormElementVO">
@@ -255,8 +256,7 @@
             wt.is_link_table,
             wt.init_table_name as "initTableName",
             wt.parent_id AS "parentId",
-            wt.wbs_id AS "wbsId",
-            (SELECT count(*) FROM m_wbs_form_element AS wfe WHERE wfe.f_id=wt.id and wfe.is_deleted = 0) AS elementTotal
+            wt.wbs_id AS "wbsId"
         FROM
             m_wbs_tree AS wt
         WHERE
@@ -266,6 +266,30 @@
         ORDER BY wt.sort
     </select>
 
+    <select id="selectByNodeTableByExcel" resultMap="selectByNodeTableMap">
+        SELECT
+            wt.p_key_id as pKeyId,
+            wt.id AS id,
+            wt.dept_name AS tableName,
+            wt.sort AS sort,
+            wt.table_type AS tableType,
+            wt.`status` AS isCreateTable ,
+            wt.table_owner as tableOwner,
+            wt.is_link_table,
+            wt.init_table_name as "initTableName",
+            wt.parent_id AS "parentId",
+            wt.wbs_id AS "wbsId",
+            (SELECT count(*) FROM m_wbs_form_element AS wfe WHERE wfe.f_id=wt.id and wfe.is_deleted = 0) AS elementTotal
+        FROM
+            m_wbs_tree_private AS wt
+        WHERE
+            wt.type = 2
+          AND wt.is_deleted = 0
+          AND wt.parent_id = #{id}
+          AND wt.project_id = #{projectid}
+        ORDER BY wt.sort
+    </select>
+
     <select id="selectByElementsTotal" resultType="java.lang.String">
         SELECT f_id,count(*) as elementTotal FROM m_wbs_form_element where f_id in #{ids} and is_deleted=0 GROUP BY f_id
     </select>

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

@@ -77,6 +77,8 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
      */
     List<WbsNodeTableVO> selectByNodeTable(String id);
 
+    List<WbsNodeTableVO> selectByNodeTableByExcel(String id,String projectid);
+
     /**
      * 删除表单
      */

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -338,6 +338,13 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return wbsNodeTableVOS;
     }
 
+    @Override
+    public List<WbsNodeTableVO> selectByNodeTableByExcel(String id,String projectid) {
+        //查询节点下的所有表单
+        List<WbsNodeTableVO> wbsNodeTableVOS = wbsTreeMapper.selectByNodeTableByExcel(id,projectid);
+        return wbsNodeTableVOS;
+    }
+
     @Override
     public boolean removeTableById(String id) {
         Integer integer = wbsTreeMapper.removeTableById(id);

+ 1 - 0
blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml

@@ -37,6 +37,7 @@
         <result column="remark" property="remark"/>
         <result column="is_deleted" property="isDeleted"/>
         <result column="has_children" property="hasChildren"/>
+        <result column="text_info" property="textInfo"/>
     </resultMap>
 
     <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">