From 1d83907924ef4209f03f644f59f69b09e30a929c Mon Sep 17 00:00:00 2001 From: zhangyanduan Date: Wed, 21 Sep 2022 17:06:26 +0800 Subject: [PATCH 1/4] =?UTF-8?q?add:=20=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=95=B0=E6=8D=AE=E6=8E=A5=E6=94=B6=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SarModelTreeController.java | 15 +- .../sarModelTree/entity/ResponseResult.java | 25 ++ .../sarModelTree/entity/SarModuleTree.java | 28 +- .../service/ISarModelTreeService.java | 5 +- .../service/ISarModuleTreeService.java | 1 + .../service/impl/SarModelTreeServiceImpl.java | 273 +++++++++++++++++- .../impl/SarModuleTreeServiceImpl.java | 5 +- 7 files changed, 344 insertions(+), 8 deletions(-) diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/controller/SarModelTreeController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/controller/SarModelTreeController.java index 0d30200b..253362b8 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/controller/SarModelTreeController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/controller/SarModelTreeController.java @@ -3,13 +3,14 @@ package com.adc.da.slrs.sarModelTree.controller; import com.adc.da.http.ResponseMessage; import com.adc.da.http.Result; -import com.adc.da.slrs.sarModelTree.entity.SarModuleTree; import com.adc.da.slrs.sarModelTree.service.ISarModelTreeService; import com.adc.da.slrs.sarModelTree.service.ISarModuleTreeService; import com.adc.da.slrs.sarStandProjectLibrary.entity.myResponse.Head; import com.adc.da.slrs.sarStandProjectLibrary.entity.myResponse.ResponseDto; import com.adc.da.util.utils.StringUtils; import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.adc.da.slrs.sarModelTree.entity.SarModelTree; @@ -31,6 +32,9 @@ import java.util.List; @RequestMapping("/${restPath}/sarModelTree") public class SarModelTreeController extends BaseController { + private static final Logger logger = LoggerFactory.getLogger(SarModelTreeController.class); + + @Autowired private ISarModelTreeService iSarModelTreeService; @@ -82,6 +86,13 @@ public class SarModelTreeController extends BaseController { return responseDto; } - + @ApiOperation("同步模块单元信息") + @PostMapping("/syncModelDto") + public ResponseDto syncModelDto(@RequestBody String jsonStr){ + logger.info("===========================开始接收模块单元数据=================================="); + ResponseDto responseDto = iSarModelTreeService.syncModelTreeDataToDB(jsonStr); + logger.info("===========================接收模块单元数据结束=================================="); + return responseDto; + } } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/entity/ResponseResult.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/entity/ResponseResult.java index 4140a8fc..dbcf6612 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/entity/ResponseResult.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/entity/ResponseResult.java @@ -9,4 +9,29 @@ public class ResponseResult { private String MESSAGE; //接口信息 失败时,详细的失败原因 private String STATUS; //接口状态 B(失败),S(成功) + + + public String getGUID() { + return GUID; + } + + public void setGUID(String GUID) { + this.GUID = GUID; + } + + public String getMESSAGE() { + return MESSAGE; + } + + public void setMESSAGE(String MESSAGE) { + this.MESSAGE = MESSAGE; + } + + public String getSTATUS() { + return STATUS; + } + + public void setSTATUS(String STATUS) { + this.STATUS = STATUS; + } } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/entity/SarModuleTree.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/entity/SarModuleTree.java index 227dc6d1..10d485f1 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/entity/SarModuleTree.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/entity/SarModuleTree.java @@ -10,62 +10,76 @@ import lombok.Data; @TableName("sar_module_tree") public class SarModuleTree { + //序列号 @SerializedName("GUID") @TableId private String guid; + + //系统 @SerializedName("FTVSTYPE1") @TableField("FTVSTYPE1") private String ftvstype1; - + //模块团队代号 @SerializedName("FTVSTYPE2") @TableField("FTVSTYPE2") private String ftvstype2; - + //模块团队名称 @SerializedName("FTVSTYPE3") @TableField("FTVSTYPE3") private String ftvstype3; + //模块结构家族SF @SerializedName("FTVSTYPE4") @TableField("FTVSTYPE4") private String ftvstype4; + //模块结构元素SE @SerializedName("FTVSTYPE5") @TableField("FTVSTYPE5") private String ftvstype5; + //结构单元SU @SerializedName("FTVSTYPE6") @TableField("FTVSTYPE6") private String ftvstype6; + //功能分组码VSG @SerializedName("FTVSTYPE7") @TableField("FTVSTYPE7") private String ftvstype7; + //关联特征族代号(驱动要素) @SerializedName("FTVSTYPE9") @TableField("FTVSTYPE9") private String ftvstype9; + //是否需要额外描述 @SerializedName("ACLUSERNAMES") @TableField("ACLUSERNAMES") private String aclusernames; + //操作人 @SerializedName("CREATOR") @TableField("CREATOR") private String creator; + //SF_ID @SerializedName("SERIESID") @TableField("SERIESID") private String seriesid; //SF_ID + //SE_ID @SerializedName("RESERVED") @TableField("RESERVED") private String reserved; //SE_ID + //SU_ID @SerializedName("STARTED") @TableField("STARTED") private String started; //SU_ID + //操作时间 @SerializedName("CREATIONDATE") @TableField("CREATIONDATE") private String creationdate; @@ -79,4 +93,14 @@ public class SarModuleTree { @TableField(exist = false) private String nextCondition; + //列ID + @SerializedName("ROWID") + @TableField(exist = false) + private String rowId; + + //产品线分类 + @SerializedName("PRODUCTTYPE") + @TableField(exist = false) + private String productType; + } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/ISarModelTreeService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/ISarModelTreeService.java index e17248c0..68469327 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/ISarModelTreeService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/ISarModelTreeService.java @@ -1,7 +1,7 @@ package com.adc.da.slrs.sarModelTree.service; import com.adc.da.slrs.sarModelTree.entity.SarModelTree; -import com.adc.da.slrs.sarVppsTree.entity.SarVppsTree; +import com.adc.da.slrs.sarStandProjectLibrary.entity.myResponse.ResponseDto; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -19,4 +19,7 @@ public interface ISarModelTreeService extends IService { List getAll(SarModelTree sarModelTree); List recursionGetChildren(SarModelTree parent); + + public ResponseDto syncModelTreeDataToDB(String json); + } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/ISarModuleTreeService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/ISarModuleTreeService.java index 44254478..14941c85 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/ISarModuleTreeService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/ISarModuleTreeService.java @@ -14,4 +14,5 @@ public interface ISarModuleTreeService { public Head analysisJsonAndStorage(String json); + } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/impl/SarModelTreeServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/impl/SarModelTreeServiceImpl.java index ca1a9a16..accf3622 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/impl/SarModelTreeServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/impl/SarModelTreeServiceImpl.java @@ -1,16 +1,29 @@ package com.adc.da.slrs.sarModelTree.service.impl; -import com.adc.da.slrs.sarModelTree.entity.SarModelTree; +import com.adc.da.slrs.sarModelTree.entity.*; import com.adc.da.slrs.sarModelTree.dao.SarModelTreeDao; import com.adc.da.slrs.sarModelTree.service.ISarModelTreeService; +import com.adc.da.slrs.sarStandProjectLibrary.entity.myResponse.Head; +import com.adc.da.slrs.sarStandProjectLibrary.entity.myResponse.ResponseDto; +import com.adc.da.util.UUIDUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; -import java.util.stream.Stream; /** *

@@ -23,6 +36,8 @@ import java.util.stream.Stream; @Service public class SarModelTreeServiceImpl extends ServiceImpl implements ISarModelTreeService { + private static final Logger logger = LoggerFactory.getLogger(SarModelTreeServiceImpl.class); + /** * 查询所有菜单 * @param sarModelTree @@ -94,4 +109,258 @@ public class SarModelTreeServiceImpl extends ServiceImpl resultList = new ArrayList<>(); + try{ + //把字符串转换成对象 + JsonObject parse = JsonParser.parseString(json).getAsJsonObject(); + //要把jsonObject里的HEAD强转成JsonObject类型 + JsonObject HEAD = (JsonObject) parse.get("HEAD"); + //因为是最后要取的值了,所以就拿到之后把它转换成String类型 + HEAD.get("CONSUMER").getAsString(); + //构建head头信息 + head.setBIZTRANSACTIONID(HEAD.get("BIZTRANSACTIONID").getAsString()); + + //获取json中的list + JsonArray list = (JsonArray)parse.get("LIST"); + Gson gson = new Gson(); + List moduleTreeList = new LinkedList<>(); + + AtomicInteger successCount = new AtomicInteger(); + + list.forEach(item->{ + JsonObject objectJson=(JsonObject) item; + SarModuleTree sarModuleTree = gson.fromJson(objectJson, SarModuleTree.class); + //返回结果集 + + String pName = sarModuleTree.getFtvstype1(); + String p2Name = sarModuleTree.getFtvstype2(); + String p3Name = sarModuleTree.getFtvstype3(); + String p4Name = sarModuleTree.getFtvstype4(); + String p5Name = sarModuleTree.getFtvstype5(); + String p6Name = sarModuleTree.getFtvstype6(); + String jgysName = sarModuleTree.getFtvstype9(); + String modelType = sarModuleTree.getProductType(); + if(StringUtils.equals(modelType,"f0_mssg")){ + modelType ="TRUCK";//卡车类 + }else{ + modelType ="CAR";//乘用车类 + } + if(StringUtils.isNotBlank(pName)){ + QueryWrapper queryP1Wrapper = new QueryWrapper<>(); + queryP1Wrapper.eq("NAME",pName); + queryP1Wrapper.eq("MODEL_TYPE",modelType); + queryP1Wrapper.eq("MODEL_LEVEL",1); + queryP1Wrapper.eq("MODEL_PID",rootId); + queryP1Wrapper.eq("DEL_FLAG","1"); + List p1TreeDataList = this.baseMapper.selectList(queryP1Wrapper); + SarModelTree p1TreeData = null; + if (p1TreeDataList !=null && !p1TreeDataList.isEmpty()) { + p1TreeData = p1TreeDataList.get(0); + p1TreeData.setModel(pName); + p1TreeData.setModelLevel(1); + p1TreeData.setModelPid(rootId); + p1TreeData.setModelType(modelType); + p1TreeData.setName(pName); + p1TreeData.setPid(rootPID); + p1TreeData.setDelFlag("1"); + p1TreeData.setHasChildren("1"); + this.baseMapper.updateById(p1TreeData); + }else{ + p1TreeData = new SarModelTree(); + p1TreeData.setId(UUIDUtils.randomUUID(20)); + p1TreeData.setModel(pName); + p1TreeData.setModelLevel(1); + p1TreeData.setModelPid(rootId); + p1TreeData.setModelType(modelType); + p1TreeData.setName(pName); + p1TreeData.setPid(rootPID); + p1TreeData.setDelFlag("1"); + p1TreeData.setHasChildren("1"); + this.baseMapper.insert(p1TreeData); + } + + if(StringUtils.isNotBlank(p2Name)){ + QueryWrapper queryP2Wrapper = new QueryWrapper<>(); + queryP2Wrapper.eq("NAME",pName); + queryP2Wrapper.eq("MODEL_TYPE",modelType); + queryP2Wrapper.eq("MODEL_LEVEL",1); + queryP2Wrapper.eq("MODEL_PID",rootId); + queryP2Wrapper.eq("DEL_FLAG","1"); + List p2TreeDataList = this.baseMapper.selectList(queryP2Wrapper); + SarModelTree p2TreeData = null; + if (p2TreeDataList !=null && !p2TreeDataList.isEmpty()) { + p2TreeData = p2TreeDataList.get(0); + p2TreeData.setModel(p3Name); + p2TreeData.setModelLevel(2); + p2TreeData.setModelPid(p1TreeData.getId()); + p2TreeData.setModelType(modelType); + p2TreeData.setName(p2Name); + p2TreeData.setPid(p1TreeData.getName()); + p2TreeData.setDelFlag("1"); + p2TreeData.setHasChildren("1"); + this.baseMapper.updateById(p2TreeData); + }else{ + p2TreeData = new SarModelTree(); + p2TreeData.setId(UUIDUtils.randomUUID(20)); + p2TreeData.setModel(p3Name); + p2TreeData.setModelLevel(2); + p2TreeData.setModelPid(p1TreeData.getId()); + p2TreeData.setModelType(modelType); + p2TreeData.setName(p2Name); + p2TreeData.setPid(p1TreeData.getName()); + p2TreeData.setDelFlag("1"); + p2TreeData.setHasChildren("1"); + this.baseMapper.insert(p2TreeData); + } + + if(StringUtils.isNotBlank(p3Name)){ + QueryWrapper queryP3Wrapper = new QueryWrapper<>(); + queryP3Wrapper.eq("NAME",pName); + queryP3Wrapper.eq("MODEL_TYPE",modelType); + queryP3Wrapper.eq("MODEL_LEVEL",1); + queryP3Wrapper.eq("MODEL_PID",rootId); + queryP3Wrapper.eq("DEL_FLAG","1"); + List p3TreeDataList = this.baseMapper.selectList(queryP3Wrapper); + SarModelTree p3TreeData = null; + + if (p3TreeDataList !=null && !p3TreeDataList.isEmpty()) { + p3TreeData = p3TreeDataList.get(0); + p3TreeData.setModel(p4Name); + p3TreeData.setModelLevel(3); + p3TreeData.setModelPid(p2TreeData.getId()); + p3TreeData.setModelType(modelType); + p3TreeData.setName(p4Name); + p3TreeData.setPid(p2TreeData.getName()); + p3TreeData.setDelFlag("1"); + p3TreeData.setHasChildren("1"); + this.baseMapper.updateById(p3TreeData); + }else{ + p3TreeData = new SarModelTree(); + p3TreeData.setId(UUIDUtils.randomUUID(20)); + p3TreeData.setModel(p4Name); + p3TreeData.setModelLevel(3); + p3TreeData.setModelPid(p2TreeData.getId()); + p3TreeData.setModelType(modelType); + p3TreeData.setName(p4Name); + p3TreeData.setPid(p2TreeData.getName()); + p3TreeData.setDelFlag("1"); + p3TreeData.setHasChildren("1"); + this.baseMapper.insert(p3TreeData); + } + + if(StringUtils.isNotBlank(p4Name)){ + QueryWrapper queryP4Wrapper = new QueryWrapper<>(); + queryP4Wrapper.eq("NAME",pName); + queryP4Wrapper.eq("MODEL_TYPE",modelType); + queryP4Wrapper.eq("MODEL_LEVEL",1); + queryP4Wrapper.eq("MODEL_PID",rootId); + queryP4Wrapper.eq("DEL_FLAG","1"); + List p4TreeDataList = this.baseMapper.selectList(queryP4Wrapper); + SarModelTree p4TreeData = null; + + if (p4TreeDataList !=null && !p4TreeDataList.isEmpty()) { + p4TreeData = p4TreeDataList.get(0); + p4TreeData.setModel(p5Name); + p4TreeData.setModelLevel(4); + p4TreeData.setModelPid(p3TreeData.getId()); + p4TreeData.setModelType(modelType); + p4TreeData.setName(p5Name); + p4TreeData.setPid(p3TreeData.getName()); + p4TreeData.setDelFlag("1"); + p4TreeData.setHasChildren("1"); + this.baseMapper.updateById(p4TreeData); + }else{ + p4TreeData = new SarModelTree(); + p4TreeData.setId(UUIDUtils.randomUUID(20)); + p4TreeData.setModel(p5Name); + p4TreeData.setModelLevel(4); + p4TreeData.setModelPid(p3TreeData.getId()); + p4TreeData.setModelType(modelType); + p4TreeData.setName(p5Name); + p4TreeData.setPid(p3TreeData.getName()); + p4TreeData.setDelFlag("1"); + p4TreeData.setHasChildren("1"); + this.baseMapper.insert(p4TreeData); + } + + if(StringUtils.isNotBlank(p5Name)){ + QueryWrapper queryP5Wrapper = new QueryWrapper<>(); + queryP5Wrapper.eq("NAME",pName); + queryP5Wrapper.eq("MODEL_TYPE",modelType); + queryP5Wrapper.eq("MODEL_LEVEL",1); + queryP5Wrapper.eq("MODEL_PID",rootId); + queryP5Wrapper.eq("DEL_FLAG","1"); + List p5TreeDataList = this.baseMapper.selectList(queryP5Wrapper); + SarModelTree p5TreeData = null; + + if (p5TreeDataList !=null && !p5TreeDataList.isEmpty()) { + p5TreeData = p5TreeDataList.get(0); + p5TreeData.setModel(p6Name); + p5TreeData.setModelLevel(5); + p5TreeData.setModelPid(p4TreeData.getId()); + p5TreeData.setModelType(modelType); + p5TreeData.setName(p6Name); + p5TreeData.setPid(p4TreeData.getName()); + p5TreeData.setFeatures(jgysName); + p5TreeData.setDelFlag("1"); + p5TreeData.setHasChildren("1"); + this.baseMapper.updateById(p5TreeData); + }else{ + p5TreeData = new SarModelTree(); + p5TreeData.setId(UUIDUtils.randomUUID(20)); + p5TreeData.setModel(p6Name); + p5TreeData.setModelLevel(5); + p5TreeData.setModelPid(p4TreeData.getId()); + p5TreeData.setModelType(modelType); + p5TreeData.setName(p6Name); + p5TreeData.setPid(p4TreeData.getName()); + p5TreeData.setFeatures(jgysName); + p5TreeData.setDelFlag("1"); + p5TreeData.setHasChildren("1"); + this.baseMapper.insert(p5TreeData); + } + } + } + } + } + } + successCount.getAndIncrement(); + }); + head.setERRORCODE("0"); + head.setRESULT("成功"); + ResponseResult returnData = new ResponseResult(); + returnData.setGUID("-1"); + returnData.setMESSAGE(""); + returnData.setSTATUS("S"); + resultList.add(returnData); + ResponseDto dto = new ResponseDto(head,resultList); + return dto; + }catch (Exception ex){ + logger.error(ex.getMessage(),ex); + head.setERRORCODE("2"); + head.setRESULT("业务失败需要重做"); + ResponseResult returnData = new ResponseResult(); + returnData.setGUID("-1"); + returnData.setMESSAGE("数据写入过程中发生错误,需重新推送"); + returnData.setSTATUS("E"); + resultList.add(returnData); + ResponseDto dto = new ResponseDto(head,resultList); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return dto; + } + + } + + + } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/impl/SarModuleTreeServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/impl/SarModuleTreeServiceImpl.java index e5119153..82459152 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/impl/SarModuleTreeServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarModelTree/service/impl/SarModuleTreeServiceImpl.java @@ -128,7 +128,7 @@ public class SarModuleTreeServiceImpl extends ServiceImpl对修改关闭,对扩展开放 From ca3f48c207e69a4db11858e7ba3176290501b052 Mon Sep 17 00:00:00 2001 From: zhangyanduan Date: Wed, 21 Sep 2022 17:08:43 +0800 Subject: [PATCH 2/4] =?UTF-8?q?add:=20=E5=A2=9E=E5=8A=A0=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=E7=99=BD=E5=90=8D=E5=8D=95=20syncModelDto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/adc/da/login/security/WebMvcConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java index 638172e0..85a82ac0 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java @@ -64,6 +64,8 @@ public class WebMvcConfig implements WebMvcConfigurer { addInterceptor.excludePathPatterns("/api/sar-stand-project-team/save"); //tc模块结构单元数据 addInterceptor.excludePathPatterns("/api/sarModelTree/save"); + //PLM系统通过ESB推送模块单元数据 + addInterceptor.excludePathPatterns("/api/sarModelTree/syncModelDto"); //同步用户数据 addInterceptor.excludePathPatterns("/api/DataSync/importUserData"); //同步组织机构数据 From 89f6240481429718982bf83b7001bc514bda4295 Mon Sep 17 00:00:00 2001 From: zyd Date: Wed, 21 Sep 2022 22:59:52 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=E4=BC=98=E5=8C=96=E6=9C=BA=E6=9E=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7=E9=80=9F=E5=BA=A6=E6=85=A2?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../slrs/sarPosition/dao/TsPositionDao.java | 6 + .../service/ITsPositionService.java | 6 + .../service/impl/TsPositionServiceImpl.java | 10 ++ .../adc/da/slrs/sarUser/dao/TsUserDao.java | 4 + .../adc/da/slrs/sarUser/entity/TsUser.java | 4 + .../service/impl/TsUserServiceImpl.java | 108 +++++++++++------- .../mapper/sarPosition/TsPositionMapper.xml | 7 ++ .../mybatis/mapper/sarUser/TsUserMapper.xml | 30 ++--- doc/sql/20220921-用户组织机构查询优化.sql | 1 + 9 files changed, 111 insertions(+), 65 deletions(-) create mode 100644 doc/sql/20220921-用户组织机构查询优化.sql diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/dao/TsPositionDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/dao/TsPositionDao.java index 8f0f9f1d..2708d80b 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/dao/TsPositionDao.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/dao/TsPositionDao.java @@ -51,6 +51,12 @@ public interface TsPositionDao extends BaseMapper { */ List getRole(String positionId); + /** + * 根据用户ID获取岗位信息 + * @param userId + * @return + */ + List getPositionDataByUserId(@Param("userId") String userId); /** * 查询岗位以及绑定的角色信息 * @param tsPosition:岗位信息 diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/ITsPositionService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/ITsPositionService.java index 6089e2b4..87932f8c 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/ITsPositionService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/ITsPositionService.java @@ -40,6 +40,12 @@ public interface ITsPositionService extends IService { */ List getRole(String positionId); + /** + * 根据用户ID获取岗位信息 + * @param userId + * @return + */ + List getPositionDataByUserId(String userId); /** * 添加岗位 * @param tsPosition:岗位信息 diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/impl/TsPositionServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/impl/TsPositionServiceImpl.java index d912d7a3..60489696 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/impl/TsPositionServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarPosition/service/impl/TsPositionServiceImpl.java @@ -108,6 +108,16 @@ public class TsPositionServiceImpl extends ServiceImpl getPositionDataByUserId(String userId) { + return tsPositionDao.getPositionDataByUserId(userId); + } + /** * 添加岗位 * @param tsPosition:岗位信息 diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/dao/TsUserDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/dao/TsUserDao.java index c2628318..b523c42a 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/dao/TsUserDao.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/dao/TsUserDao.java @@ -26,6 +26,10 @@ public interface TsUserDao extends BaseMapper { @Select("select position_id from ts_user_position where user_id=#{userId}") List selectPositionIds(String userId); + @Update("UPDATE ts_user SET SYS_POSITION_IDS =#{positionIds} WHERE USID = #{userId}") + void updateUserPositionIds(@Param("userId") String userId,@Param("positionIds")String positionIds); + + /** * 添加岗位 * @param userId:用户ID diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/entity/TsUser.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/entity/TsUser.java index 3b2bab67..6689c537 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/entity/TsUser.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/entity/TsUser.java @@ -138,6 +138,10 @@ public class TsUser extends BaseEntity { @TableField("SSO_ID") private String ssoId; + @ApiModelProperty(value = "系统设置岗位ID集合") + @TableField("SYS_POSITION_IDS") + private String sysPositionIds; + @ApiModelProperty(value = "岗位") @TableField(exist = false) private List positions; diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/service/impl/TsUserServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/service/impl/TsUserServiceImpl.java index 721e7ecf..cb59428d 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/service/impl/TsUserServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarUser/service/impl/TsUserServiceImpl.java @@ -28,6 +28,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -135,8 +136,16 @@ public class TsUserServiceImpl extends ServiceImpl implements if(tsUser==null){ return Result.error("该用户不存在"); } + //此处更新user表中的岗位字段 + List positionIds = userPositionVO.getPositionIds(); + positionIds.removeIf(s -> null==s||""==s); + String optionsIdStr = StringUtils.join(positionIds, ","); + if(StringUtils.isBlank(optionsIdStr)){ + optionsIdStr = null; + } + tsUserDao.updateUserPositionIds(userPositionVO.getUserId(),optionsIdStr); List oldPositionIds=tsUserDao.selectPositionIds(userPositionVO.getUserId()); - Map> ids= ListUtil.difList(userPositionVO.getPositionIds(),oldPositionIds); + Map> ids= ListUtil.difList(positionIds,oldPositionIds); List insertIds=ids.get("insert"); List deleteIds=ids.get("delete"); if(insertIds!=null&&insertIds.size()>0){ @@ -163,7 +172,13 @@ public class TsUserServiceImpl extends ServiceImpl implements public ResponseMessage setPositionBatch(UserPositionBatchVO userPositionVO2) { boolean flag=true; - + //此处更新user表中的岗位字段 + List positionIds = userPositionVO2.getPositionIds(); + positionIds.removeIf(s -> null==s||""==s); + String optionsIdStr = StringUtils.join(positionIds, ","); + if(StringUtils.isBlank(optionsIdStr)){ + optionsIdStr = null; + } for (String s:userPositionVO2.getUserId()) { UserPositionVO userPositionVO=new UserPositionVO(); userPositionVO.setUserId(s); @@ -171,9 +186,11 @@ public class TsUserServiceImpl extends ServiceImpl implements TsUser tsUser=tsUserDao.selectById(userPositionVO.getUserId()); if(tsUser==null){ flag=false; + continue; } + tsUserDao.updateUserPositionIds(userPositionVO.getUserId(),optionsIdStr); List oldPositionIds=tsUserDao.selectPositionIds(userPositionVO.getUserId()); - Map> ids= ListUtil.difList(userPositionVO.getPositionIds(),oldPositionIds); + Map> ids= ListUtil.difList(positionIds,oldPositionIds); List insertIds=ids.get("insert"); List deleteIds=ids.get("delete"); if(insertIds!=null&&insertIds.size()>0){ @@ -210,6 +227,13 @@ public class TsUserServiceImpl extends ServiceImpl implements List middle=new ArrayList<>(); middle.addAll(orgIds); boolean Orgflag=true; + //此处更新user表中的岗位字段 + List positionIds = userPositionVO2.getPositionIds(); + positionIds.removeIf(s -> null==s||""==s); + String optionsIdStr = StringUtils.join(positionIds, ","); + if(StringUtils.isBlank(optionsIdStr)){ + optionsIdStr = null; + } while (Orgflag){ QueryWrapper queryWrapper=new QueryWrapper<>(); queryWrapper.in("parent_id",middle); @@ -234,25 +258,23 @@ public class TsUserServiceImpl extends ServiceImpl implements for (TsUser user : allUsers) { String userId = user.getUserId(); - UserPositionVO userPositionVO=new UserPositionVO(); - userPositionVO.setUserId(userId); - userPositionVO.setPositionIds(userPositionVO2.getPositionIds()); - TsUser tsUser=tsUserDao.selectById(userPositionVO.getUserId()); + TsUser tsUser=tsUserDao.selectById(userId); if(tsUser==null){ continue; } - List oldPositionIds=tsUserDao.selectPositionIds(userPositionVO.getUserId()); - Map> ids= ListUtil.difList(userPositionVO.getPositionIds(),oldPositionIds); + tsUserDao.updateUserPositionIds(userId,optionsIdStr); + List oldPositionIds=tsUserDao.selectPositionIds(userId); + Map> ids= ListUtil.difList(positionIds,oldPositionIds); List insertIds=ids.get("insert"); List deleteIds=ids.get("delete"); if(insertIds!=null&&insertIds.size()>0){ for(String positionId:insertIds){ - tsUserDao.addPosition(userPositionVO.getUserId(),positionId); + tsUserDao.addPosition(userId,positionId); } } if(deleteIds!=null&&deleteIds.size()>0){ for(String positionId:deleteIds){ - tsUserDao.delPosition(userPositionVO.getUserId(),positionId); + tsUserDao.delPosition(userId,positionId); } } } @@ -459,42 +481,44 @@ public class TsUserServiceImpl extends ServiceImpl implements @Override public IPage getAllUsers(TsUser tsUser) { List ids=new ArrayList<>(); - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.like("parent_id",tsUser.getInstitutionId()); - List tsmiddle=tsInstitutionService.list(queryWrapper); - if(tsmiddle!=null && !tsmiddle.isEmpty()){ - tsmiddle.forEach(tsInstitution -> { - ids.add(tsInstitution.getId()); - }); + ids.add(tsUser.getInstitutionId()); + List middle=new ArrayList<>(); + middle.addAll(ids); + boolean flag=true; + while (flag){ + QueryWrapper queryWrapper=new QueryWrapper<>(); + queryWrapper.in("parent_id",middle); + List tsmiddle=tsInstitutionService.list(queryWrapper); + if (tsmiddle.size()>0){ + tsmiddle.forEach(tsInstitution -> { + middle.add(tsInstitution.getId()); + }); + middle.removeAll(ids); + ids.addAll(middle); + }else { + tsmiddle.forEach(tsInstitution -> { + middle.add(tsInstitution.getId()); + }); + middle.removeAll(ids); + ids.addAll(middle); + flag=false; + } } -// List middle=new ArrayList<>(); -// middle.addAll(ids); -// boolean flag=true; -// while (flag){ -// QueryWrapper queryWrapper=new QueryWrapper<>(); -// queryWrapper.in("parent_id",middle); -// List tsmiddle=tsInstitutionService.list(queryWrapper); -// if (tsmiddle.size()>0){ -// tsmiddle.forEach(tsInstitution -> { -// middle.add(tsInstitution.getId()); -// }); -// middle.removeAll(ids); -// ids.addAll(middle); -// }else { -// tsmiddle.forEach(tsInstitution -> { -// middle.add(tsInstitution.getId()); -// }); -// middle.removeAll(ids); -// ids.addAll(middle); -// flag=false; -// } -// } -// ids.removeIf(s -> null==s); + ids.removeIf(s -> null==s); + List tsUsers = tsUserDao.userUnderInstitution((tsUser.getCurrent() - 1) * tsUser.getSize(), tsUser.getSize(), tsUser, ids); + if(tsUsers!=null && !tsUsers.isEmpty()){ + for (TsUser user:tsUsers) { + List positionList = tsPositionService.getPositionDataByUserId(user.getUserId()); + user.setPositions(positionList); + } + } + Page tsUserPage = new Page<>(); tsUserPage.setCurrent(tsUser.getCurrent()); tsUserPage.setSize(tsUser.getSize()); - tsUserPage.setRecords(tsUserDao.userUnderInstitution((tsUser.getCurrent()-1)*tsUser.getSize(),tsUser.getSize(),tsUser,ids)); + tsUserPage.setRecords(tsUsers); tsUserPage.setTotal(tsUserDao.userUnderInstitutionCount(tsUser,ids)); + return tsUserPage; } diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarPosition/TsPositionMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarPosition/TsPositionMapper.xml index 81f31e4b..44be1587 100644 --- a/adc-da-slrs/src/main/resources/mybatis/mapper/sarPosition/TsPositionMapper.xml +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarPosition/TsPositionMapper.xml @@ -17,6 +17,7 @@ + + + select u.USID,u.ACCOUNT,u.PASSWORD,u.OPER_USER,u.UNAME,u.SEX,u.USER_SOURCE,u.PHONE,u.EMAIL,u.INSTITUTION_NAME,u.INSTITUTION_ID ,u.POSITION_NAME,u.STATE,u.POSITION_ID,u.WORK_NUM,u.EXT_INFO,u.CREATION_TIME,u.MODIFY_TIME,u.VALID_FLAG - ,u.DISABLE_FLAG,u.UNLOCK_FLAG,u.USER_TYPE,u.SSO_ID, - p.id p_id,p.name p_name from ts_user u - left join ts_user_position up - on u.usid=up.user_id - left join ts_position p - on up.position_id=p.id + ,u.DISABLE_FLAG,u.UNLOCK_FLAG,u.USER_TYPE,u.SSO_ID,u.SYS_POSITION_IDS + from ts_user u where 1=1 and INSTITUTION_ID in @@ -76,12 +73,7 @@ select count(u.USID) from ts_user u - left join ts_user_position up - on u.usid=up.user_id - left join ts_position p - on up.position_id=p.id where 1=1 and u.institution_id=#{TsUser.institutionId} diff --git a/doc/sql/20220921-用户组织机构查询优化.sql b/doc/sql/20220921-用户组织机构查询优化.sql new file mode 100644 index 00000000..aa9033fe --- /dev/null +++ b/doc/sql/20220921-用户组织机构查询优化.sql @@ -0,0 +1 @@ +ALTER TABLE `ts_user` ADD COLUMN `SYS_POSITION_IDS` varchar(2000) NULL COMMENT '设置的岗位ID集合' AFTER `SSO_ID`; \ No newline at end of file From 1de8e4899643b105b2634775b70e7ead4ec7f2a9 Mon Sep 17 00:00:00 2001 From: zyd Date: Thu, 22 Sep 2022 00:44:10 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E5=B8=A6=E6=B0=B4?= =?UTF-8?q?=E5=8D=B0=E4=B8=8B=E8=BD=BD=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/adc/da/util/WaterMarkUtil.java | 86 +++++++++++++++++++ .../att/controller/AttFileEOController.java | 2 +- 2 files changed, 87 insertions(+), 1 deletion(-) diff --git a/adc-da-base/src/main/java/com/adc/da/util/WaterMarkUtil.java b/adc-da-base/src/main/java/com/adc/da/util/WaterMarkUtil.java index 1d30a8aa..b56ff5ec 100644 --- a/adc-da-base/src/main/java/com/adc/da/util/WaterMarkUtil.java +++ b/adc-da-base/src/main/java/com/adc/da/util/WaterMarkUtil.java @@ -4,7 +4,12 @@ import com.itextpdf.text.BaseColor; import com.itextpdf.text.Element; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import javax.swing.*; +import java.awt.*; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.lang.reflect.Field; @@ -15,6 +20,8 @@ import java.lang.reflect.Field; */ public class WaterMarkUtil { + private static final Logger logger = LoggerFactory.getLogger(WaterMarkUtil.class); + /** * @param inputFile 你的PDF文件地址 * @param outputFile 添加水印后生成PDF存放的地址 @@ -78,4 +85,83 @@ public class WaterMarkUtil { } } + + + public static boolean waterMarkNew(String inputFile, String outputFile, String waterMarkName) { + try { + logger.debug("水印追加文件:"+inputFile+" "+outputFile); + FileInputStream is = new FileInputStream(inputFile); + PdfReader reader = new PdfReader(is); + Field f = PdfReader.class.getDeclaredField("encrypted"); + f.setAccessible(true); + f.set(reader, Boolean.FALSE); + PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile)); + + // 获取总页数 +1, 下面从1开始遍历 + int total = reader.getNumberOfPages() + 1; + //这里的字体设置比较关键,这个设置是支持中文的写法 + BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体 + + // 间隔 + int interval = 5; + // 获取水印文字的高度和宽度 + int textH = 0, textW = 0; + JLabel label = new JLabel(); + label.setText(waterMarkName); + FontMetrics metrics = label.getFontMetrics(label.getFont()); + textH = metrics.getHeight(); + textW = metrics.stringWidth(label.getText()); + + // 设置水印透明度 + PdfGState gs = new PdfGState(); + gs.setFillOpacity(0.2f); + gs.setStrokeOpacity(0.2f); + + Rectangle pageSizeWithRotation = null; + PdfContentByte content = null; + for (int i = 1; i < total; i++) { + // 在内容上方加水印 + content = stamper.getOverContent(i); + // 在内容下方加水印 + // content = stamper.getUnderContent(i); + content.saveState(); + content.setGState(gs); + + // 设置字体和字体大小 + content.beginText(); + content.setFontAndSize(base, 19); + + // 获取每一页的高度、宽度 + pageSizeWithRotation = reader.getPageSizeWithRotation(i); + float pageHeight = pageSizeWithRotation.getHeight(); + float pageWidth = pageSizeWithRotation.getWidth(); + int parityNum = 0; + // 根据纸张大小多次添加, 水印文字成30度角倾斜 + for (int height = interval + textH; height < pageHeight; height = height + textH * 6) { + parityNum ++; + for (int width = interval + textW; width < pageWidth + textW; width = width + textW * 2) { + if(parityNum%2==0){ + width= width + 50; + height = height +50; + content.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW, height - textH, 30); + }else{ + content.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW, height - textH, 30); + } + + } + } + + content.endText(); + } + + // 关流 + stamper.close(); + reader.close(); + return true; + } catch (Exception e) { + logger.error(e.getMessage(),e); + return false; + } + } + } diff --git a/adc-da-sys/src/main/java/com/adc/da/att/controller/AttFileEOController.java b/adc-da-sys/src/main/java/com/adc/da/att/controller/AttFileEOController.java index 91709a12..79754c64 100644 --- a/adc-da-sys/src/main/java/com/adc/da/att/controller/AttFileEOController.java +++ b/adc-da-sys/src/main/java/com/adc/da/att/controller/AttFileEOController.java @@ -441,7 +441,7 @@ public class AttFileEOController { String waterContent = userMsg; //2020年9月5日 去掉水印处理 //2021年7月25日要求下载生成水印 - WaterMarkUtil.waterMark(oldFilePath,waterFilePath,waterContent); + WaterMarkUtil.waterMarkNew(oldFilePath,waterFilePath,waterContent); response.setHeader("Content-Disposition", "attachment;filename=\""+fileOldName+"\""); response.setContentType("application/octet-stream");