فهرست منبع

Merge branch 'master' of http://121.41.40.202:3000/zhuwei/bladex

huangtf 1 سال پیش
والد
کامیت
17d5660903
19فایلهای تغییر یافته به همراه1201 افزوده شده و 132 حذف شده
  1. 5 1
      blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
  2. 1 0
      blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
  3. 28 20
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FB02.java
  4. 24 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WtcEva.java
  5. 4 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  6. 10 22
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  7. 1 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  8. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java
  9. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java
  10. 9 11
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java
  11. 38 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/LevelInfo.java
  12. 49 30
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java
  13. 45 39
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  14. 17 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/bean/GetBMTokenDTO.java
  15. 13 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/bean/GetTokenDTO.java
  16. 478 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/thirdparty/ThirdPartySystemApi.java
  17. 184 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/util/HttpClientUtil.java
  18. 80 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/util/RsaUtilToken.java
  19. 209 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/util/RsaUtils.java

+ 5 - 1
blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java

@@ -68,6 +68,11 @@ public interface CommonConstant {
 
     String SG_THE_LOG = "SG.theLog";
 
+    /**
+     * 白马公司ids
+     */
+    String BM_COMPANY_IDS = "bm.company.ids";
+
     /**
      * 默认排序字段
      */
@@ -83,5 +88,4 @@ public interface CommonConstant {
      */
     Integer API_SCOPE_CATEGORY = 2;
 
-
 }

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

@@ -32,6 +32,7 @@ public class AuthProvider {
     private static final List<String> DEFAULT_SKIP_URL = new ArrayList<>();
 
     static {
+        DEFAULT_SKIP_URL.add("/bm/**"); //白马三方接口放行
         DEFAULT_SKIP_URL.add("/example");
         DEFAULT_SKIP_URL.add("/oauth/token/**");
         DEFAULT_SKIP_URL.add("/loginByToken");

+ 28 - 20
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FB02.java

@@ -2,6 +2,7 @@ package org.springblade.manager.vo;
 
 import lombok.Data;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.Coords;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
@@ -9,7 +10,6 @@ import org.springblade.manager.entity.WbsTreeContract;
 
 import java.util.*;
 import java.util.function.BiFunction;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -29,6 +29,7 @@ public class FB02 {
     private List<FormData> fds = new ArrayList<>();
     private List<Item> datas = new ArrayList<>();
     private Map<FormData, BiFunction<List<Item>,Integer,List<Object>>> fm = new HashMap<>();
+    private List<String> sqlList = new ArrayList<>();
 
 
     @Data
@@ -60,19 +61,11 @@ public class FB02 {
 
     public Integer getPageNum(){
         if(this.name!=null){
-          return  this.name.getValues().size()/this.name.getCoordsList().size();
+          return  (this.getDatas().size()/this.name.getCoordsList().size())+1;
         }
         return null;
     }
 
-    public void addItem(String subItem,String name,Double passRate, Integer weight){
-          this.datas.add(new Item(subItem, name, passRate, weight));
-    }
-
-    private FB02() {
-        /*禁止无参构建实例*/
-    }
-
     public FB02(List<FormData> processFds) {
          for(FormData fd:processFds){
               if(fd.getEName().contains("分项工程名称")){
@@ -87,7 +80,7 @@ public class FB02 {
               }else if(fd.getEName().contains("实测合格率")){
                   this.passRate=fd;
                   this.fm.put(fd,(List<Item> l,Integer pn)->l.stream().map(Item::getPassRate).collect(Collectors.toList()));
-              }else if(fd.getEName().contains("权值")){
+              }else if(fd.getEName().trim().equals("权值")){
                   this.weight=fd;
                   this.fm.put(fd,(List<Item> l,Integer pn)->l.stream().map(Item::getWeight).collect(Collectors.toList()));
               }
@@ -125,14 +118,22 @@ public class FB02 {
                             LinkedHashMap::new,
                             Collectors.mapping(datas::get, Collectors.toList())
                     ));
-            pages.forEach((k, v) -> {
+
+            for (Map.Entry<Integer, List<Item>> entry : pages.entrySet()) {
+                int k = entry.getKey();
+                if (wtcList.size() <= k) {
+                    break;
+                }
+                List<Item> v = entry.getValue();
+                WbsTreeContract w = wtcList.get(k);
+                StringBuilder  sb =new StringBuilder();
                 this.fds.forEach(fd -> {
-                    putEd(k, v, fd);
+                    sb.append(putEd(k,v,fd,w)).append(StringPool.COMMA);
                 });
-            });
-
-
-         String template="update xxxxx set content='xxxx',update_time=xxx where id =xxxx";
+                String template="update "+w.getInitTableName()+" set "+sb.deleteCharAt(sb.length()-1)+" where id ="+w.getPKeyId();
+                System.out.println("EUV:"+template);
+                sqlList.add(template);
+            }
 
             return true;
         }
@@ -140,7 +141,7 @@ public class FB02 {
     }
 
    /**把数据放到对应元素*/
-    private void putEd(int pn,List<Item> items, FormData fd){
+    private String putEd(int pn,List<Item> items, FormData fd,WbsTreeContract w){
         BiFunction<List<Item>,Integer,List<Object>> fc = this.fm.get(fd);
         if(fc!=null) {
             List<Object> data = fc.apply(items,pn);
@@ -150,12 +151,19 @@ public class FB02 {
                 list.add(new ElementData(pn, 0, data.get(i), c.getX(), c.getY()));
             }
             fd.getValues().addAll(list);
+            return fd.getKey()+StringPool.EQUALS+StringPool.SINGLE_QUOTE+recovery(list)+StringPool.SINGLE_QUOTE;
         }
+        return StringPool.EMPTY;
     }
 
-    public String getSql(){
-        return "select 1";
+    public String recovery(List<ElementData> dataList) {
+        if (Func.isNotEmpty(dataList)) {
+            return dataList.stream().filter(e -> !e.isEmpty()).map(e -> e.stringValue() + "_^_" + e.getY() + "_" + e.getX()).collect(Collectors.joining("☆"));
+        }
+        return StringPool.EMPTY;
     }
 
 
+
+
 }

+ 24 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WtcEva.java

@@ -0,0 +1,24 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * @author yangyj
+ * @Date 2023/11/13 14:18
+ * @description 评定Bean
+ */
+@Data
+public class WtcEva {
+    private String nodeName;
+    private String initTableName;
+    private String htmlUrl;
+    private Long contractId;
+    private String treeCode;
+    private Long parentId;
+    public boolean isEva(){
+      return Objects.requireNonNull(this.nodeName, "nodeName不能为空").contains("评定");
+  }
+}

+ 4 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -1550,7 +1550,7 @@ public class TaskController extends BladeController {
         //封装入参SQL
         List<Object> params = new ArrayList<>();
         Integer eVisaStatus = dto.getVisaStatus();
-        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE approval_type != 4 AND contract_id = " + dto.getContractId()); //approval_type != 4 非档案的任务就是1填报资料,2工程文件,3日志资料
+        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE approval_type != 4 AND status != 3 AND contract_id = " + dto.getContractId()); //approval_type != 4 非档案的任务就是1填报资料,2工程文件,3日志资料
 
         if (StringUtils.isNotBlank(dto.getStartTimeValue()) && StringUtils.isNotBlank(dto.getEndTimeValue())) {
             if (dto.getStartTimeValue().equals(dto.getEndTimeValue())) {
@@ -1650,6 +1650,9 @@ public class TaskController extends BladeController {
                         for (TaskParallel taskPa : taskParallelList) {
                             if (taskPa.getStatus() == 2 && ObjectUtil.isNotEmpty(taskPa.getEVisaStatus()) && taskPa.getEVisaStatus() == 1) {
                                 taskPa.setEVisaStatus(2);
+                                if (taskPa.getEVisaContent().contains("请等待") && ObjectUtil.isEmpty(eVisaFailedInfo)) {
+                                    eVisaFailedInfo = taskPa.getEVisaContent();
+                                }
                             } else if (taskPa.getStatus() == 3 && taskPa.getTaskUser().equals(SecureUtil.getUserId().toString())) {
                                 taskPa.setEVisaStatus(3);
                             } else if (ObjectUtil.isNotEmpty(taskPa.getEVisaStatus()) && taskPa.getEVisaStatus() == 99) {

+ 10 - 22
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -520,13 +520,13 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
             List<Long> informationIds = result.stream().filter(f -> f.getStatus().equals(1) || f.getStatus().equals(2)).map(InformationQuery::getId).collect(Collectors.toList());
             String informationIdsStr = informationIds.stream().map(String::valueOf).collect(Collectors.joining(","));
             if (StringUtils.isNotEmpty(informationIdsStr)) {
-                List<Task> query = jdbcTemplate.query("SELECT id,form_data_id,process_instance_id,approval_type,status,batch,project_id,contract_id FROM u_task WHERE form_data_id IN(" + informationIdsStr + ") AND status IN (1, 2, 3) AND is_deleted = 0", new BeanPropertyRowMapper<>(Task.class));
+                List<Task> query = jdbcTemplate.query("SELECT id,form_data_id,process_instance_id,approval_type,status,batch,project_id,contract_id FROM u_task WHERE form_data_id IN(" + informationIdsStr + ") AND status IN (1, 2) AND is_deleted = 0", new BeanPropertyRowMapper<>(Task.class));
 
                 taskMaps = query.stream().collect(Collectors.groupingBy(Task::getFormDataId));
 
                 Set<String> processInstanceIds = query.stream().map(Task::getProcessInstanceId).map(id -> "'" + id + "'").collect(Collectors.toSet());
                 if (processInstanceIds.size() > 0) {
-                    List<TaskParallel> taskParallels = jdbcTemplate.query("select task_user, task_user_name, e_visa_status, status, process_instance_id from u_task_parallel where is_deleted = 0 and process_instance_id in(" + StringUtils.join(processInstanceIds, ",") + ")", new BeanPropertyRowMapper<>(TaskParallel.class));
+                    List<TaskParallel> taskParallels = jdbcTemplate.query("select task_user, task_user_name, e_visa_status, status, process_instance_id, initiative from u_task_parallel where is_deleted = 0 and process_instance_id in(" + StringUtils.join(processInstanceIds, ",") + ")", new BeanPropertyRowMapper<>(TaskParallel.class));
                     taskParallelMaps = taskParallels.stream().collect(Collectors.groupingBy(TaskParallel::getProcessInstanceId));
                 }
             }
@@ -573,17 +573,6 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
 
                 if (Arrays.asList("1,2".split(",")).contains(vor.getStatus().toString())) {
                     //说明属于待审批和已审批状态,查询待办信息
-                    /*List<Task> tasks = this.taskClient.queryTaskListByFormDataId(String.valueOf(vor.getId()));
-                    if (tasks != null && tasks.size() > 0) {
-                        //查询当前任务的所有待办人
-                        List<TaskParallel> linkTasks = this.taskParallelService.queryApprovalUser(tasks.get(0).getProcessInstanceId());
-                        if (linkTasks != null && linkTasks.size() > 0) {
-                            //处理审批状态
-                            this.integrationMethod(vor, linkTasks);
-                        }
-                        //设置上报批次
-                        vor.setReportNumber(String.valueOf(tasks.get(0).getBatch()));
-                    }*/
                     List<Task> tasks = finalTaskMaps.getOrDefault(vor.getId().toString(), null);
                     if (tasks != null && tasks.size() > 0) {
                         //查询当前任务的所有待办人
@@ -599,14 +588,6 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
 
                 //校验关联的工序节点是否全都已审批
                 if (StringUtils.isNotEmpty(vor.getSjRecordIds())) {
-                    /*List<InformationQuery> informationQueryList = this.baseMapper.selectBatchIds(Func.toLongList(vor.getSjRecordIds()));
-                    List<InformationQuery> collect = informationQueryList.stream().filter(f -> f.getStatus().equals(2)).collect(Collectors.toList());
-                    if (collect.size() == informationQueryList.size()) {
-                        vor.setIsApprove(true);
-                    } else {
-                        vor.setIsApprove(false);
-                    }*/
-
                     List<String> recordIdList = Func.toStrList(vor.getSjRecordIds());
                     List<InformationQuery> informationQueryList = finalInformationQueries.stream()
                             .filter(f -> recordIdList.contains(f.getId().toString()))
@@ -817,7 +798,14 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
      * 统合方法
      */
     private void integrationMethod(InformationQueryVO vo, List<TaskParallel> linkList) {
-        linkList.forEach(link -> vo.setWaitingUserList(link.getTaskUserName(), new Integer("999").equals(link.getEVisaStatus()) ? 999 : new Integer("2").equals(link.getStatus()) ? 2 : new Integer("3").equals(link.getStatus()) && new Integer("1").equals(link.getInitiative()) ? 3 : 1));
+        for (TaskParallel link : linkList) {
+            vo.setWaitingUserList
+                    (link.getTaskUserName(),
+                            new Integer(999).equals(link.getEVisaStatus()) ? 999 :
+                                    (new Integer(2).equals(link.getStatus()) ? 2 :
+                                            (new Integer(3).equals(link.getStatus()) && new Integer(1).equals(link.getInitiative())) ? 3
+                                                    : 1));
+        }
     }
 
     /**

+ 1 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -1462,8 +1462,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         //修改重签状态为保存PDF失败
                         this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
                                 .set(TaskParallel::getEVisaContent, "重新保存PDF失败")
-                                .eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId())
-                                .eq(TaskParallel::getEVisaStatus, "99"));
+                                .eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()));
                     }
                 }
 

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

@@ -246,5 +246,9 @@ public class WbsFormElementController extends BladeController {
         return R.fail(200, "关联失败");
     }
 
+    @RequestMapping(value = "/structure", method = RequestMethod.GET)
+    public R<Object> structure(Long tableId) {
+        return R.fail(200, "");
+    }
 
 }

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

@@ -621,4 +621,6 @@ public class WbsParamController {
 
 
 
+
+
 }

+ 9 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java

@@ -366,12 +366,11 @@ public interface ITurnPointCalculator {
             if (!tp.isVisible(negative)) {
                 result.addAll(tp.limit(negative));
             }
-            double x=tp.tooFar();
-            if(x!=0){
-               /*距离超过两百米需要转点*/
-                List<TurnPoint>   closeZd=  info.getCloseZd();
+            int n=tp.tooFar();
+            if(n!=0){
+                result.addAll(tp.limitOfRange(n));
+                /*List<TurnPoint>   closeZd=  info.getCloseZd();
                 TurnPoint last = closeZd.get(closeZd.size()-1);
-                 int n = (int)Math.ceil(Math.abs(x)/200);
                 List<TurnPoint> list = new ArrayList<>();
                 for(int i=0;i<n;i++){
                      TurnPoint zd = new TurnPoint(info, new HashMap<>());
@@ -383,11 +382,11 @@ public interface ITurnPointCalculator {
                     double small = BigDecimal.valueOf(r.nextDouble() * (info.getStep() - info.getMin() - xx) + info.getMin()).setScale(info.getScale(), ROUND_HALF_UP).doubleValue();
                     double big = small + xx;
                     if (ddx < 0) {
-                        /*后大前小,取高*/
+                        *//*后大前小,取高*//*
                         zd.setQ(small);
                         zd.setH(big);
                     } else {
-                        /*前大后小,趋低*/
+                        *//*前大后小,趋低*//*
                         zd.setQ(big);
                         zd.setH(small);
                     }
@@ -397,17 +396,16 @@ public interface ITurnPointCalculator {
                     zd.getDataMap().put(QS, zd.getQ());
                     zd.getDataMap().put(HS, zd.getH());
                     if(i==n-1) {
-                        /*最后一个重新计算前视,因为是微调所以不再判断高差是否在范围*/
+                        *//*最后一个重新计算前视,因为是微调所以不再判断高差是否在范围*//*
                         tp.setQ(info.getSightHeight() - tp.getSc0L());
                     }
                     closeZd.add(zd.clone());
-                    /*设置新的仪器里程,没转一次点相当于减少两百米的间隔,正向+负向-*/
-                    info.setMilestone(info.getMilestone() + 200*(x/Math.abs(x)));
+                    *//*info.setMilestone(info.getMilestone() + 200*(x/Math.abs(x)));tooFar里已经重置仪器里程,这里专注转点*//*
                     list.add(zd);
                 }
                 if(list.size()>0){
                     result.addAll(list);
-                }
+                }*/
             }
 
         }

+ 38 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/LevelInfo.java

@@ -58,8 +58,8 @@ public class LevelInfo implements  Cloneable {
     private boolean distance=false;
     /**当前里程*/
     private Double milestone;
-    /**减少间距*/
-    private Double missdistance=0d;
+    /**高程转点等效缩短间距*/
+    private Double heightTurnLength =0d;
     /**测站点信息*/
     private Map<String,Double> BmMap =new HashMap<>();
 
@@ -208,11 +208,43 @@ public class LevelInfo implements  Cloneable {
         this.milestone = milestone;
     }
 
-    public Double getMissdistance() {
-        return missdistance;
+
+
+    /*重置仪器里程*/
+    public double resetMilestone(double x){
+        /*只要包含里程信息就必须重置等效间距*/
+        double d=x-this.milestone;
+        /*高差转点每次等效减小200米间距,如果还是小于当前测点与仪器高的间距则返回剩余间距*/
+        if(this.heightTurnLength >0) {
+            /*负向减少里程,正向则增大里程*/
+            if(this.milestone<Math.abs(d)) {
+                double symbol=d / Math.abs(d);
+                /*只有当高差转点不能抵消等效间距的时候,更新当前仪器里程信息*/
+                this.setMilestone(this.milestone + this.heightTurnLength * symbol);
+                /*重新计算测点与仪器间距*/
+                d = x - this.milestone;
+            }else{
+                /* this.levelInfo.setMilestone(x-(ThreadLocalRandom.current().nextInt(11)+5)*symbol);*/
+                /*假如高程转点的等效缩小距离已经能抵消测量距离,则仪器里程信息设置为当前转点*/
+                this.milestone=x;
+                /*高程转点等效距离已经完全抵消所需要的距离转点*/
+                d=0;
+            }
+            /*重置等效高程转点*/
+            this.heightTurnLength =0D;
+        }else{
+            /*this.levelInfo.setMilestone(x-(ThreadLocalRandom.current().nextInt(21)+5)*symbol);*/
+            /*this.levelInfo.setMilestone(x);*/
+            this.milestone=this.milestone+((int)(d/200))*200;
+        }
+        return d;
+    }
+
+    public Double getHeightTurnLength() {
+        return heightTurnLength;
     }
 
-    public void setMissdistance(Double missdistance) {
-        this.missdistance = missdistance;
+    public void setHeightTurnLength(Double heightTurnLength) {
+        this.heightTurnLength = heightTurnLength;
     }
 }

+ 49 - 30
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java

@@ -7,9 +7,7 @@ import org.springframework.beans.BeanUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.ThreadLocalRandom;
 import java.util.stream.Collectors;
-import java.util.stream.IntStream;
 
 import static com.mixsmart.utils.CustomFunction.rangeList;
 import static java.math.BigDecimal.ROUND_HALF_UP;
@@ -334,12 +332,50 @@ public class TurnPoint {
             if(levelInfo.isDistance()) {
                 /*没转一次点相当于往前推进两百米*/
                 /* levelInfo.setMilestone(levelInfo.getMilestone()+200);*/
-                 levelInfo.setMissdistance(levelInfo.getMissdistance()+200);
+                 levelInfo.setHeightTurnLength(levelInfo.getHeightTurnLength()+200);
             }
             loop++;
         } while (hd > 0 && loop < 20);
         return result;
     }
+    /**生成距离转点*/
+    public List<TurnPoint> limitOfRange(Integer n){
+        List<TurnPoint>   closeZd=  this.levelInfo.getCloseZd();
+        TurnPoint last = closeZd.get(closeZd.size()-1);
+        List<TurnPoint> list = new ArrayList<>();
+        for(int i=0;i<n;i++){
+            TurnPoint zd = new TurnPoint(this.levelInfo, new HashMap<>());
+            zd.setName("ZD"+closeZd.size());
+            double dx = Math.random() * 0.07 * (RD.nextBoolean() ? -1 : 1);
+            zd.setBmd(StringUtils.number2StringZero(Double.parseDouble(last.getBmd()) + dx, 3));
+            double ddx = this.levelInfo.getSightHeight() - zd.getBmd0L();
+            double xx = Math.abs(ddx);
+            double small = BigDecimal.valueOf(r.nextDouble() * (this.levelInfo.getStep() - this.levelInfo.getMin() - xx) + this.levelInfo.getMin()).setScale(this.levelInfo.getScale(), ROUND_HALF_UP).doubleValue();
+            double big = small + xx;
+            if (ddx < 0) {
+                /*后大前小,取高*/
+                zd.setQ(small);
+                zd.setH(big);
+            } else {
+                /*前大后小,趋低*/
+                zd.setQ(big);
+                zd.setH(small);
+            }
+            this.levelInfo.setSightHeight(zd.getBmd0L());
+            zd.getDataMap().put(CD, zd.getName());
+            zd.getDataMap().put(YG, zd.getBmd());
+            zd.getDataMap().put(QS, zd.getQ());
+            zd.getDataMap().put(HS, zd.getH());
+            if(i==n-1) {
+                /*最后一个重新计算前视,因为是微调所以不再判断高差是否在范围*/
+                this.setQ(this.levelInfo.getSightHeight() - this.getSc0L());
+            }
+            closeZd.add(zd.clone());
+            /*info.setMilestone(info.getMilestone() + 200*(x/Math.abs(x)));tooFar里已经重置仪器里程,这里专注转点*/
+            list.add(zd);
+        }
+        return list;
+    }
 
     public double hdx() {
         double step = levelInfo.getStep();
@@ -457,34 +493,17 @@ public class TurnPoint {
     public void setIsDeleted(int isDeleted) {
         this.isDeleted = isDeleted;
     }
-    public double tooFar(){
+
+
+    /*仪器里程全部在这里控制,返回值需要距离转点的数量*/
+    public int tooFar(){
         if(this.levelInfo.isDistance()){
-            Double x= BaseUtils.milestone(this.name);
-            if(x!=null) {
-                /*只要包含里程信息就必须重置等效间距*/
-                double d=x-this.levelInfo.getMilestone();
-                double symbol=d / Math.abs(d);
-                /*高差转点每次等效减小200米间距,如果还是小于当前测点与仪器高的间距则返回剩余间距*/
-                if(this.levelInfo.getMissdistance()>0) {
-                    /*负向减少里程,正向则增大里程*/
-                    double reduce = this.levelInfo.getMissdistance() * symbol;
-                    if(Math.abs(reduce)<Math.abs(d)) {
-                        /*只有当高差转点不能抵消等效间距的时候,更新当前仪器里程信息*/
-                        this.levelInfo.setMilestone(this.levelInfo.getMilestone() + reduce);
-                        /*重新计算测点与仪器间距*/
-                        d = x - this.levelInfo.getMilestone();
-                    }else{
-                        /*高差转点等效间隔不能越过测点,仪器里程设置为距离当前测点5-25米的范围*/
-                        this.levelInfo.setMilestone(x-(ThreadLocalRandom.current().nextInt(21)+5)*symbol);
-                    }
-                    /*遇到有桩号的测点必须重置高差转点减少的等效间距*/
-                    this.levelInfo.setMissdistance(0D);
-                }else{
-                    this.levelInfo.setMilestone(x-(ThreadLocalRandom.current().nextInt(21)+5)*symbol);
-                }
-                if(Math.abs(d)>200.0001){
-                    /*间距超过200则返回实际间距*/
-                    return d;
+            Double mileage= BaseUtils.milestone(this.name);
+            if(mileage!=null) {
+              double dx=this.levelInfo.resetMilestone(mileage);
+                if(Math.abs(dx)>200.00001){
+                    /*间距超过200则返回需要距离转点的数量*/
+                    return  (int)Math.floor(Math.abs(dx)/200);
                 }
             }
         }

+ 45 - 39
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -3,7 +3,6 @@ package org.springblade.manager.service.impl;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.date.StopWatch;
 import cn.hutool.core.util.HashUtil;
 import cn.hutool.log.StaticLog;
@@ -13,7 +12,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.jfireel.expression.Expression;
 import com.mixsmart.utils.*;
 import lombok.RequiredArgsConstructor;
-import org.apache.commons.lang.math.IntRange;
 import org.apache.poi.ss.usermodel.*;
 import org.jsoup.nodes.Document;
 import org.springblade.common.utils.BaseUtils;
@@ -36,13 +34,14 @@ import org.springblade.manager.service.*;
 import org.springblade.manager.vo.AppWbsTreeContractVO;
 import org.springblade.manager.vo.CurrentNode;
 import org.springblade.manager.vo.FB02;
+import org.springblade.manager.vo.WtcEva;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.annotation.ScopedProxyMode;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedCaseInsensitiveMap;
 import org.springframework.web.context.WebApplicationContext;
 import javax.validation.constraints.NotNull;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -1521,11 +1520,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     /*调整页数并返回当所有页*/
-   public List<WbsTreeContract>  adjustPageSize(int pageSizeNow,WbsTreeContract wtc,List<FormData> processFds){
+   public List<WbsTreeContract>  adjustPageSize(int pageSizeNow,WtcEva wtc,List<FormData> processFds){
        try {
            List<WbsTreeContract> list =this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getInitTableName,wtc.getInitTableName()).eq(WbsTreeContract::getContractId,wtc.getContractId()).eq(WbsTreeContract::getParentId,wtc.getParentId()).orderByDesc(WbsTreeContract::getCreateTime));
            int length=list.size();
-           if(pageSizeNow!=length){
+           if(pageSizeNow>0&&pageSizeNow!=length){
                int dx = pageSizeNow-length;
                if(dx>0) {
                    /*加页*/
@@ -2420,43 +2419,50 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
     }
 
+
+
     @Override
     public R<Object> evaluate(Long pkeyId) {
-        if(StringUtils.isNumber(pkeyId)) {
-            WbsTreeContract wtc= this.getSqlOne("select tree_code treeCode,contract_id,init_table_name,html_url from m_wbs_tree_contract where p_key_id =" + pkeyId,WbsTreeContract.class);
-            List<FormData> processFds = this.createFormDataByTableName(wtc.getInitTableName());
-            FB02 fb02 = new FB02(processFds);
-            LinkedList<String> treeCode = new LinkedList<>(FormulaUtils.treeCodeSplit(wtc.getTreeCode()));
-            List<FormulaDataBlock> formulaDataBlocks = this.getSqlList("select a.* from m_formula_data_block a join (select parent_id from m_wbs_tree_contract where tree_code like '"+treeCode.getLast()+"%' and contract_id ="+wtc.getContractId()+" and major_data_type=2 and is_deleted=0 ORDER BY tree_code)b on a.sw_id=b.parent_id ",FormulaDataBlock.class);
-            if(formulaDataBlocks.size()>0){
-                 formulaDataBlocks.forEach(fdb->{
-                     List<ElementBlock> elementBlockList = JSON.parseArray(fdb.getVal(), ElementBlock.class);
-                     elementBlockList.forEach(eb->{
-                         String name = eb.getEName();
-                         FB02.Item  xm=new FB02.Item();
-                         xm.setName(name);
-                         List<ItemBlock> ib=  eb.getList();
-                         int total=  ib.stream().mapToInt(ItemBlock::getSubTotal).sum();
-                         int pass=   ib.stream().mapToInt(ItemBlock::getSubPass).sum();
-                         if(total>0) {
-                             double rate = (double) pass / (double) total;
-                             if (rate >= 0 && rate <= 100) {
-                                 xm.setPassRate(rate);
-                             }
-                         }
-                         fb02.getDatas().add(xm);
-                     });
-                 });
-                 if(fb02.getDatas().size()>0){
-                    Map<String,String> tableKeysCoordsMap= FormulaUtils.getElementCell(wtc.getHtmlUrl());
-                    fb02.initFdCoords(tableKeysCoordsMap);
-                    /*根据数据长度,增减页数*/
-                    List<WbsTreeContract> wtcList= this.adjustPageSize(fb02.getPageNum(),wtc,processFds);
-                    if(fb02.flush(wtcList)) {
-                        this.jdbcTemplate.execute(fb02.getSql());
+        if (StringUtils.isNumber(pkeyId)) {
+            WtcEva wtcEva = this.getSqlOne(
+                    "select b.tree_code treeCode ,a.contract_id contractId,a.init_table_name initTableName,a.html_url htmlUrl ,a.node_name nodeName ,a.parent_id parentId from m_wbs_tree_contract a join m_wbs_tree_contract b on (a.parent_id=b.id and a.contract_id=b.contract_id) where a.p_key_id ="
+                            + pkeyId, WtcEva.class);
+            if(wtcEva.isEva()){
+                List<FormData> processFds = this.createFormDataByTableName(wtcEva.getInitTableName());
+                FB02 fb02 = new FB02(processFds);
+                LinkedList<String> treeCode = new LinkedList<>(FormulaUtils.treeCodeSplit(wtcEva.getTreeCode()));
+                List<FormulaDataBlock> formulaDataBlocks = this.getSqlList("select a.* from m_formula_data_block a join (select parent_id from m_wbs_tree_contract where tree_code like '" + treeCode.getLast() + "%' and contract_id =" + wtcEva.getContractId() + " and major_data_type=2 and is_deleted=0 ORDER BY tree_code)b on a.sw_id=b.parent_id ", FormulaDataBlock.class);
+                if (formulaDataBlocks!=null&&formulaDataBlocks.size() > 0) {
+                    formulaDataBlocks.forEach(fdb -> {
+                        List<ElementBlock> elementBlockList = JSON.parseArray(fdb.getVal(), ElementBlock.class);
+                        elementBlockList.forEach(eb -> {
+                            String name = eb.getEName();
+                            FB02.Item xm = new FB02.Item();
+                            xm.setName(name);
+                            List<ItemBlock> ib = eb.getList();
+                            int total = ib.stream().mapToInt(ItemBlock::getSubTotal).sum();
+                            int pass = ib.stream().mapToInt(ItemBlock::getSubPass).sum();
+                            if (total > 0) {
+                                double rate = (double) pass / (double) total;
+                                if (rate >= 0 && rate <= 100) {
+                                    xm.setPassRate(rate);
+                                }
+                            }
+                            fb02.getDatas().add(xm);
+                        });
+                    });
+                    if (fb02.getDatas().size() > 0) {
+                        Map<String, String> tableKeysCoordsMap = FormulaUtils.getElementCell(wtcEva.getHtmlUrl());
+                        fb02.initFdCoords(tableKeysCoordsMap);
+                        /*根据数据长度,增减页数*/
+                        List<WbsTreeContract> wtcList = this.adjustPageSize(fb02.getPageNum(), wtcEva, processFds);
+                        if (fb02.flush(wtcList)) {
+                            fb02.getSqlList().forEach(System.out::println);
+                            //this.jdbcTemplate.execute(fb02.getSql());
+                            return R.success("成功");
+                        }
                     }
-                 }
-                return R.success("成功");
+                }
             }
         }
         return R.fail("无数据");

+ 17 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/bean/GetBMTokenDTO.java

@@ -0,0 +1,17 @@
+package org.springblade.system.user.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+public class GetBMTokenDTO implements Serializable {
+
+    private String uuid;
+    private String username;
+    private String password;
+    private String source;
+
+}

+ 13 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/bean/GetTokenDTO.java

@@ -0,0 +1,13 @@
+package org.springblade.system.user.bean;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class GetTokenDTO implements Serializable {
+
+    private String uuid;
+    private String idcard;
+
+}

+ 478 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/thirdparty/ThirdPartySystemApi.java

@@ -0,0 +1,478 @@
+package org.springblade.system.user.thirdparty;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+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.constant.CommonConstant;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DigestUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.feign.SaveUserInfoByProjectClient;
+import org.springblade.system.entity.AuthClient;
+import org.springblade.system.user.bean.GetBMTokenDTO;
+import org.springblade.system.user.bean.GetTokenDTO;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.service.IUserService;
+import org.springblade.system.user.util.AesInfoUtil;
+import org.springblade.system.user.util.HttpClientUtil;
+import org.springblade.system.user.util.RsaUtilToken;
+import org.springblade.system.user.util.RsaUtils;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.data.redis.core.RedisTemplate;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.time.Duration;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * 白马三方接口相关
+ *
+ * @author liuyc
+ * @date 2023年11月14日15:15:42
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/bm")
+public class ThirdPartySystemApi {
+
+    private final JdbcTemplate jdbcTemplate;
+    private final RedisTemplate<String, String> redisTemplate;
+    private final IUserService userService;
+    private final SaveUserInfoByProjectClient saveUserInfoByProjectClient;
+
+    /*白马相关常量*/
+    private final static String IP_PORT = "http://219.152.86.38:13427";
+    private final static String PK_URL = IP_PORT + "/prod-api/auth/touch";
+    private final static String TOKEN_URL = IP_PORT + "/prod-api/auth/login";
+    private final static String USER_LIST_URL = IP_PORT + "/prod-api/openapi/biz-v1/user/list";
+    private final static String USERNAME = "白马质检";
+    private final static String PASSWORD = "Bmzj@654321";
+    private final static String SOURCE = "HongChuangBm";
+    private final static String APP_KEY = "9F3C78FC22D07EAB2AEB4DD6CA9644DB";
+
+    /**
+     * 根据appKey获取本系统的公钥信息
+     *
+     * @param appKey = blade_client id
+     */
+    @GetMapping("/auth/public-key")
+    public Map<String, Object> getPublicKey(@RequestParam String appKey) {
+        Map<String, Object> resultMap = new HashMap<>();
+        if (StringUtils.isEmpty(appKey)) {
+            resultMap.put("uuid", null);
+            resultMap.put("pk", null);
+            resultMap.put("code", 500);
+            resultMap.put("msg", "param cannot be null");
+            return resultMap;
+        }
+
+        /*Redis加锁,10秒过期*/
+        String lockRedisKey = "bm-secret-key-request-limit:" + appKey;
+        Long currentTime = System.currentTimeMillis();
+        Boolean isAbsent = redisTemplate.opsForValue().setIfAbsent(lockRedisKey, String.valueOf(currentTime), Duration.ofSeconds(10));
+
+        if (isAbsent != null && isAbsent) {
+            if (!isValidAppKey(appKey)) {
+                resultMap.put("uuid", null);
+                resultMap.put("pk", null);
+                resultMap.put("code", 500);
+                resultMap.put("msg", "appKey authentication failed");
+                return resultMap;
+            }
+
+            /*创建秘钥对*/
+            Map<String, String> keyPair = RsaUtils.createKeyPair();
+            String pk = keyPair.get("pk");
+            String sk = keyPair.get("sk");
+            Long uuid = SnowFlakeUtil.getId();
+
+            try {
+                /*存储到Redis,2分钟过期*/
+                String redisKey = "bm-secret-key:" + uuid;
+                redisTemplate.opsForValue().set(redisKey + ":pk", pk, 2, TimeUnit.MINUTES);
+                redisTemplate.opsForValue().set(redisKey + ":sk", sk, 2, TimeUnit.MINUTES);
+
+                resultMap.put("uuid", uuid);
+                resultMap.put("pk", pk);
+                resultMap.put("code", 200);
+                resultMap.put("msg", "操作成功");
+                return resultMap;
+            } catch (Exception e) {
+                resultMap.put("uuid", null);
+                resultMap.put("pk", null);
+                resultMap.put("code", 500);
+                resultMap.put("msg", e.getMessage());
+                return resultMap;
+            }
+        } else {
+            resultMap.put("uuid", null);
+            resultMap.put("pk", null);
+            resultMap.put("code", 500);
+            resultMap.put("msg", "try again in 10 seconds");
+            return resultMap;
+        }
+    }
+
+    private boolean isValidAppKey(String appKey) {
+        List<AuthClient> bladeClients = jdbcTemplate.query(
+                "SELECT (1) FROM blade_client WHERE id = ? AND status = 1 AND is_deleted = 0",
+                new Object[]{appKey},
+                new BeanPropertyRowMapper<>(AuthClient.class)
+        );
+        return !bladeClients.isEmpty();
+    }
+
+    /**
+     * 根据idcard获取本系统的token信息
+     *
+     * @param dto
+     */
+    @PostMapping("/auth/token")
+    public R<Object> getToken(@RequestBody GetTokenDTO dto) {
+        if (dto.getUuid().isEmpty() || dto.getIdcard().isEmpty()) {
+            throw new ServiceException("入参不能为空");
+        }
+
+        /*从Redis中获取私钥*/
+        String redisKey = "bm-secret-key:" + dto.getUuid();
+        String privateKey = redisTemplate.opsForValue().get(redisKey + ":sk");
+
+        if (privateKey != null) {
+            /*解密入参密钥对获取身份证信息*/
+            String decryptedIdCard = RsaUtils.decryptWithSk(dto.getIdcard(), privateKey);
+
+            /*根据身份证获取用户token*/
+            if (StringUtils.isNotEmpty(decryptedIdCard)) {
+                List<User> users = jdbcTemplate.query(
+                        "SELECT account, plaintext_password FROM blade_user WHERE is_deleted = 0 AND status = 1 AND id_number = ?",
+                        new Object[]{decryptedIdCard},
+                        new BeanPropertyRowMapper<>(User.class)
+                );
+
+                if (users.size() > 0 && users.size() != 1) {
+                    throw new ServiceException("获取用户信息异常");
+                } else if (users.size() == 1) {
+                    User user = users.get(0);
+                    HttpClient httpClient = HttpClientBuilder.create().build();
+                    HttpPost httpPost = new HttpPost("http://127.0.0.1:8090/blade-auth/oauth/token");
+                    httpPost.setHeader("Authorization", "Basic Y2xpZW50OmNsaWVudF9zZWNyZXQ=");
+                    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", user.getAccount()));
+
+                    /*密码加密*/
+                    String plaintextPassword = user.getPlaintextPassword();
+                    String hex = DigestUtil.md5Hex(plaintextPassword);
+
+                    params.add(new BasicNameValuePair("password", hex));
+                    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;
+                        while ((index = inputStream.read(buffer)) != -1) {
+                            outputStream.write(buffer, 0, index);
+                        }
+
+                        JSONObject jsonObject = JSON.parseObject(outputStream.toString());
+                        Object accessToken = jsonObject.get("access_token");
+                        if (accessToken != null) {
+                            Object expiresIn = jsonObject.get("expires_in");
+                            int minutes = 0;
+                            if (expiresIn instanceof Integer) {
+                                int seconds = (Integer) expiresIn;
+                                minutes = seconds / 60;
+                            }
+                            Map<String, Object> resultMap = new HashMap<>();
+                            resultMap.put("access_token", accessToken);
+                            resultMap.put("expires_in", minutes);
+                            return R.data(200, resultMap, "操作成功");
+
+                        } else {
+                            return R.data(400, null, "解析异常,token为空");
+                        }
+
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        return R.data(500, null, e.getMessage());
+                    }
+                } else {
+                    return R.data(400, null, "未获取到对应的用户信息");
+                }
+            }
+        }
+        return R.data(451, null, "未获取到对应的私钥信息");
+    }
+
+
+    /*public static void main(String[] args) {
+        //公钥
+        String pk = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJnZ0kMi0AG9sR97sdRD0/kqX9a7kSsVM56DUwmEbxf9n5SW0aRwxYcoyZQUC7ZW2MrXSNbzwbtmdD0RfQ4TJI0CAwEAAQ==";
+
+        //字符串
+        String idcard = "100136199809011400";
+
+        //使用公钥加密
+        String encryptedIdCard = RsaUtils.encryptWithPk(idcard, pk);
+
+        System.out.println("Encrypted Id Card: " + encryptedIdCard);
+    }*/
+
+
+    /**
+     * 获取白马系统token
+     *
+     * @return
+     */
+    public static R<Object> getBMToken() {
+        /*获取uuid与公钥*/
+        Map<String, String> param = new HashMap<>();
+        param.put("appKey", APP_KEY);
+        String pkAndUuid = HttpClientUtil.doGet(PK_URL, param);
+        JSONObject jsonObject = JSON.parseObject(pkAndUuid);
+        String pk = jsonObject.getString("pk");
+        String uuid = jsonObject.getString("uuid");
+        String code = jsonObject.getString("code");
+        /*获取token*/
+        if (StringUtils.isNotEmpty(pk) && StringUtils.isNotEmpty(uuid) && ("200").equals(code)) {
+            String username = RsaUtilToken.encryptWithPk(USERNAME, pk);
+            String password = RsaUtilToken.encryptWithPk(PASSWORD, pk);
+            //移除换行符
+            String usernameRe = username.replaceAll("\\r|\\n", "");
+            String passwordRe = password.replaceAll("\\r|\\n", "");
+
+            String result = HttpClientUtil.doPostJson(TOKEN_URL, JSON.toJSONString(new GetBMTokenDTO(uuid, usernameRe, passwordRe, SOURCE)));
+            return R.data(result);
+        } else {
+            return R.data(jsonObject);
+        }
+    }
+
+
+    /*public static void main(String[] args) {
+     *//*Object data = getBMToken().getData();
+        System.out.println(data);*//*
+
+        syncBMUserInfosToSystemProject();
+    }*/
+
+
+    /**
+     * 同步白马用户信息到系统项目中
+     */
+    /*@Scheduled(cron = "0 0 4 * * ?")*/
+    @PostMapping("/auth/test666")
+    public void syncBMUserInfosToSystemProject() {
+        /*获取token*/
+        Object dataR = getBMToken().getData();
+        JSONObject jsonObject = JSON.parseObject(String.valueOf(dataR));
+        String code = jsonObject.getString("code");
+        String dataToken = jsonObject.getString("data");
+        JSONObject jsonObjectToken = JSON.parseObject(dataToken);
+        String token = jsonObjectToken.getString("access_token");
+
+        if (("200").equals(code) && StringUtils.isNotEmpty(token)) {
+            /*获取白马公司ids*/
+            //String bmCompanyIds = CommonConstant.BM_COMPANY_IDS;
+
+            /*测试公司id*/
+            String bmCompanyIds = "1722072427562467328";
+
+            String[] bmCompanyIdsArr = bmCompanyIds.split(",");
+            for (String companyId : bmCompanyIdsArr) {
+                /*获取用户信息*/
+                Map<String, String> param = new HashMap<>();
+                param.put("pid", companyId);
+                String responseData = HttpClientUtil.doGet(USER_LIST_URL, param, token);
+
+                /*解析响应数据*/
+                JSONObject jsonObjectResponse = JSONObject.parseObject(responseData);
+                String responseStringCode = jsonObjectResponse.getString("code");
+                if (("200").equals(responseStringCode)) {
+                    JSONArray userList = jsonObjectResponse.getJSONArray("data");
+                    if (userList != null && userList.size() >= 1) {
+                        for (int i = 0; i < userList.size(); i++) {
+                            JSONObject jsonUser = userList.getJSONObject(i);
+                            String userid = jsonUser.getString("userid");
+                            //String username = jsonUser.getString("username");
+                            String nickname = jsonUser.getString("nickname");
+                            String idCard = jsonUser.getString("idcard");
+                            String phone = jsonUser.getString("phonenumber");
+                            String status = jsonUser.getString("status");
+
+                            JSONArray companies = jsonUser.getJSONArray("companies");
+                            if (companies != null && companies.size() >= 1) {
+                                for (int j = 0; j < companies.size(); j++) {
+                                    JSONObject companiesJSONObject = companies.getJSONObject(j);
+                                    //String companiesId = companiesJSONObject.getString("id");
+                                    String companyName = companiesJSONObject.getString("name");
+
+                                    if (companyName.contains("重庆白马航运发展有限公司")
+                                            || companyName.contains("四川二滩国际工程咨询有限责任公司")
+                                            || companyName.contains("中国水利水电第四工程局中电建路桥集团联合体")
+                                            || companyName.contains("中国水利水电第八工程局有限公司")
+                                            || companyName.contains("重庆市交通工程监理咨询有限责任公司")
+                                            || companyName.contains("中铁长江交通设计集团有限公司")
+                                            || companyName.contains("中铁八局集团有限公司")) {
+                                        List<User> sysUser = userService.getBaseMapper().selectList(Wrappers.<User>lambdaQuery().eq(User::getSysType, 2).apply("(sys_id = '" + userid + "' OR id_number = '" + idCard + "')"));
+
+                                        /*修改电话号码*/
+                                        if (sysUser.size() > 0 && ObjectUtil.isNotEmpty(phone) && phone.length() == 11) {
+                                            for (User user : sysUser) {
+                                                if (ObjectUtil.isEmpty(user.getPhone())) {
+                                                    userService.lambdaUpdate()
+                                                            .set(User::getPhone, phone)
+                                                            .eq(User::getId, user.getId())
+                                                            .update();
+                                                }
+                                            }
+                                        }
+
+                                        /*只有本系统不存在时才去新增*/
+                                        if (sysUser.size() == 0L) {
+                                            User newUser = new User();
+                                            newUser.setId(SnowFlakeUtil.getId());
+                                            newUser.setDeptId("1588069957940674562"); //白马部门
+
+                                            newUser.setSysType(9); //之前=2是表示同步,现在由于修改了接口,改为9,以便处理数据
+
+                                            newUser.setIsDeleted(0);
+                                            newUser.setCreateUser(Long.parseLong("1541381503819694081"));
+                                            newUser.setUpdateUser(Long.parseLong("1541381503819694081"));
+                                            newUser.setTenantId("000000");
+                                            newUser.setSysId(userid);
+                                            newUser.setUpdateTime(new Date());
+                                            newUser.setCreateTime(new Date());
+                                            newUser.setUserType("1,2");
+                                            newUser.setAccount(idCard);
+                                            newUser.setRealName(nickname);
+                                            newUser.setName(nickname);
+                                            newUser.setPassword("10470c3b4b1fed12c3baac014be15fac67c6e815");
+                                            newUser.setPlaintextPassword("123456");
+                                            newUser.setName(nickname);
+                                            newUser.setStatus(Integer.parseInt(status));
+                                            newUser.setIdNumber(idCard);
+                                            newUser.setCompanyName(companyName);
+                                            newUser.setPhone(ObjectUtil.isNotEmpty(phone) && phone.length() == 11 ? phone : null);
+
+                                            /*所有合同段(白马)*/
+                                            if (companyName.contains("重庆白马航运发展有限公司")) {
+                                                List<ContractInfo> contractInfos = jdbcTemplate.query("select id from m_contract_info where p_id = 1612329251049537537 and is_deleted = 0 and status = 1", new BeanPropertyRowMapper<>(ContractInfo.class));
+                                                for (ContractInfo contractInfo : contractInfos) {
+                                                    Long count = jdbcTemplate.queryForObject("select count(1) from m_project_assignment_user where user_id = " + newUser.getId() + " and project_id = 1612329251049537537 " + " and contract_id = " + contractInfo.getId() + " and post_id is null " + " and status = 1 and is_deleted = 0", Long.class);
+                                                    if (count == null || count == 0L) {
+                                                        /*绑定项目,设置默认角色信息 白马项目id:1612329251049537537;所有合同段id:contractInfo.getId();角色施工-资料员id:1537249581371707394*/
+                                                        saveUserInfoByProjectClient.saveInfoRelation(newUser.getId(), 1612329251049537537L, contractInfo.getId(), 1537249581371707394L);
+                                                        newUser.setRoleId("1537249581371707394");
+                                                    }
+                                                }
+                                            }
+
+                                            /*二期合同段(八局、二滩、长江设计单位、中国水利水电第八工程局有限公司)*/
+                                            if (companyName.contains("中铁八局集团有限公司") || companyName.contains("四川二滩国际工程咨询有限责任公司")
+                                                    || companyName.contains("中铁长江交通设计集团有限公司") || companyName.contains("中国水利水电第八工程局有限公司")) {
+                                                Long count = jdbcTemplate.queryForObject("select count(1) from m_project_assignment_user where user_id = " + newUser.getId() + " and  project_id = 1612329251049537537 and contract_id = 1612335077269143554 and post_id is null and status = 1 and is_deleted = 0", Long.class);
+                                                if (count == null || count == 0L) {
+                                                    /*绑定项目,设置默认角色信息 白马项目id:1612329251049537537;第二期合同段id:1612335077269143554;角色施工-资料员id:1537249581371707394*/
+                                                    saveUserInfoByProjectClient.saveInfoRelation(newUser.getId(), 1612329251049537537L, 1612335077269143554L, 1537249581371707394L);
+                                                    newUser.setRoleId("1537249581371707394");
+                                                }
+                                            }
+
+                                            /*一期合同段(四局、长江设计单位)*/
+                                            if (companyName.contains("中国水利水电第四工程局中电建路桥集团联合体") || companyName.contains("中铁长江交通设计集团有限公司")) {
+                                                Long count = jdbcTemplate.queryForObject("select count(1) from m_project_assignment_user where user_id = " + newUser.getId() + " and  project_id = 1612329251049537537 and contract_id = 1613022750656921601 and post_id is null and status = 1 and is_deleted = 0", Long.class);
+                                                if (count == null || count == 0L) {
+                                                    /*绑定项目,设置默认角色信息 白马项目id:1612329251049537537;第一期合同段id:1613022750656921601;角色施工-资料员id:1537249581371707394*/
+                                                    saveUserInfoByProjectClient.saveInfoRelation(newUser.getId(), 1612329251049537537L, 1613022750656921601L, 1537249581371707394L);
+                                                    newUser.setRoleId("1537249581371707394");
+                                                }
+                                            }
+
+                                            /*二监办合同段(二滩)*/
+                                            if (companyName.contains("四川二滩国际工程咨询有限责任公司")) {
+                                                Long count = jdbcTemplate.queryForObject("select count(1) from m_project_assignment_user where user_id = " + newUser.getId() + " and  project_id = 1612329251049537537 and contract_id = 1687370619295309826 and post_id is null and status = 1 and is_deleted = 0", Long.class);
+                                                if (count == null || count == 0L) {
+                                                    /*绑定项目,设置默认角色信息 白马项目id:1612329251049537537;二监办合同段id:1687370619295309826;角色施工-资料员id:1537249581371707394*/
+                                                    saveUserInfoByProjectClient.saveInfoRelation(newUser.getId(), 1612329251049537537L, 1687370619295309826L, 1537249581371707394L);
+                                                    newUser.setRoleId("1537249581371707394");
+                                                }
+                                            }
+
+                                            /*一监办合同段(重庆市交通工程监理咨询有限责任公司)*/
+                                            if (companyName.contains("重庆市交通工程监理咨询有限责任公司")) {
+                                                Long count = jdbcTemplate.queryForObject("select count(1) from m_project_assignment_user where user_id = " + newUser.getId() + " and  project_id = 1612329251049537537 and contract_id = 1687370014959017986 and post_id is null and status = 1 and is_deleted = 0", Long.class);
+                                                if (count == null || count == 0L) {
+                                                    /*绑定项目,设置默认角色信息 白马项目id:1612329251049537537;一监办合同段id:1687370014959017986;角色施工-资料员id:1537249581371707394*/
+                                                    saveUserInfoByProjectClient.saveInfoRelation(newUser.getId(), 1612329251049537537L, 1687370014959017986L, 1537249581371707394L);
+                                                    newUser.setRoleId("1537249581371707394");
+                                                }
+                                            }
+
+                                            /*入库*/
+                                            userService.save(newUser);
+                                            userService.submitUserDept(newUser);
+
+                                        }
+                                    }
+                                }
+                            }
+
+                            /*JSONArray projects = jsonUser.getJSONArray("projects");
+                            if (projects != null && projects.size() >= 1) {
+                                for (int k = 0; k < projects.size(); k++) {
+                                    JSONObject projectsJSONObject = projects.getJSONObject(k);
+                                    String projectId = projectsJSONObject.getString("projectid");
+                                    String projectName = projectsJSONObject.getString("projectname");
+                                    String subprojectId = projectsJSONObject.getString("subprojectid");
+                                    String subprojectName = projectsJSONObject.getString("subprojectname");
+                                    String contractId = projectsJSONObject.getString("contractid");
+                                    String contractName = projectsJSONObject.getString("contractname");
+                                    String sectionId = projectsJSONObject.getString("sectionid");
+                                    String sectionName = projectsJSONObject.getString("sectionname");
+
+                                    //TODO
+
+                                }
+                            }*/
+
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+}
+

+ 184 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/util/HttpClientUtil.java

@@ -0,0 +1,184 @@
+package org.springblade.system.user.util;
+
+ 
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.ContentType;
+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.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+
+public class HttpClientUtil {
+ 
+    public static String doGet(String url, Map<String, String> param) {
+ 
+        // 创建Httpclient对象
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+ 
+        String resultString = "";
+        CloseableHttpResponse response = null;
+        try {
+            // 创建uri
+            URIBuilder builder = new URIBuilder(url);
+            if (param != null) {
+                for (String key : param.keySet()) {
+                    builder.addParameter(key, param.get(key));
+                }
+            }
+            URI uri = builder.build();
+ 
+            // 创建http GET请求
+            HttpGet httpGet = new HttpGet(uri);
+ 
+            // 执行请求
+            response = httpclient.execute(httpGet);
+            // 判断返回状态是否为200
+            if (response.getStatusLine().getStatusCode() == 200) {
+                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (response != null) {
+                    response.close();
+                }
+                httpclient.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return resultString;
+    }
+
+    public static String doGet(String url, Map<String, String> param, String token) {
+        // 创建Httpclient对象
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        String resultString = "";
+        CloseableHttpResponse response = null;
+
+        try {
+            // 创建uri
+            URIBuilder builder = new URIBuilder(url);
+            if (param != null) {
+                for (String key : param.keySet()) {
+                    builder.addParameter(key, param.get(key));
+                }
+            }
+            URI uri = builder.build();
+
+            // 创建http GET请求
+            HttpGet httpGet = new HttpGet(uri);
+
+            // 设置认证信息到请求头
+            httpGet.setHeader("Authorization", "Bearer " + token);
+
+            // 执行请求
+            response = httpclient.execute(httpGet);
+
+            // 判断返回状态是否为200
+            if (response.getStatusLine().getStatusCode() == 200) {
+                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (response != null) {
+                    response.close();
+                }
+                httpclient.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return resultString;
+    }
+
+    public static String doGet(String url) {
+        return doGet(url, null);
+    }
+ 
+    public static String doPost(String url, Map<String, String> param) {
+        // 创建Httpclient对象
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        String resultString = "";
+        try {
+            // 创建Http Post请求
+            HttpPost httpPost = new HttpPost(url);
+            // 创建参数列表
+            if (param != null) {
+                List<NameValuePair> paramList = new ArrayList<>();
+                for (String key : param.keySet()) {
+                    paramList.add(new BasicNameValuePair(key, param.get(key)));
+                }
+                // 模拟表单
+                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"utf-8");
+                httpPost.setEntity(entity);
+            }
+            // 执行http请求
+            response = httpClient.execute(httpPost);
+            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                response.close();
+            } catch (IOException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+ 
+        return resultString;
+    }
+ 
+    public static String doPost(String url) {
+        return doPost(url, null);
+    }
+ 
+    public static String doPostJson(String url, String json) {
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        String resultString = "";
+
+        try {
+            HttpPost httpPost = new HttpPost(url);
+
+            // 添加请求头参数时间戳
+            httpPost.setHeader("timestamp", String.valueOf(System.currentTimeMillis()));
+
+            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
+            httpPost.setEntity(entity);
+
+            response = httpClient.execute(httpPost);
+            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (response != null) {
+                    response.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return resultString;
+    }
+}

+ 80 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/util/RsaUtilToken.java

@@ -0,0 +1,80 @@
+package org.springblade.system.user.util;
+
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import javax.crypto.Cipher;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyFactory;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.X509EncodedKeySpec;
+
+public final class RsaUtilToken {
+
+    /**
+     * RSA公钥加密
+     *
+     * @param data      加密字符串
+     * @param publicKey 公钥
+     * @return 密文
+     */
+    public static String encryptWithPk(String data, String publicKey) {
+        try {
+            //base64编码的公钥
+            byte[] decoded = decryptBASE64(publicKey);
+            RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
+            //RSA加密
+            Cipher cipher = Cipher.getInstance("RSA");
+            cipher.init(Cipher.ENCRYPT_MODE, pubKey);
+            return encryptBASE64(cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)));
+        } catch (Exception ex) {
+            throw new RuntimeException("数据加密处理失败(encrypt with pk)");
+        }
+    }
+
+    /**
+     * RSA公钥解密
+     *
+     * @param data      加密字符串
+     * @param publicKey 公钥
+     * @return 明文
+     */
+    public static String decryptWithPk(String data, String publicKey) {
+        try {
+            //64位解码加密后的字符串
+            byte[] inputByte = decryptBASE64(data);
+            //base64编码的私钥
+            byte[] decoded = decryptBASE64(publicKey);
+            RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
+            //RSA解密
+            Cipher cipher = Cipher.getInstance("RSA");
+            cipher.init(Cipher.DECRYPT_MODE, pubKey);
+            return new String(cipher.doFinal(inputByte));
+        } catch (Exception ex) {
+            throw new RuntimeException("数据解析处理失败(decrypt with pk)");
+        }
+    }
+
+    /**
+     * 编码返回字符串
+     */
+    private static String encryptBASE64(byte[] key) {
+        try {
+            return (new BASE64Encoder()).encodeBuffer(key);
+        } catch (Exception ex) {
+            throw new RuntimeException("编码返回字符串失败");
+        }
+    }
+
+    /**
+     * 解码返回byte
+     */
+    private static byte[] decryptBASE64(String key) {
+        try {
+            return (new BASE64Decoder()).decodeBuffer(key);
+        } catch (Exception ex) {
+            throw new RuntimeException("解码返回byte失败");
+        }
+    }
+
+}

+ 209 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/util/RsaUtils.java

@@ -0,0 +1,209 @@
+package org.springblade.system.user.util;
+
+import javax.crypto.Cipher;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyFactory;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.SecureRandom;
+import java.security.interfaces.RSAPrivateKey;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+public final class RsaUtils {
+    /**
+     * 密钥长度 于原文长度对应 以及越长速度越慢
+     */
+    private final static int KEY_SIZE = 512;
+
+    /**
+     * 随机生成密钥对
+     */
+    public static Map<String, String> createKeyPair() {
+        try {
+            Map<String, String> keyMap = new HashMap<>(2);
+            // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
+            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
+            // 初始化密钥对生成器
+            keyPairGen.initialize(KEY_SIZE, new SecureRandom());
+            // 生成一个密钥对,保存在keyPair中
+            KeyPair keyPair = keyPairGen.generateKeyPair();
+            // 得到私钥
+            RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
+            // 得到公钥
+            RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
+            String publicKeyString = encryptBASE64(publicKey.getEncoded());
+            // 得到私钥字符串
+            String privateKeyString = encryptBASE64(privateKey.getEncoded());
+            // 将公钥和私钥保存到Map
+            keyMap.put("pk", publicKeyString);
+            keyMap.put("sk", privateKeyString);
+            return keyMap;
+        } catch (Exception ex) {
+            throw new RuntimeException("密钥对生成失败");
+        }
+    }
+
+    /**
+     * RSA公钥加密
+     *
+     * @param data      加密字符串
+     * @param publicKey 公钥
+     * @return 密文
+     */
+    public static String encryptWithPk(String data, String publicKey) {
+        try {
+            //base64编码的公钥
+            byte[] decoded = decryptBASE64(publicKey);
+            RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
+            //RSA加密
+            Cipher cipher = Cipher.getInstance("RSA");
+            cipher.init(Cipher.ENCRYPT_MODE, pubKey);
+            return encryptBASE64(cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)));
+        } catch (Exception ex) {
+            throw new RuntimeException("数据加密处理失败(encrypt with pk)");
+        }
+    }
+
+    /**
+     * RSA公钥解密
+     *
+     * @param data      加密字符串
+     * @param publicKey 公钥
+     * @return 明文
+     */
+    public static String decryptWithPk(String data, String publicKey) {
+        try {
+            //64位解码加密后的字符串
+            byte[] inputByte = decryptBASE64(data);
+            //base64编码的私钥
+            byte[] decoded = decryptBASE64(publicKey);
+            RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
+            //RSA解密
+            Cipher cipher = Cipher.getInstance("RSA");
+            cipher.init(Cipher.DECRYPT_MODE, pubKey);
+            return new String(cipher.doFinal(inputByte));
+        } catch (Exception ex) {
+            throw new RuntimeException("数据解析处理失败(decrypt with pk)");
+        }
+    }
+
+    /**
+     * RSA私钥加密
+     *
+     * @param data       加密字符串
+     * @param privateKey 私钥
+     * @return 密文
+     */
+    public static String encryptWithSk(String data, String privateKey) {
+        try {
+            //base64编码的公钥
+            byte[] decoded = decryptBASE64(privateKey);
+            RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
+            //RSA加密
+            Cipher cipher = Cipher.getInstance("RSA");
+            cipher.init(Cipher.ENCRYPT_MODE, priKey);
+            return encryptBASE64(cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)));
+        } catch (Exception ex) {
+            throw new RuntimeException("数据加密处理失败(encrypt with sk)");
+        }
+    }
+
+    /**
+     * RSA私钥解密
+     *
+     * @param data       加密字符串
+     * @param privateKey 私钥
+     * @return 明文
+     */
+    public static String decryptWithSk(String data, String privateKey) {
+        try {
+            //64位解码加密后的字符串
+            byte[] inputByte = decryptBASE64(data);
+            //base64编码的私钥
+            byte[] decoded = decryptBASE64(privateKey);
+            RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
+            //RSA解密
+            Cipher cipher = Cipher.getInstance("RSA");
+            cipher.init(Cipher.DECRYPT_MODE, priKey);
+            return new String(cipher.doFinal(inputByte));
+        } catch (Exception ex) {
+            throw new RuntimeException("数据解析处理失败(decrypt with sk)");
+        }
+    }
+
+    /**
+     * 编码返回字符串
+     */
+    private static String encryptBASE64(byte[] key) {
+        try {
+            return Base64.getEncoder().encodeToString(key);
+        } catch (Exception ex) {
+            throw new RuntimeException("编码返回字符串失败");
+        }
+    }
+
+    /**
+     * 解码返回byte
+     */
+    private static byte[] decryptBASE64(String key) {
+        try {
+
+            return Base64.getDecoder().decode(key);
+        } catch (Exception ex) {
+            throw new RuntimeException("解码返回byte失败");
+        }
+    }
+
+    /*private static void testCreateKeyPair() {
+        //生成公钥和私钥
+        Map<String, String> keyMap = createKeyPair();
+        //加密字符串
+        long temp = System.currentTimeMillis();
+        System.out.println("公钥:" + keyMap.get("pk"));
+        System.out.println("私钥:" + keyMap.get("sk"));
+        System.out.println("生成密钥消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+
+        String message = "RSA测试aaa";
+        System.out.println("原文:" + message);
+        System.out.println("--------------------------------------");
+        temp = System.currentTimeMillis();
+        String messagePEn = encryptWithPk(message, keyMap.get("pk"));
+        System.out.println("密文:" + messagePEn);
+        System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+
+        temp = System.currentTimeMillis();
+        String messageSDe = decryptWithSk(messagePEn, keyMap.get("sk"));
+        System.out.println("解密:" + messageSDe);
+        System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+        System.out.println("--------------------------------------");
+
+        temp = System.currentTimeMillis();
+        String messageSEn = encryptWithSk(message, keyMap.get("sk"));
+        System.out.println("密文:" + messageSEn);
+        System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+
+        temp = System.currentTimeMillis();
+        String messagePDe = decryptWithPk(messageSEn, keyMap.get("pk"));
+        System.out.println("解密:" + messagePDe);
+        System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+    }
+
+    public static void main(String[] args) throws Exception {
+        testCreateKeyPair();
+        String pk = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALZL9pOjNpDs1wu15o8xmoeNg4YGCUO5zoLrKiGlmFl7\\r\\nCKXKwJ83pDmu/bE4Szf2RAyzwr33bViqoNH45/EaCrECAwEAAQ==\\r\\n";
+        System.out.println(encryptWithPk("admin", pk));
+        System.out.println(encryptWithPk("admin123", pk));
+
+        String str1 = Base64.getEncoder().encodeToString(pk.getBytes());
+        String str2 = (new BASE64Encoder()).encodeBuffer(pk.getBytes());
+        System.out.println("# " + str1);
+        System.out.println("# " + str2);
+        System.out.println(str1.equals(str2));
+    }*/
+
+}