Forráskód Böngészése

新增根据对象id集合查询classCode接口

lijie 3 éve
szülő
commit
260f7223dd

+ 20 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java

@@ -30,6 +30,7 @@ import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
 import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
+import com.persagy.dmp.rwd.basic.constant.BusinessErrorRwdCode;
 import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
 import com.persagy.dmp.rwd.basic.constant.DigitalRelCode;
 import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
@@ -45,6 +46,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -158,6 +160,24 @@ public class ObjectDigitalController{
         voList = service.update(voList);
         return ResultHelper.multi(voList);
     }
+    /***
+     * Description: 根据对象id批量更新对象的classCode
+     * @param objectDigitals : 对象数组
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/9/27 17:46
+     * Update By lijie 2021/9/27 17:46
+     */
+    @PostMapping("/batchUpdateClassCodesByIds")
+    @Deprecated
+    public CommonResult<List<ObjectDigital>> batchUpdateClassCodesByIds(@Valid @RequestBody List<ObjectDigital> objectDigitals){
+        // 1.基础参数校验
+        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE);
+        if (CollUtil.isEmpty(objectDigitals)){
+            return ResultHelper.multi(new ArrayList<>());
+        }
+        return service.batchUpdateClassCodesByIds(objectDigitals);
+    }
 
     @PostMapping("/deleteOne")
     @Deprecated

+ 9 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/ObjectDigitalMapper.java

@@ -106,4 +106,13 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
      */
     List<ObjectDigital> queryFromData(@Param("fromIds") Set<String> fromIds,@Param("fromObjType") String fromObjType,
                                       @Param("fromInfoCode")  String fromInfoCode, @Param("param") CalculatingDTO calculatingDTO);
+    /***
+     * Description: 根据对象id批量查询对象
+     * @param objIds : 对象id
+     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>  
+     * @author : lijie
+     * @date :2021/9/27 18:27
+     * Update By lijie 2021/9/27 18:27
+     */
+    List<ObjectDigital> queryObjectListByIds(@Param("objIds") Set<String> objIds);
 }

+ 9 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectDigitalService.java

@@ -138,4 +138,13 @@ public interface IObjectDigitalService extends IService<ObjectDigital> {
      * Update By lijie 2021/8/30 9:41
      */
     CommonResult<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(RequestData requestData);
+    /***
+     * Description: 根据对象id批量更新对象的classCode
+     * @param objectDigitals : 对象数组
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/9/27 17:46
+     * Update By lijie 2021/9/27 17:46
+     */
+    CommonResult<List<ObjectDigital>> batchUpdateClassCodesByIds(List<ObjectDigital> objectDigitals);
 }

+ 61 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java

@@ -19,8 +19,10 @@ import com.persagy.dmp.basic.model.CodeTableTypeEnum;
 import com.persagy.dmp.codetable.client.CodeTableDataFacade;
 import com.persagy.dmp.codetable.entity.CodeTableData;
 import com.persagy.dmp.common.constant.CommonConstant;
+import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.context.AppContext;
+import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.helper.SpringHelper;
 import com.persagy.dmp.common.model.entity.BaseEntity;
 import com.persagy.dmp.common.model.response.CommonResult;
@@ -341,6 +343,65 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
         List<List<ObjectDigital>> objList = objectDigitalMapper.queryObjectListByGraphCodeAndRelCode(requestData);
         return analysisQueryResultList(objList,requestData,false,false);
     }
+    /***
+     * Description: 根据对象id批量更新对象的classCode
+     * @param objectDigitals : 对象数组
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/9/27 17:46
+     * Update By lijie 2021/9/27 17:46
+     */
+    @Override
+    public CommonResult<List<ObjectDigital>> batchUpdateClassCodesByIds(List<ObjectDigital> objectDigitals) {
+        // 1.校验数据必填
+        for (ObjectDigital objectDigital : objectDigitals) {
+            if (StrUtil.isBlank(objectDigital.getId())
+                    || StrUtil.isBlank(objectDigital.getClassCode())){
+                throw new BusinessException(ResponseCode.A0400.getCode(),
+                        StrUtil.format("id:{}或classCode:{}不能为空",objectDigital.getId(),
+                                objectDigital.getClassCode()));
+            }
+        }
+        // 2.校验对象是否都存在以及对象要更新的classCode是否符合
+        // 2.1 获得对象id集合
+        Set<String> objIds = objectDigitals.stream()
+                .map(BaseEntity::getId)
+                .collect(Collectors.toSet());
+        Map<String, ObjectDigital> digitalMap = objectDigitals
+                .stream()
+                .collect(Collectors.toMap(ObjectDigital::getId, obj -> obj, (k1, k2) -> k1));
+        // 2.2 根据对象id查询对象信息及对象的分类对应的classCode集合
+        List<ObjectDigital> queryObjs = objectDigitalMapper.queryObjectListByIds(objIds);
+        if (CollUtil.isEmpty(queryObjs)){
+            throw new BusinessException(ResponseCode.A0400.getCode(),
+                    StrUtil.format("id不存在:{}",objIds));
+        }
+        // 2.3 校验对象是否都存在
+        Map<String, ObjectDigital> queryObjMap = queryObjs
+                .stream()
+                .collect(Collectors.toMap(BaseEntity::getId, obj -> obj, (k1, k2) -> k1));
+        List<ObjectDigital> updateObjs = new ArrayList<>();
+        for (String objId : objIds) {
+            if (!queryObjMap.containsKey(objId)){
+                throw new BusinessException(ResponseCode.A0400.getCode(),
+                        StrUtil.format("id不存在:{}",objId));
+            }
+            ObjectDigital queryObj = queryObjMap.get(objId);
+            Set<String> validClassCodes = CollUtil.defaultIfEmpty(queryObj.getObjTypeClassCodes(), new HashSet<>());
+            ObjectDigital objectDigital = digitalMap.get(objId);
+            if (!validClassCodes.contains(objectDigital.getClassCode())){
+                throw new BusinessException(ResponseCode.A0400.getCode(),
+                        StrUtil.format("id:{}的classCode不符合:{}",objectDigital.getId(),objectDigital.getClassCode()));
+            }
+            queryObj.setClassCode(objectDigital.getClassCode());
+            queryObj.setUpdateApp(AppContext.getContext().getAppId());
+            queryObj.setModifier(AppContext.getContext().getAccountId());
+            updateObjs.add(queryObj);
+        }
+        // 3.校验通过,直接更新
+        updateBatchById(updateObjs);
+        return ResultHelper.multi(new ArrayList<>());
+    }
 
     /***
      * Description: 通用处理分页数据方法

+ 16 - 1
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectDigitalMapper.xml

@@ -29,7 +29,7 @@
             <result property="relObjs" column="relObjs" jdbcType="VARCHAR"  typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
             <result property="bimLocation" column="bimLocation" jdbcType="VARCHAR"  typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
             <result property="outLines" column="outLines" jdbcType="VARCHAR"  typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
-            <!--<result property="relObjs" column="relObjs" jdbcType="VARCHAR"  typeHandler="com.persagy.dmp.basic.typehandler.RelObjsHandler"/>-->
+            <result property="objTypeClassCodes" column="objTypeClassCodes" jdbcType="VARCHAR"  typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
     </resultMap>
     <resultMap id="count" type="com.persagy.dmp.digital.entity.ObjectDigital">
         <result property="totalCount" column="totalCount" jdbcType="INTEGER"/>
@@ -562,6 +562,21 @@
             AND group_code = #{param.groupCode}
         </if>
     </select>
+    <select id="queryObjectListByIds" resultMap="BaseResultMap">
+        SELECT
+            dto.*,
+            JSON_ARRAYAGG( dtdt.`code` ) AS objTypeClassCodes
+        FROM
+            dt_object AS dto
+            LEFT JOIN dt_define_type AS dtdt ON ( dtdt.obj_type = dto.obj_type AND dtdt.valid = TRUE )
+        WHERE 1=1
+        <foreach collection="objIds" item="objId" open=" AND dto.id IN(" close=")" separator=",">
+            #{objId}
+        </foreach>
+            AND dto.valid = TRUE
+        GROUP BY
+            dto.id;
+    </select>
 
 
 </mapper>

+ 16 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectClient.java

@@ -195,4 +195,20 @@ public interface DigitalObjectClient {
                               @RequestParam("appId") String appId,
                               @RequestParam("userId") String userId,
                               @RequestBody RequestData requestData);
+    /**
+     * 根据对象id批量更新对象的classCode
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param objectDigitals: 请求参数
+     * @return void
+     */
+    @PostMapping("batchUpdateClassCodesByIds")
+    CommonResult<List<ObjectDigital>> batchUpdateClassCodesByIds(
+                              @RequestParam("groupCode") String groupCode,
+                              @RequestParam("projectId") String projectId,
+                              @RequestParam("appId") String appId,
+                              @RequestParam("userId") String userId,
+                              @RequestBody List<ObjectDigital> objectDigitals);
 }

+ 16 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectFacade.java

@@ -250,4 +250,20 @@ public class DigitalObjectFacade {
         return client.queryObjectListByGraphCodeAndRelCode(groupCode,
                 projectId, appId, userId, requestData);
     }
+    /**
+     * 根据图类型编码及关系类型编码查询对象及其关联对象
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param objectDigitals: 请求参数
+     * @return void
+     */
+    public static CommonResult<List<ObjectDigital>> batchUpdateClassCodesByIds(String groupCode,
+                                                                           String projectId,
+                                                                           String appId,
+                                                                           String userId, List<ObjectDigital> objectDigitals) {
+        return client.batchUpdateClassCodesByIds(groupCode,
+                projectId, appId, userId, objectDigitals);
+    }
 }

+ 3 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/ObjectDigital.java

@@ -102,4 +102,7 @@ public class ObjectDigital extends AuditableEntity {
     /** 对象的outline平面坐标 */
     @TableField(exist = false,typeHandler = JacksonTypeHandler.class,value = "outLines")
     private List<LinkedHashMap<String,Object>> outLines;
+    /** 该对象的对象分类所拥有的classCode集合 */
+    @TableField(exist = false,typeHandler = JacksonTypeHandler.class,value = "objTypeClassCodes")
+    private Set<String> objTypeClassCodes;
 }