Administrator il y a 2 ans
Parent
commit
f515c69198
23 fichiers modifiés avec 763 ajouts et 150 suppressions
  1. 1 0
      blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
  2. 0 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/TableInfo.java
  3. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreePrivate.java
  4. 14 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
  5. 7 1
      blade-service/blade-business/pom.xml
  6. 25 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  7. 23 16
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExpaileHtml.java
  8. 12 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TableInfoController.java
  9. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  10. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  11. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TableInfoMapper.java
  12. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TableInfoMapper.xml
  13. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  14. 3 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  15. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  16. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java
  17. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  18. 197 97
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java
  19. 110 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  20. 1 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  21. 161 4
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
  22. 2 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
  23. 182 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/util/AesInfoUtil.java

+ 1 - 0
blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java

@@ -34,6 +34,7 @@ public class AuthProvider {
 	static {
 		DEFAULT_SKIP_URL.add("/example");
 		DEFAULT_SKIP_URL.add("/oauth/token/**");
+		DEFAULT_SKIP_URL.add("/loginByToken/**");
 		DEFAULT_SKIP_URL.add("/oauth/captcha/**");
 		DEFAULT_SKIP_URL.add("/oauth/clear-cache/**");
 		DEFAULT_SKIP_URL.add("/oauth/user-info");

+ 0 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/TableInfo.java

@@ -55,6 +55,4 @@ public class TableInfo extends BaseEntity {
 	* 填报率百分比
 	*/
 		private String fillRate;
-
-
 }

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreePrivate.java

@@ -140,6 +140,12 @@ public class WbsTreePrivate extends BaseEntity {
     @ApiModelProperty(value = "初始化实体表名")
     private String initTableName;
 
+    /**
+     * 初始化实体表名
+     */
+    @ApiModelProperty(value = "初始化实体表名")
+    private String initTableId;
+
     /**
      *是否关联清表 '0'否 '1'是
      */

+ 14 - 0
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java

@@ -18,8 +18,10 @@ package org.springblade.system.user.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 import org.springblade.core.tenant.mp.TenantEntity;
 
 import java.util.Date;
@@ -88,6 +90,18 @@ public class User extends TenantEntity {
      * 性别
      */
     private Integer sex;
+
+    /**
+     * 是否为同步用户信息
+     */
+    private Integer sysType;
+
+    /**
+     * 同步方系统Id
+     */
+    private String  sysId;
+
+
     /**
      * 角色id
      */

+ 7 - 1
blade-service/blade-business/pom.xml

@@ -8,7 +8,13 @@
         <version>2.9.1.RELEASE</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-
+    <repositories>
+        <repository>
+            <id>com.e-iceblue</id>
+            <name>e-iceblue</name>
+            <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
+        </repository>
+    </repositories>
     <artifactId>blade-business</artifactId>
     <name>${project.artifactId}</name>
     <version>${bladex.project.version}</version>

+ 25 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -436,10 +436,12 @@ public class ExcelTabController extends BladeController {
     @ApiOperation(value = "关联清表-保存", notes = "关联清表-保存")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "exceTabId", value = "清表id", required = true),
-            @ApiImplicitParam(name = "tabId", value = "表Id", required = true)
+            @ApiImplicitParam(name = "tabId", value = "表Id", required = true),
     })
     public R<List<ExceTabTreVO>> saveLinkeTab(Long exceTabId, Long tabId) throws IOException {
-        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        //String file_path ="C:\\Users\\Administrator\\Desktop\\fsdownload\\"; //ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        String file_path =ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+
         // 关联 私有项目 wbs 数据信息
         WbsTreePrivate wbsTree = new WbsTreePrivate();
         wbsTree.setPKeyId(tabId);
@@ -458,6 +460,7 @@ public class ExcelTabController extends BladeController {
 
         // 复制模版htmlURL
         File file_in = ResourceUtil.getFile(excelTab.getHtmlUrl());
+       // File file_in = ResourceUtil.getFile(file_path+"1542338623020961794.html");
         String filecode = SnowFlakeUtil.getId() + "";
         String thmlUrl = file_path + "/privateUrl/" + filecode + ".html";
         File file_out = ResourceUtil.getFile(thmlUrl);
@@ -474,7 +477,7 @@ public class ExcelTabController extends BladeController {
         Element table = doc.select("table").first();
         Elements trs = table.select("tr");
 
-        List<WbsFormElement> elementList = wbsFormElementService.selectElementListByFid(aPrivate.getId() + "");
+        List<WbsFormElement> elementList = wbsFormElementService.selectElementListByFid(aPrivate.getInitTableId() + "");
 
         for (int i = 0; i < trs.size(); i++) {
             Element tr = trs.get(i);
@@ -538,7 +541,7 @@ public class ExcelTabController extends BladeController {
 
 
         //由于日志无法拿到基本节点,将 关联html的id 放入在父节点excelId 处理
-        if (aPrivate.getWbsType().equals("4")) {
+        if (aPrivate.getType()!=10 && aPrivate.getWbsType().equals("4")) {
             WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
                     .eq(WbsTreePrivate::getId, aPrivate.getParentId())  // 获取父节点Id
                     .eq(WbsTreePrivate::getWbsType, "4")  // 内型为4
@@ -551,9 +554,10 @@ public class ExcelTabController extends BladeController {
         }
         wbsTreePrivateService.update(updateWrapper);
         //关联项目下所有的合同段
-        aPrivate.setHtmlUrl(thmlUrl);
-        wbsTreeContractService.updateAllNodeTabById(aPrivate);
-
+        if(aPrivate.getType()!=10){
+            aPrivate.setHtmlUrl(thmlUrl);
+            wbsTreeContractService.updateAllNodeTabById(aPrivate);
+        }
         return R.success("关联成功");
     }
 
@@ -2539,4 +2543,18 @@ public class ExcelTabController extends BladeController {
         return R.data(bladeFile);
     }
 
+    /**
+     * 项目元素 关联表
+     */
+    @GetMapping("/save-link-tableInfo")
+    @ApiOperationSupport(order = 33)
+    @ApiOperation(value = "元素库分配节点 联表", notes = "元素库分配节点")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "tabId", value = "元素表", required = true),
+            @ApiImplicitParam(name = "linkids", value = "节点信息表", required = true),
+            @ApiImplicitParam(name = "type", value = "(1 元素表关联  2表示新增 3 表示项目节点关联)", required = true)
+    })
+    public R saveLinkeTableInfo(String tabId, String linkids,String type){
+        return wbsTreePrivateService.saveLinkeTableInfo(tabId,linkids,type);
+    }
 }

+ 23 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExpaileHtml.java

@@ -17,25 +17,32 @@ import java.util.List;
 public class ExpaileHtml {
 
     public static void main11(String[] args) throws FileNotFoundException {
+        // i=名 j=字
+        String san ="15、65、67、68、81、16、1 、3、5、7、24、48、25、31、32、33、35、52、57、61、63、39、11、8、18、21、23、13、37、41、45、47";
+        String wu ="1、3、5、6、7、8、11、13、15、16、17、18、21、23、24、25、29、31、32、 33、35、37、 39、41、45、 47、48、52、 55、57、61、63、 65、67、68、81";
+
+        for(int i=1;i<81;i++){
+            for(int j=1;j<=81;j++){
+                // 天
+                // 人
+                // 第
+                int tina = 11;
+                int ren = i+tina;
+                int di =i+j;
+                int z=i+j+tina;
+
+                int w=z-i;
+
+                if(san.indexOf(i+"")>=0 && san.indexOf(j+"")>=0){
+                    if(wu.indexOf(tina+"")>=0 && wu.indexOf(ren+"")>=0 && wu.indexOf(di+"")>=0 && wu.indexOf(z+"")>=0 && wu.indexOf(w+"")>=0 ){
+                        System.out.println(i+"_"+j);
+                    }
+                }
 
 
-        String sdata ="2022年11月10日";
-        String edata ="2022年11月10日";
-      //  System.out.println(sdata.equals());
-/*
-        List<File> list = FileUtil.list("/Users/hongchuangyanfa/Desktop/123456/");
-         int i = 0;
-         for(File file:list){
-
-             System.out.println(file.getName());
-             if(file.getName().length()>=16 ){
-                 System.out.println(file.getPath()+"__"+(i++));
-                 EexpaileInfo(file.getPath());
-             }
-         }*/
 
-        String html_url = "/Users/hongchuangyanfa/Desktop/privateUrl/1582298975938019328.html";
-        testinfo22(html_url);
+            }
+        }
     }
 
 

+ 12 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TableInfoController.java

@@ -35,6 +35,8 @@ import org.springblade.manager.vo.TableInfoVO;
 import org.springblade.manager.service.ITableInfoService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 实体主表信息 控制器
  *
@@ -123,5 +125,14 @@ public class TableInfoController extends BladeController {
 		return R.status(tableInfoService.deleteLogic(Func.toLongList(ids)));
 	}
 
-	
+	/**
+	 * 元素库的修改
+	 */
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "元素修改节点信息", notes = "传入List<WbsTree>")
+	@RequestMapping(value = "/update-batch-tableInfo", method = RequestMethod.POST)
+	public R updateBatchTableInfo(@RequestBody List<TableInfo> tableInfos) {
+		//
+		return R.status(tableInfoService.updateBatchById(tableInfos));
+	}
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java

@@ -283,7 +283,7 @@ public class TextdictInfoController extends BladeController {
         String tabName = wbsTreePrivate.getInitTableName();
         String isExitSql = " select * from information_schema.TABLES where TABLE_NAME='" + tabName + "'";
         List<Map<String, Object>> tablist = jdbcTemplate.queryForList(isExitSql);
-        if (tablist != null && tablist.size() > 0) {
+        if (tablist != null && tablist.size() > 0 && wbsTreePrivate.getType()!=10) {
             String clarSql = "update  " + tabName + " set " + keyname.split("__")[0] + "=null where p_key_id in(SELECT p_key_id FROM m_wbs_tree_contract WHERE id ='" + wbsTreePrivate.getId() + "' and project_id='" + wbsTreePrivate.getProjectId() + "' )";
             jdbcTemplate.execute(clarSql);
         }

+ 4 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -15,10 +15,7 @@ import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.*;
-import org.springblade.manager.entity.WbsFormElement;
-import org.springblade.manager.entity.WbsInfo;
-import org.springblade.manager.entity.WbsTree;
-import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.entity.*;
 import org.springblade.manager.excel.WbsFormElementBatchExcel;
 import org.springblade.manager.excel.WbsTreeExcel;
 import org.springblade.manager.mapper.WbsInfoMapper;
@@ -325,9 +322,12 @@ public class WbsTreeController extends BladeController {
     @ApiOperation(value = "批量修改节点下元素表基本信息", notes = "传入List<WbsTree>")
     @RequestMapping(value = "/update-batch-node-tableInfo", method = RequestMethod.POST)
     public R updateBatchNodeTableInfo(@RequestBody List<WbsTree> WbsTrees) {
+        //
         return R.status(wbsTreeService.updateBatchById(WbsTrees));
     }
 
+
+
     /**
      * 查询公有wbs节点元素表与节点参数
      */

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

@@ -39,4 +39,6 @@ public interface TableInfoMapper extends BaseMapper<TableInfo> {
 	 */
 	List<TableInfoVO> selectTableInfoPage(IPage page, TableInfoVO tableInfo);
 
+	TableInfo selectByTabEnName(String tabName);
+
 }

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/TableInfoMapper.xml

@@ -24,4 +24,8 @@
         select * from m_table_info where is_deleted = 0
     </select>
 
+    <select id="selectByTabEnName" resultMap="tableInfoResultMap">
+        select * from m_table_info where is_deleted = 0 and tab_ch_name=#{tabName}
+    </select>
+
 </mapper>

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

@@ -139,7 +139,7 @@
                                         table_type, create_time, create_user, create_dept, update_user, update_time,
                                         `STATUS`, is_deleted,
                                         unique_code, partition_code, is_expernode, is_concrete, table_owner,
-                                        major_data_type, init_table_name, is_link_table, excel_id)
+                                        major_data_type, init_table_name, is_link_table, excel_id, html_url)
         VALUES (#{pKeyId}, #{wbsTree.id}, #{wbsTree.wbsId}, #{wbsType}, #{wbsTree.projectId}, #{contractId}, 1,
                 #{wbsTree.tenantId}, #{wbsTree.parentId}, #{wbsTree.ancestors},
                 #{wbsTree.nodeType}, #{wbsTree.nodeName}, #{wbsTree.fullName}, #{wbsTree.sort}, #{wbsTree.remark},
@@ -149,7 +149,7 @@
                 #{wbsTree.status}, #{wbsTree.isDeleted}, #{wbsTree.uniqueCode}, #{wbsTree.partitionCode},
                 #{wbsTree.isExpernode}, #{wbsTree.isConcrete},
                 #{wbsTree.tableOwner}, #{wbsTree.majorDataType}, #{wbsTree.initTableName}, #{wbsTree.isLinkTable},
-                #{wbsTree.excelId})
+                #{wbsTree.excelId},#{wbsTree.htmlUrl})
     </insert>
 
     <update id="deleteBatch">

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

@@ -81,7 +81,7 @@
 
     <resultMap id="wbsFormElementMap" type="org.springblade.manager.vo.WbsFormElementVO">
         <id column="id" property="id"/>
-        <result column="fId" property="fId"/>
+        <result column="f_id" property="fId"/>
         <result column="e_key" property="eKey"/>
         <result column="e_name" property="eName"/>
         <result column="e_type" property="eType"/>
@@ -368,7 +368,7 @@
 
     <select id="selectFormElements_bak" resultMap="wbsFormElementMap">
         SELECT
-            w.f_id as fId,w.e_key,w.id,w.e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,
+            w.f_id,w.e_key,w.id,w.e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,
             (select CONCAT(init_table_name,':',w.e_key) from m_wbs_tree where id = #{id} AND status = 1 AND is_deleted = 0) AS "tableElementKey",
             (select init_table_name from m_wbs_tree where id = w.f_id AND type = 2 AND status = 1 AND is_deleted = 0 ) AS "initTableName"
         FROM
@@ -377,7 +377,7 @@
             is_deleted = 0 and f_id = #{id}
     </select>
     <select id="selectFormElements" resultMap="wbsFormElementMap">
-        select   f_id as fId,e_key,a.id,e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,CONCAT(b.parent_id,':',b.init_table_name,':',e_key) as tableElementKey,init_table_name as initTableName,
+        select f_id,e_key,a.id,e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,CONCAT(b.parent_id,':',b.init_table_name,':',e_key) as tableElementKey,init_table_name as initTableName,
                b.parent_id as nodeId
         from m_wbs_form_element a inner join m_wbs_tree b on a.f_id=b.init_table_id
         where b.id=#{id} and a.is_deleted=0

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -32,6 +32,7 @@
         <result column="table_owner" property="tableOwner"/>
         <result column="major_data_type" property="majorDataType"/>
         <result column="init_table_name" property="initTableName"/>
+        <result column="init_table_id" property="initTableId"/>
         <result column="is_link_table" property="isLinkTable"/>
         <result column="import_matching_info" property="importMatchingInfo"/>
     </resultMap>
@@ -538,7 +539,7 @@
 
     <!-- 项目级 表单类型分类 wbs树 -->
     <select id="tabTypeLazyTree" resultMap="treeNodeResultMapTabType">
-        SELECT p_key_id as id,p_key_id as primaryKeyId,title,parent_id,fill_rate as fillRate,
+        SELECT p_key_id as id,p_key_id as primaryKeyId,title,parent_id,fill_rate as fillRate,initTableId,
         (SELECT dict_value from blade_dict where code='table_type' and dict_key not in(-1,0) and dict_key=table_type )
         as tabType,
         (SELECT count(1) FROM m_wbs_form_element WHERE f_id = initTableId and is_deleted=0) AS "elementTotal",

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

@@ -66,6 +66,9 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
     // 元素删除
     R delTableById(String primaryKeyIds);
 
+    // 元素关联
+    R saveLinkeTableInfo(String tabId,String linkids,String type);
+
     List<WbsTreePrivate> searchNodeAllTable(String primaryKeyId, String type, String tableType, String contractId, String projectId);
 
     Object getExcelHtml(String primaryKeyId) throws IOException;

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

@@ -6,6 +6,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.manager.dto.FormElementDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO;
 import org.springblade.manager.dto.WbsTreeDTO2;
+import org.springblade.manager.entity.TableInfo;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.vo.*;

+ 197 - 97
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -128,10 +128,11 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
             //获取实体表主库信息
             TableInfo tableInfo = tableInfoMapper.selectById(wbsFormElement.getFId());
-            if(tableInfo==null){
+            if (tableInfo == null) {
                 throw new ServiceException("没有找到主库信息,确认fid是否正确");
-            }else{
+            } else {
                 tableName = tableInfo.getTabEnName();
+
             }
             //获取当前表单下所有元素
             List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda().eq(WbsFormElement::getFId, wbsFormElement.getFId()));
@@ -385,94 +386,174 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean submitExcelRelationWbsTreeAndElement(FormElementDTO2 formElementDTO) {
-         //新增元素表、实体表
-
-        if (formElementDTO.getSubmitStatus() == 2 || formElementDTO.getSubmitStatus() == 3) {
+        //新增元素表、实体表 2表示 创建 并关联 wbs 树节点信息   3 表示只创建
+        if (formElementDTO.getSubmitStatus() == 2 || formElementDTO.getSubmitStatus() == 3) {//
             this.saveFormElement(formElementDTO);
-        }else if (formElementDTO.getSubmitStatus() == 1) {
-            if (formElementDTO.getElementList().size() <= 0) {
-                throw new ServiceException("请添加至少一个元素信息");
-            }
-            //关联-在已有元素表中新增元素,在实体表中追加字段
-            //获取当前清表关联的所有tableIds
-            List<WbsTabRelationExcelTab> WbsTabRelationExcelTabs = baseMapper.selectWbsTabRelationExcelTab(null, String.valueOf(formElementDTO.getExcelTabId()));
-            List<Long> tableIds = WbsTabRelationExcelTabs.stream().map(WbsTabRelationExcelTab::getWbsTabId).collect(Collectors.toList());
-            if (tableIds.size() == 0) {
-                throw new ServiceException("未查询到当前清表所关联的元素表信息");
-            }
+        } else if (formElementDTO.getSubmitStatus() == 1) { // 修改实体信息
+            this.UpdateFormElement(formElementDTO);
+        }
+        return true;
+    }
 
-            for (Long tableId : tableIds) {
-                //获取当前wbs节点元素表信息
-                WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getId, tableId));
-                if (wbsTree != null) {
-                    if (StringUtils.isNotEmpty(wbsTree.getInitTableName())) {
-                        //查询实体表是否存在
-                        Integer obj = baseMapper.showShowTabLike(wbsTree);
-                        if (obj != 1) {
-                            //不存在对应实体表的元素表不新增同步元素字段
-                            continue;
-                        }
+    // 修改关联的实体信息表表字段
+    @Transactional(rollbackFor = Exception.class)
+    public void UpdateFormElement(FormElementDTO2 formElementDTO) {  //修改元素字段信息
+        if (formElementDTO.getElementList().size() <= 0) {
+            throw new ServiceException("请添加至少一个元素信息");
+        }
+        //关联-在已有元素表中新增元素,在实体表中追加字段
+        //获取当前清表关联的所有tableIds
+        List<WbsTabRelationExcelTab> WbsTabRelationExcelTabs = baseMapper.selectWbsTabRelationExcelTab(null, String.valueOf(formElementDTO.getExcelTabId()));
+        List<Long> tableIds = WbsTabRelationExcelTabs.stream().map(WbsTabRelationExcelTab::getWbsTabId).collect(Collectors.toList());
+        if (tableIds.size() == 0) {
+            throw new ServiceException("未查询到当前清表所关联的元素表信息");
+        }
 
-                        //获取表单下的元素信息
-                        List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda()
-                                .eq(WbsFormElement::getFId, tableId));
-
-                        WbsFormElement firstWbsFormElement;
-                        List<WbsFormElement> newList;
-                        //存在元素
-                        if (wbsFormElements.size() > 0) {
-                            Collections.reverse(wbsFormElements);
-                            firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
-
-                            //去重,元素表中名称已存在的元素不添加
-                            newList = formElementDTO.getElementList().stream().filter(a ->
-                                    !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
-                            ).collect(Collectors.toList());
-
-                        } else {
-                            //不存在元素
-                            firstWbsFormElement = new WbsFormElement();
-                            firstWbsFormElement.setEKey("key_0");
-                            newList = formElementDTO.getElementList();
-                        }
+        for (Long tableId : tableIds) {
+            //获取当前wbs节点元素表信息
+            WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getId, tableId));
+            if (wbsTree != null) {
+                if (StringUtils.isNotEmpty(wbsTree.getInitTableName())) {
+                    //查询实体表是否存在
+                    Integer obj = baseMapper.showShowTabLike(wbsTree);
+                    if (obj != 1) {
+                        //不存在对应实体表的元素表不新增同步元素字段
+                        continue;
+                    }
+
+                    //获取表单下的元素信息
+                    List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda()
+                            .eq(WbsFormElement::getFId, tableId));
+
+                    WbsFormElement firstWbsFormElement;
+                    List<WbsFormElement> newList;
+                    //存在元素
+                    if (wbsFormElements.size() > 0) {
+                        Collections.reverse(wbsFormElements);
+                        firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
+
+                        //去重,元素表中名称已存在的元素不添加
+                        newList = formElementDTO.getElementList().stream().filter(a ->
+                                !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
+                        ).collect(Collectors.toList());
+
+                    } else {
+                        //不存在元素
+                        firstWbsFormElement = new WbsFormElement();
+                        firstWbsFormElement.setEKey("key_0");
+                        newList = formElementDTO.getElementList();
+                    }
 
-                        //初始化eKey字段
-                        int keyNumber = Integer.parseInt(firstWbsFormElement.getEKey().split("_")[1]);
-                        int newKeyNumber = keyNumber + 1;
-                        for (WbsFormElement wbsFormElementInfo : newList) {
-                            String key = "key_" + (newKeyNumber);
-                            //新增元素到当前表中
-                            wbsFormElementInfo.setEKey(key);
-                            wbsFormElementInfo.setId(SnowFlakeUtil.getId());
-                            wbsFormElementInfo.setFId(String.valueOf(tableId));
-                            wbsFormElementInfo.setStatus(1);
-                            wbsFormElementInfo.setELength(Integer.parseInt(WbsElementUtil.setDefaultElementLength(wbsFormElementInfo.getEType())));
-
-                            baseMapper.insert(wbsFormElementInfo);
-
-                            //String eTypeFiled = getInitTableFiledType(wbsFormElementInfo.getEType());
-                            //int eLengthFiled = Integer.parseInt(setDefaultElementLength(wbsFormElementInfo.getEType()));
-
-                            //判断是否存在该Key字段
-                            int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
-                            if (row1 == 0) {
-                                //追加字段到实体表中
-                                wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
-                                //判断是否追加成功
-                                int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
-                                if (row2 != 1) {
-                                    //追加失败,删除元素,跳过
-                                    baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
-                                    continue;
-                                }
+                    //初始化eKey字段
+                    int keyNumber = Integer.parseInt(firstWbsFormElement.getEKey().split("_")[1]);
+                    int newKeyNumber = keyNumber + 1;
+                    for (WbsFormElement wbsFormElementInfo : newList) {
+                        String key = "key_" + (newKeyNumber);
+                        //新增元素到当前表中
+                        wbsFormElementInfo.setEKey(key);
+                        wbsFormElementInfo.setId(SnowFlakeUtil.getId());
+                        wbsFormElementInfo.setFId(String.valueOf(tableId));
+                        wbsFormElementInfo.setStatus(1);
+                        wbsFormElementInfo.setELength(Integer.parseInt(WbsElementUtil.setDefaultElementLength(wbsFormElementInfo.getEType())));
+
+                        baseMapper.insert(wbsFormElementInfo);
+
+                        //String eTypeFiled = getInitTableFiledType(wbsFormElementInfo.getEType());
+                        //int eLengthFiled = Integer.parseInt(setDefaultElementLength(wbsFormElementInfo.getEType()));
+
+                        //判断是否存在该Key字段
+                        int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                        if (row1 == 0) {
+                            //追加字段到实体表中
+                            wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
+                            //判断是否追加成功
+                            int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                            if (row2 != 1) {
+                                //追加失败,删除元素,跳过
+                                baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
+                                continue;
                             }
-                            newKeyNumber++;
                         }
+                        newKeyNumber++;
                     }
                 }
             }
         }
-        return true;
+    }
+
+
+    // 修改实体表字段信息
+    @Transactional(rollbackFor = Exception.class)
+    public void UpdateFormElement(TableInfo  tableInfo,FormElementDTO2 formElementDTO) {  //修改元素字段信息
+            //获取当前wbs节点元素表信息
+            if (tableInfo != null) {
+                if (StringUtils.isNotEmpty(tableInfo.getTabEnName())) {
+                    //查询实体表是否存在
+                    WbsTree wbsTree = new WbsTree();
+                    wbsTree.setInitTableName(tableInfo.getTabEnName());
+                    Integer obj = baseMapper.showShowTabLike(wbsTree);
+                    if (obj != 1) {
+                        //不存在对应实体表的元素表不新增同步元素字段
+                        throw new ServiceException("实体信息表不存在");
+                    }
+
+                    //获取表单下的元素信息
+                    List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda()
+                            .eq(WbsFormElement::getFId, tableInfo.getId()));
+
+                    WbsFormElement firstWbsFormElement;
+                    List<WbsFormElement> newList;
+                    //存在元素
+                    if (wbsFormElements.size() > 0) {
+                        Collections.reverse(wbsFormElements);
+                        firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
+
+                        //去重,元素表中名称已存在的元素不添加
+                        newList = formElementDTO.getElementList().stream().filter(a ->
+                                !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
+                        ).collect(Collectors.toList());
+
+                    } else {
+                        //不存在元素
+                        firstWbsFormElement = new WbsFormElement();
+                        firstWbsFormElement.setEKey("key_0");
+                        newList = formElementDTO.getElementList();
+                    }
+
+                    //初始化eKey字段
+                    int keyNumber = Integer.parseInt(firstWbsFormElement.getEKey().split("_")[1]);
+                    int newKeyNumber = keyNumber + 1;
+                    for (WbsFormElement wbsFormElementInfo : newList) {
+                        String key = "key_" + (newKeyNumber);
+                        //新增元素到当前表中
+                        wbsFormElementInfo.setEKey(key);
+                        wbsFormElementInfo.setId(SnowFlakeUtil.getId());
+                        wbsFormElementInfo.setFId(tableInfo.getId()+"");
+                        wbsFormElementInfo.setStatus(1);
+                        wbsFormElementInfo.setELength(Integer.parseInt(WbsElementUtil.setDefaultElementLength(wbsFormElementInfo.getEType())));
+
+                        baseMapper.insert(wbsFormElementInfo);
+
+                        //String eTypeFiled = getInitTableFiledType(wbsFormElementInfo.getEType());
+                        //int eLengthFiled = Integer.parseInt(setDefaultElementLength(wbsFormElementInfo.getEType()));
+
+                        //判断是否存在该Key字段
+                        int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                        if (row1 == 0) {
+                            //追加字段到实体表中
+                            wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
+                            //判断是否追加成功
+                            int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                            if (row2 != 1) {
+                                //追加失败,删除元素,跳过
+                                baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
+                                continue;
+                            }
+                        }
+                        newKeyNumber++;
+                    }
+                }
+            }
     }
 
     @Override
@@ -561,10 +642,9 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         //获取新增节点ids
         List<String> nodeIds = formElementDTO.getNodeIds();
         // 无节点绑定wbs 树
-        if(nodeIds==null && formElementDTO.getSubmitStatus()==3){
-            nodeIds= new ArrayList<>();
+        if (nodeIds == null && formElementDTO.getSubmitStatus() == 3) {
+            nodeIds = new ArrayList<>();
             nodeIds.add("-1234569");
-            formElementDTO.setInitTableId(SnowFlakeUtil.getId());
         }
 
         if (nodeIds.size() <= 0) {
@@ -588,17 +668,41 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                     }
                 }
 
+                // 实体信息表验证  如果实体表的名称 和数据表名称相同  则试用同一张表否则新建
                 //初始化
                 String newTableName = "m_" + DateUtil.time() + "_" + SnowFlakeUtil.getId();
-                formElementDTO.setInitTableName(newTableName);
+                TableInfo tableInfo = tableInfoMapper.selectByTabEnName(formElementDTO.getNodeName());
+                boolean tabExit = true;
+                if(tableInfo==null){
+                    tableInfo = new TableInfo();
+                    tableInfo.setTabType(formElementDTO.getTableType());
+                    tableInfo.setTableOwner(formElementDTO.getTableOwner());
+                    tableInfo.setFillRate(formElementDTO.getFillRate());
+                    tableInfo.setTabChName(formElementDTO.getNodeName());
+                    tableInfo.setTabEnName(newTableName);
+                    tableInfo.setIsDeleted(0);
+                    tableInfoMapper.insert(tableInfo);
+                    tabExit=false;
+                }else{
+                    tableInfo.setTabType(formElementDTO.getTableType());
+                    tableInfo.setTableOwner(formElementDTO.getTableOwner());
+                    tableInfo.setFillRate(formElementDTO.getFillRate());
+                    tableInfoMapper.updateById(tableInfo);
+                    // 修改表结构
+                    this.UpdateFormElement(tableInfo,formElementDTO);
+                }
+
+                formElementDTO.setInitTableName(tableInfo.getTabEnName());
+                formElementDTO.setInitTableId(tableInfo.getId());
                 //设置parentId=nodeId
                 formElementDTO.setParentId(Long.valueOf(nodeId));
-
                 //创建元素表
-                boolean b = submit2(formElementDTO);
-
+                boolean b = false;
+                if(formElementDTO.getSubmitStatus()==2){
+                    b = submit2(formElementDTO);
+                }
                 try {
-                    if (b) {
+                    if (!tabExit) {
                         List<WbsFormElement> elementList = formElementDTO.getElementList();
                         int i = 1;
                         for (WbsFormElement wbsFormElement : elementList) {
@@ -614,14 +718,15 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                         this.saveBatch(elementList);
 
                         //获取当前元素表中所有元素
-                        List<WbsFormElement> list = this.selectElementListByFid(String.valueOf(formElementDTO.getId()));
+                        List<WbsFormElement> list = this.selectElementListByFid(String.valueOf(formElementDTO.getInitTableId()));
 
                         //初始化实体表
                         this.initTable(list, newTableName);
 
                         //绑定与清表关系
-                        baseMapper.insertWbsTabRelationExcelTab(SnowFlakeUtil.getId(), formElementDTO.getExcelTabId(), formElementDTO.getId());
-
+                        if(formElementDTO.getSubmitStatus()==2){
+                            baseMapper.insertWbsTabRelationExcelTab(SnowFlakeUtil.getId(), formElementDTO.getExcelTabId(), formElementDTO.getId());
+                        }
                     }
                 } catch (Exception e) {
                     //删除元素表
@@ -660,12 +765,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         if (StringUtils.isEmpty(dept.getFillRate())) {
             dept.setFillRate("80%");
         }
-        if(dept.getSubmitStatus()==3){
-            dept.setType(10);
-        }else{
-            dept.setType(2);
-        }
-
+        dept.setType(2);
         dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
         dept.setNodeType(1);
         dept.setStatus(1);

+ 110 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -14,18 +14,19 @@ import org.jsoup.select.Elements;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
 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.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.IoUtil;
-import org.springblade.core.tool.utils.ResourceUtil;
+import org.springblade.core.tool.utils.*;
+import org.springblade.manager.dto.FormElementDTO2;
 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.ITableInfoService;
 import org.springblade.manager.service.IWbsTreePrivateService;
 import org.springblade.manager.vo.*;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -44,6 +45,9 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     private final WbsTreeContractMapper wbsTreeContractMapper;
     private final WbsTreeContractServiceImpl wbsTreeContractService;
+
+    // 表单主表信息
+    private final ITableInfoService tableInfoService;
     private final WbsTreeMapper wbsTreeMapper;
     private final ContractInfoMapper contractInfoMapper;
     private final WbsInfoMapper wbsInfoMapper;
@@ -1187,14 +1191,23 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         if (com.alibaba.cloud.commons.lang.StringUtils.isEmpty(nodeId)) {
             return R.fail("nodeId不能为空");
         }
+        WbsTreeContract wbsTreeContract = new WbsTreeContract();
+        wbsTreeContract.setPKeyId(Long.parseLong(nodeId));
+        wbsTreeContract = wbsTreeContractService.getOne(Condition.getQueryWrapper(wbsTreeContract));
         if (com.alibaba.cloud.commons.lang.StringUtils.isEmpty(primaryKeyIds)) {
             return R.fail("primaryKeyIds不能为空");
         }
         List<Long> longs = Func.toLongList(primaryKeyIds);
         for (Long id : longs) {
             WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.getByPKeyId(id);
+            wbsTreePrivate.setParentId(wbsTreeContract.getId());
+            wbsTreePrivate.setWbsId(wbsTreeContract.getWbsId());
+            wbsTreePrivate.setFullName(wbsTreePrivate.getNodeName());
+            wbsTreePrivate.setType(2);
+            wbsTreePrivate.setStatus(1);
+            wbsTreePrivate.setIsDeleted(0);
             Long pKeyId1 = SnowFlakeUtil.getId();
-            wbsTreeContractMapper.insertByCondition(wbsTreePrivate, contractId, pKeyId1, Integer.valueOf(wbsTreePrivate.getWbsType()));
+            wbsTreeContractMapper.insertByCondition(wbsTreePrivate, contractId, pKeyId1, 1);
         }
         return R.success("添加成功");
     }
@@ -1210,14 +1223,26 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
         List<Long> longs = Func.toLongList(primaryKeyIds);
         for (Long id : longs) {
-            WbsTree wbsTree = wbsTreeMapper.selectById(id);
-            WbsTreePrivate wbsPrivate = BeanUtil.copyProperties(wbsTree, WbsTreePrivate.class);
+
+            TableInfo tableInfo = tableInfoService.getById(id);
+            WbsTreePrivate wbsPrivate = new WbsTreePrivate();
             Long pKeyId1 = SnowFlakeUtil.getId();
             wbsPrivate.setPKeyId(pKeyId1);
+
+            wbsPrivate.setTableOwner(tableInfo.getTableOwner());
+            wbsPrivate.setInitTableId(tableInfo.getId()+"");
+            wbsPrivate.setTableType(tableInfo.getTabType());
+            wbsPrivate.setInitTableName(tableInfo.getTabEnName());
+            wbsPrivate.setNodeName(tableInfo.getTabChName());
+            wbsPrivate.setFullName(tableInfo.getTabChName());
+            wbsPrivate.setFillRate(tableInfo.getFillRate());
             wbsPrivate.setProjectId(projectId);
             wbsPrivate.setType(10);//带过来的元素信息
             wbsPrivate.setParentId(-10l);
             wbsTreePrivateMapper.insert(wbsPrivate);
+           /* }else{
+                return R.success("没有查到主库信息");
+            }*/
         }
         return R.success("添加成功");
     }
@@ -1234,6 +1259,84 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return R.success("添加成功");
     }
 
+    private boolean submit2(WbsTree tree) {
+        if (Func.isEmpty(tree.getParentId())) {
+            tree.setTenantId(AuthUtil.getTenantId());
+            tree.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+            tree.setCreateUser(AuthUtil.getUserId());
+            tree.setParentId(BladeConstant.TOP_PARENT_ID);
+            tree.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+        }
+        if (tree.getParentId() > 0) {
+            WbsTree parent = wbsTreeMapper.selectById((tree.getParentId()));
+            if (Func.toLong(tree.getParentId()) == Func.toLong(tree.getId())) {
+                throw new ServiceException("父节点不可选择自身!");
+            }
+            tree.setTenantId(parent.getTenantId());
+            String ancestors = parent.getAncestors() + StringPool.COMMA + tree.getParentId();
+            tree.setAncestors(ancestors);
+            //初始化否存在表单
+            wbsTreeMapper.updateIsExistFormById(parent.getId());
+        }
+        if (org.apache.commons.lang.StringUtils.isEmpty(tree.getFillRate())) {
+            tree.setFillRate("80%");
+        }
+        tree.setType(2);
+        tree.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+        tree.setNodeType(1);
+        tree.setStatus(1);
+        tree.setIsLinkTable(2);
+        tree.setId(SnowFlakeUtil.getId());
+
+        return wbsTreeMapper.insert(tree) > 0;
+    }
+
+    @Override
+    public R saveLinkeTableInfo(String tabId, String linkids, String type) {
+        //1 元素表关联  2表示新增 3 表示项目节点关联
+        if (com.alibaba.cloud.commons.lang.StringUtils.isEmpty(tabId)) {
+            return R.fail("tabId不能为空");
+        }
+        if (com.alibaba.cloud.commons.lang.StringUtils.isEmpty(linkids)) {
+            return R.fail("linkids不能为空");
+        }
+        if (com.alibaba.cloud.commons.lang.StringUtils.isEmpty(type)) {
+            return R.fail("type不能为空");
+        }
+        if (type.equals("1")) {
+            TableInfo tableInfo = tableInfoService.getById(tabId);
+            WbsTree wbsTree = wbsTreeMapper.selectById(linkids);
+            wbsTree.setInitTableName(tableInfo.getTabChName());
+            wbsTree.setInitTableId(tableInfo.getId());
+            wbsTree.setFillRate(tableInfo.getFillRate());
+            wbsTree.setTableOwner(tableInfo.getTableOwner());
+            wbsTreeMapper.updateById(wbsTree);
+        } else if (type.equals("2")) {
+            TableInfo tableInfo = tableInfoService.getById(tabId);
+            List<Long> longs = Func.toLongList(linkids);
+            for (Long pid : longs) {
+                WbsTree tree = new WbsTree();
+                tree.setParentId(pid);
+                tree.setTableOwner(tableInfo.getTableOwner());
+                tree.setInitTableId(tableInfo.getId());
+                tree.setTableType(tableInfo.getTabType());
+                tree.setInitTableName(tableInfo.getTabEnName());
+                tree.setNodeName(tableInfo.getTabChName());
+                tree.setFullName(tableInfo.getTabChName());
+                tree.setFillRate(tableInfo.getFillRate());
+                this.submit2(tree);
+            }
+        } else if (type.equals("3")) {
+            WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.getByPKeyId(Long.parseLong(tabId));
+            Long pKeyId1 = SnowFlakeUtil.getId();
+            wbsTreePrivate.setPKeyId(pKeyId1);
+            wbsTreePrivate.setType(2);
+            wbsTreePrivate.setParentId(Long.parseLong(linkids));
+            wbsTreePrivateMapper.insert(wbsTreePrivate);
+        }
+        return R.success("操作成功");
+    }
+
     @Override
     public R delTabProjectById(String primaryKeyIds, String projectId) {
         if (com.alibaba.cloud.commons.lang.StringUtils.isEmpty(projectId)) {

+ 1 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -290,6 +290,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return false;
     }
 
+
     @Override
     public List<WbsNodeTableVO> selectByNodeTable(String id) {
         return wbsTreeMapper.selectByNodeTable(id);
@@ -338,10 +339,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return wbsFormElements;
     }
 
-
-
-
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean importWbsTree(MultipartFile excelFile, WbsTree wbsTreeFu, WbsTree wbsTree1) throws IOException {

+ 161 - 4
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -17,12 +17,23 @@
 package org.springblade.system.user.controller;
 
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
+import org.apache.http.Consts;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.message.BasicNameValuePair;
 import org.springblade.common.cache.CacheNames;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.excel.util.ExcelUtil;
@@ -38,25 +49,32 @@ import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.constant.RoleConstant;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
+import org.springblade.manager.entity.TextdictInfo;
+import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.feign.SaveUserInfoByProjectClient;
-import org.springblade.system.cache.SysCache;
 import org.springblade.system.user.dto.UserDTO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.excel.UserExcel;
 import org.springblade.system.user.excel.UserExcel2;
 import org.springblade.system.user.excel.UserImporter;
 import org.springblade.system.user.service.IUserService;
+import org.springblade.system.user.util.AesInfoUtil;
 import org.springblade.system.user.vo.UserVO;
 import org.springblade.system.user.wrapper.UserWrapper;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLDecoder;
+import java.text.ParseException;
 import java.util.*;
-import java.util.stream.Collector;
-import java.util.stream.Collectors;
 
 import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
 
@@ -354,7 +372,6 @@ public class UserController {
         return R.data(userService.selectUserSearch(user, query));
     }
 
-
     /**
      * 用户解锁
      */
@@ -397,4 +414,144 @@ public class UserController {
         return R.success("操作成功");
     }
 
+
+    /**
+     * token验证登录
+     */
+    @PostMapping("/loginByToken")
+    @ApiOperationSupport(order = 20)
+    @ApiOperation(value = "token验证加密", notes = "token验证登录")
+    public R loginByToken(String token, String account, String timestamp) {
+        if (StringUtil.isBlank(token)) {
+            return R.fail("请输出token");
+        }
+        if (StringUtil.isBlank(account)) {
+            return R.fail("请输出account");
+        }
+        if (StringUtil.isBlank(timestamp)) {
+            return R.fail("请输出timestamp");
+        }
+
+        //解析tokne
+        String tokenInfo = AesInfoUtil.decrypt(URLDecoder.decode(token), null);
+        if (tokenInfo != null && tokenInfo.length() >= 20) {
+            JSONObject tokenUser = JSON.parseObject(tokenInfo);
+            String tokenPw = tokenUser.getString("password");
+
+            String tokenAccount = tokenUser.getString("account");
+
+            String tokenTimestamp = tokenUser.getString("timestamp");
+            if (!account.equals(account)) {
+                return R.fail("token解析用户和account不一致");
+            }
+            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("account", tokenAccount);
+            queryWrapper.eq("password", tokenPw);
+            User userInfo = userService.getOne(queryWrapper);
+            if (userInfo == null) {
+                return R.fail("用户名或密码错误");
+            }
+            //获取用户list
+            HttpClient httpClient = HttpClientBuilder.create().build();
+            HttpPost httpPost = new HttpPost("http://testmanger.hcxxy.com/api/blade-auth/oauth/token");
+            httpPost.setHeader("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0");
+            httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
+            httpPost.setHeader("Tenant-Id", "000000");
+            List<NameValuePair> params = new ArrayList<NameValuePair>();
+            params.add(new BasicNameValuePair("grant_type", "password"));
+            params.add(new BasicNameValuePair("username", userInfo.getAccount()));
+            params.add(new BasicNameValuePair("password", userInfo.getPassword()));
+            params.add(new BasicNameValuePair("scope", "all"));
+            params.add(new BasicNameValuePair("tenantId", "000000"));
+            httpPost.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8));
+            try {
+                HttpResponse httpResponse = httpClient.execute(httpPost);
+                InputStream inputStream = httpResponse.getEntity().getContent();
+                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+                byte[] buffer = new byte[1024];
+                int index = 0;
+                while ((index = inputStream.read(buffer)) != -1) {
+                    outputStream.write(buffer, 0, index);
+                }
+                return R.data(JSON.parseObject(outputStream.toString()));
+            } catch (IOException e) {
+                e.printStackTrace();
+                return R.success("操作失败");
+            }
+        } else {
+            return R.fail("请确认token是否有误");
+        }
+    }
+
+    /**
+     * 获取当前系统所有项目下所有合同段的当天天气
+     */
+    @Scheduled(cron = "0 0 4 * * ?")
+    public void syncWeatherInfo() throws ParseException, IOException {
+        List<User> userList = userService.list(Wrappers.<User>lambdaQuery().in(User::getSysType, 2));
+        JSONObject json = new JSONObject();
+
+        if (userList != null && !userList.isEmpty()) {
+            Date maxTime = userList.stream().max(Comparator.comparing(User::getUpdateTime)).get().getUpdateTime();
+            json.put("fn", "time");
+            json.put("timestamp", maxTime.getTime());
+            System.out.println("1670255453504");
+            System.out.println(maxTime.getTime());
+        } else {
+            json.put("fn", "all");
+        }
+        // 测试数据
+        String url = "http://js.cegc.com.cn:13426/login/japi/synUser";
+        String encoding = "utf-8";
+        String da = AesInfoUtil.sendPost(url, json, encoding);
+        if (da != null) {
+            JSONObject userInfo = JSONObject.parseObject(da);
+            int code = userInfo.getInteger("status");
+            if (code == 200) {
+                JSONArray list = userInfo.getJSONArray("list");
+
+                if (list != null && list.size() >= 1) {
+                    for (int i=0;i<list.size();i++) {
+                        JSONObject jsonObject = list.getJSONObject(i);
+                        String id = jsonObject.getString("id"); //人员唯一编码
+                        String account = jsonObject.getString("account"); //账号
+                        String password = jsonObject.getString("password"); //MD5加密后的密码
+                        String name = jsonObject.getString("name"); //人员姓名
+                        String idcard = jsonObject.getString("idcard"); //身份证号
+                        String salt = jsonObject.getString("salt"); //md5密码盐
+                        String factDeptName = jsonObject.getString("factDeptName"); //部门名称
+                        String companyName = jsonObject.getString("companyName"); //公司名称
+                        String updateTime = jsonObject.getString("updateTime"); //更新时间
+                        String status = jsonObject.getString("status"); //状态(1:启用  2:冻结  3:删除)
+                        User newUser = new User();
+                        User sysUser = userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getSysId, id).eq(User::getSysType, 2));
+                        if (sysUser != null) {
+                            newUser = sysUser;
+                        } else {
+                            newUser.setDeptId("1588069957940674562"); //白马部门
+                            newUser.setSysType(2);
+                            newUser.setIsDeleted(1);
+                            newUser.setCreateUser(Long.parseLong("1541381503819694081"));
+                            newUser.setUpdateUser(Long.parseLong("1541381503819694081"));
+                            newUser.setTenantId("000000");
+                            newUser.setSysId(id);
+                        }
+                        newUser.setAccount(account);
+                        newUser.setRealName(name);
+                        newUser.setName(name);
+                        newUser.setPassword(password);
+                        newUser.setName(name);
+                        newUser.setStatus(Integer.parseInt(status));
+                        newUser.setIdNumber(idcard);
+                        newUser.setUpdateTime(new Date());
+                        newUser.setCreateTime(new Date());
+                        userService.submit(newUser);
+                    }
+                }
+            } else {
+                System.out.println(userInfo.getString("message"));
+            }
+        }
+
+    }
 }

+ 2 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -30,6 +30,8 @@
         <result column="position" property="position"/>
         <result column="company_name" property="companyName"/>
         <result column="acc_code" property="accCode"/>
+        <result column="sys_id" property="sysId"/>
+        <result column="sys_type" property="sysType"/>
     </resultMap>
     <update id="updateRoleIdById">
         UPDATE blade_user

+ 182 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/util/AesInfoUtil.java

@@ -0,0 +1,182 @@
+package org.springblade.system.user.util;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.text.ParseException;
+
+/**
+ * 加密方式AES
+ */
+public class AesInfoUtil {
+    private static final Logger logger = LoggerFactory.getLogger(AesInfoUtil.class);
+
+    private static final String KEY = "nbsg5rdz6tfx7ygc";
+
+    //偏移量,AES 128位数据块对应偏移量为16位
+    public static final String VIPARA = "nbsg1qaz2wsx3edc";   //AES 128位数据块对应偏移量为16位
+
+    //AES:加密方式   CBC:工作模式   PKCS5Padding:填充模式
+    private static final String CBC_PKCS5_PADDING = "AES/CBC/PKCS5Padding";
+
+    private static final String AES = "AES";
+    //编码方式
+    public static final String CODE_TYPE = "UTF-8";
+
+    /**
+     * AES 加密操作
+     *
+     * @param content 待加密内容
+     * @param key     加密密钥
+     * @return 返回Base64转码后的加密数据
+     */
+    public static String encrypt(String content, String key) {
+
+        if (content == null || "".equals(content)) {
+            return content;
+        }
+
+        if (key == null || "".equals(key)) {
+            key=KEY;
+        }
+
+        try {
+            /*
+             * 新建一个密码编译器的实例,由三部分构成,用"/"分隔,分别代表如下
+             * 1. 加密的类型(如AES,DES,RC2等)
+             * 2. 模式(AES中包含ECB,CBC,CFB,CTR,CTS等)
+             * 3. 补码方式(包含nopadding/PKCS5Padding等等)
+             * 依据这三个参数可以创建很多种加密方式
+             */
+            Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
+
+            //偏移量
+            IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes(CODE_TYPE));
+
+            byte[] byteContent = content.getBytes(CODE_TYPE);
+
+            //使用加密秘钥
+            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(CODE_TYPE), AES);
+
+            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, zeroIv);// 初始化为加密模式的密码器
+
+            byte[] result = cipher.doFinal(byteContent);// 加密
+
+            return Base64.encodeBase64String(result);//通过Base64转码返回
+        } catch (Exception ex) {
+            logger.error("AES加密错误:"+ex.getMessage());
+        }
+        return null;
+    }
+
+
+
+    /**
+     * AES 解密操作
+     *
+     * @param content
+     * @param key
+     * @return
+     */
+    public static String decrypt(String content, String key) {
+        if (content == null || "".equals(content)) {
+            return content;
+        }
+        if (key == null || "".equals(key)) {
+            key=KEY;
+        }
+        try {
+            //实例化
+            Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
+            IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes(CODE_TYPE));
+
+            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(CODE_TYPE), AES);
+
+            cipher.init(Cipher.DECRYPT_MODE, skeySpec, zeroIv);
+
+            byte[] result = cipher.doFinal(Base64.decodeBase64(content));
+
+            return new String(result, CODE_TYPE);
+        } catch (Exception ex) {
+            logger.error("AES解密错误:"+ex.getMessage());
+        }
+        return null;
+    }
+
+
+    public static void main(String[] args) {
+
+        /*System.out.println(AesUtil.encrypt("{\"userName\":\"liuzq\",\"password\":\"111111\"}",null));
+        System.out.println(URLEncoder.encode(AesUtil.encrypt("{\"userName\":\"liuzq\",\"password\":\"111111\"}",null)));
+
+        System.out.println("-------------------------------------------");
+
+        System.out.println(AesUtil.encrypt("{\"appid\":\"1000\",\"token\":\"sdfj92jvj34pf03fnsdklfn3\"}",null));
+
+        System.out.println("bRguv2/vDd8CM7Zl628dO3o/x75KeesR6BGsEyQsmq7o1BV+9Dk41PceRBg7r9n7q+3vb+dIWjYieKU4cXgTsQ==");
+
+        System.out.println(URLEncoder.encode(AesUtil.encrypt("{\"appid\":\"1001\",\"token\":\"c5cce0daf47f4356b670376bb2997580\"}",null)));
+
+
+        System.out.println("-------------------------------------------");*/
+        String token ="Yu3ijG%2FNsi5oVeOiNolqYpXl0pMLujUyX0kKS34VntLGjsBFIGVFgrA1uUPzmeSMBytVhFdv6eusjDQVgVoVXj42TAg9k0%2FmUdbVyhmay4rPFv0cVas4OTtdfnHlRnO8";
+        System.out.println(AesInfoUtil.decrypt(URLDecoder.decode(token),null));
+//        System.out.println(AesUtil.decrypt("bRguv2/vDd8CM7Zl628dO3o/x75KeesR6BGsEyQsmq7o1BV+9Dk41PceRBg7r9n7q+3vb+dIWjYieKU4cXgTsQ==",null));
+
+    }
+
+
+    public static String sendPost(String url, JSONObject json, String encoding) throws ParseException, IOException {
+        String body = "";
+
+        //创建httpclient对象
+        CloseableHttpClient client = HttpClients.createDefault();
+        //创建post方式请求对象
+        HttpPost httpPost = new HttpPost(url);
+
+        //装填参数
+        StringEntity s = new StringEntity(json.toString(), "utf-8");
+        System.out.println(json.toString());
+        s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
+                "application/json"));
+        //设置参数到请求对象中
+        httpPost.setEntity(s);
+        System.out.println("请求地址:" + url);
+//        System.out.println("请求参数:"+nvps.toString());
+
+        //设置header信息
+        //指定报文头【Content-type】、【User-Agent】
+//        httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
+        httpPost.setHeader("Content-type", "application/json");
+        httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+
+        //执行请求操作,并拿到结果(同步阻塞)
+        CloseableHttpResponse response = client.execute(httpPost);
+        //获取结果实体
+        HttpEntity entity = response.getEntity();
+        if (entity != null) {
+            //按指定编码转换结果实体为String类型
+            body = EntityUtils.toString(entity, encoding);
+        }
+        EntityUtils.consume(entity);
+        //释放链接
+        response.close();
+        return body;
+    }
+}