From cc44920da3d40b8248b67560026e891afdd1a6ab Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 08 五月 2025 17:57:14 +0800
Subject: [PATCH] 1.查询可以被引用的部件接口开发完成 2.借用部件(可批量) 开发完成 3.修改原有新增、修改部件接口 完成 4.修改原有删除文档与导入文档接口 完成 5.修改工作流问题

---
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java                    |    6 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java                                       |    4 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/base/service/impl/WarehouseLocationServiceImpl.java |    4 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PermissionStreamNewMapper.java                              |   17 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml                           |   78 +++++++++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java                           |   11 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ComponentInfoController.java                            |   18 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceTypeServiceImpl.java                            |    1 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java                   |   14 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/ComponentInfoCode.java                                    |   17 +-
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java                       |  122 +++++++++++++++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml                                 |   23 ---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DocInfoController.java                                  |   13 -
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IComponentInfoService.java                                 |   18 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java                               |   37 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java                                          |    3 
 16 files changed, 335 insertions(+), 51 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ComponentInfoController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ComponentInfoController.java
index e759688..6bc4abe 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ComponentInfoController.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ComponentInfoController.java
@@ -1,8 +1,10 @@
 package org.jeecg.modules.dnc.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.modules.dnc.entity.ComponentInfo;
 import org.jeecg.modules.dnc.entity.PermissionStream;
@@ -64,4 +66,20 @@
         }
         return new ResponseResult(CommonCode.FAIL);
     }
+
+    @AutoLog(value = "鏌ヨ鍙互琚紩鐢ㄧ殑閮ㄤ欢")
+    @ApiOperation(value = "鏌ヨ鍙互琚紩鐢ㄧ殑閮ㄤ欢", notes = "鏌ヨ鍙互琚紩鐢ㄧ殑閮ㄤ欢")
+    @GetMapping("/getByComponentId")
+    public Result<?> getByComponentId(ComponentInfo componentInfo, Integer pageNo, Integer pageSize) {
+        IPage<ComponentInfo> iPage = componentInfoService.getByComponentId(componentInfo, pageNo, pageSize);
+        return Result.OK(iPage);
+    }
+
+
+    @AutoLog(value = "鍊熺敤閮ㄤ欢(鍙壒閲�)")
+    @ApiOperation(value = "鍊熺敤閮ㄤ欢(鍙壒閲�)", notes = "鍊熺敤閮ㄤ欢(鍙壒閲�)")
+    @PostMapping("/borrow")
+    public Result<?> borrowComponent(@RequestParam("oldId") String oldId, @RequestParam("newIds") String newIds) {
+        return componentInfoService.borrowComponent(oldId,newIds);
+    }
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DocInfoController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DocInfoController.java
index 1374027..4594a87 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DocInfoController.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DocInfoController.java
@@ -1,6 +1,5 @@
 package org.jeecg.modules.dnc.controller;
 
-import cn.hutool.core.util.StrUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -56,9 +55,9 @@
 
     @AutoLog(value = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅")
     @ApiOperation(value = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅", notes = "鏂囨。琛�-鍒犻櫎鏂囨。淇℃伅")
-    @DeleteMapping("/delete")
-    public ResponseResult deleteDocInfo(@RequestParam("id") String id) {
-        boolean b = docInfoService.deleteDocInfo(id);
+    @DeleteMapping("/delete/{id}/{attrType}/{attrId}")
+    public ResponseResult deleteDocInfo(@PathVariable("id") String id, @PathVariable("attrType") String attrType, @PathVariable("attrId") String attrId) {
+        boolean b = docInfoService.deleteDocInfo(id,attrType,attrId);
         if(!b)
             return new ResponseResult(CommonCode.FAIL);
         return new ResponseResult(CommonCode.SUCCESS);
@@ -182,9 +181,9 @@
 
     @AutoLog(value = "鏂囦欢琛�-鎵归噺鍒犻櫎鏂囨。鎺ュ彛")
     @ApiOperation(value = "鏂囦欢琛�-鎵归噺鍒犻櫎鏂囨。鎺ュ彛", notes = "鏂囦欢琛�-鎵归噺鍒犻櫎鏂囨。鎺ュ彛")
-    @PostMapping("/batch/remove")
-    public ResponseResult batchRemoveDocInfo(@RequestBody String[] docIds) {
-        boolean b = docInfoService.batchRemoveDocInfo(docIds);
+    @PostMapping("/batch/remove/{docIds}/{attrType}/{attrId}")
+    public ResponseResult batchRemoveDocInfo(@PathVariable("docIds") String[] docIds, @PathVariable("attrType") String attrType, @PathVariable("attrId") String attrId) {
+        boolean b = docInfoService.batchRemoveDocInfo(docIds,attrType,attrId);
         if(!b)
             return new ResponseResult(CommonCode.FAIL);
         return new ResponseResult(CommonCode.SUCCESS);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java
index 59a52ab..0719e35 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java
@@ -70,6 +70,9 @@
     @TableLogic
     @TableField(value = "delete_flag", select = false)
     private Integer deleteFlag = 0;
+    //琚�熺敤id
+    @TableField(value = "borrow_id")
+    private String borrowId;
 
     //鍒涘缓浜�
     private transient String createName;
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PermissionStreamNewMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PermissionStreamNewMapper.java
index 4d52b15..6033522 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PermissionStreamNewMapper.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PermissionStreamNewMapper.java
@@ -1,5 +1,6 @@
 package org.jeecg.modules.dnc.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.dnc.entity.PermissionStreamNew;
@@ -17,6 +18,22 @@
     List<ProductMix> loadProductMix(@Param("userId") String userId,@Param("productIdList")List<String> productIdList);
 
     /**
+     * 鏍规嵁鐢ㄦ埛id銆侀儴闂ㄥ垪琛ㄣ�乮d銆佷笟鍔$被鍨嬭幏鍙栧搴旂粨鏋勬爲鏉冮檺
+     * @param userId
+     * @param productIdList
+     * @param businessId
+     * @param businessType
+     * @return
+     */
+    @InterceptorIgnore(
+            tenantLine = "true",   // 蹇界暐澶氱鎴锋潯浠�
+            blockAttack = "true", // 缁曡繃鍏ㄨ〃鎿嶄綔妫�鏌�
+            illegalSql = "true"   // 绂佺敤 SQL 娉ㄥ叆妫�鏌�
+    )
+    List<ProductMix> loadProductMixByBusinessId(@Param("userId") String userId,@Param("productIdList")List<String> productIdList,
+                                                @Param("businessId")String businessId,@Param("businessType")String businessType);
+
+    /**
      * 绠$悊鍛樿幏鍙栨墍鏈夋潈闄�
      * @return
      */
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml
index d31a3cb..b09355a 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml
@@ -158,27 +158,4 @@
         on comp.component_id=s.component_id
         where delete_flag = 0 and parent_id=#{parentId}
     </select>
-
-
-    <select id="findById" parameterType="Map" resultMap="componentExtPermsMapAs">
-        select comp.component_id
-        , comp.parent_id
-        , comp.product_id
-        , comp.component_name
-        , comp.materiel_code
-        , comp.materiel_desp
-        , comp.component_model
-        , comp.component_scale
-        , comp.component_weight
-        , comp.rank_level
-        , comp.assemble_type
-        , comp.produce_type
-        , comp.process_type
-        , comp.structure_type
-        , comp.component_code
-        , comp.component_status
-        , comp.description
-        from nc_component_info comp
-        where comp.component_id=#{id} and comp.delete_flag=0
-    </select>
 </mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml
index e7552dc..76f6228 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml
@@ -44,4 +44,82 @@
         WHERE nps_user.business_id IS NOT NULL
         order by mix.tree_type, mix.create_time asc
     </select>
+    <select id="loadProductMixByBusinessId" resultType="org.jeecg.modules.dnc.entity.ProductMix">
+        WITH CTE_Hierarchy AS (
+        SELECT
+            CAST(id AS VARCHAR(36)) AS id,
+            CAST(parent_id AS VARCHAR(36)) AS parent_id,
+            1 AS LEVEL,
+            CAST('#' + id + '#' AS VARCHAR(MAX)) AS visit_path
+        FROM
+            nc_product_mix
+        WHERE
+            id = #{businessId}
+            AND tree_type = #{businessType}
+        UNION ALL
+        -- 鍚戜笂閫掑綊鐖惰妭鐐癸紙甯﹀惊鐜娴嬶級
+        SELECT
+            CAST(p.id AS VARCHAR(36)),
+            CAST(p.parent_id AS VARCHAR(36)),
+            h.level + 1,
+            CAST(h.visit_path + '#' + p.id + '#' AS VARCHAR(MAX))
+        FROM
+            nc_product_mix p
+            INNER JOIN CTE_Hierarchy h ON CAST(p.id AS VARCHAR(36)) = h.parent_id
+        WHERE
+            p.tree_type = #{businessType}
+            AND h.visit_path NOT LIKE '%#' + p.id + '#%'
+            AND h.level &lt; 1000
+        UNION ALL
+        -- 鍚戜笅閫掑綊瀛愯妭鐐癸紙甯﹀惊鐜娴嬶級
+        SELECT
+            CAST(c.id AS VARCHAR(36)),
+            CAST(c.parent_id AS VARCHAR(36)),
+            h.level + 1,
+            CAST(h.visit_path + '#' + c.id + '#' AS VARCHAR(MAX))
+        FROM
+            nc_product_mix c
+            INNER JOIN CTE_Hierarchy h ON CAST(c.parent_id AS VARCHAR(36)) = h.id
+        WHERE
+            c.tree_type = #{businessType}
+            AND h.visit_path NOT LIKE '%#' + c.id + '#%'
+            AND h.level &lt; 1000
+        ),
+        ExclusionCTE AS (
+        SELECT DISTINCT id
+            FROM CTE_Hierarchy
+        WHERE LEVEL BETWEEN 1 AND 1000
+        )
+        SELECT DISTINCT
+            mix.id,
+            mix.tree_code 'code',
+            mix.tree_name 'name',
+            mix.parent_id,
+            mix.tree_type AS 'type',
+            mix.extend,
+            mix.create_time
+        FROM
+            nc_product_mix mix
+        LEFT JOIN nc_permission_stream_new nps_depart ON mix.id = nps_depart.business_id
+            AND nps_depart.delete_flag = '0'
+                <if test="productIdList != null and productIdList.size() > 0">
+                    AND nps_depart.depart_id IN
+                    <foreach collection="productIdList" item="productId" index="index" open="(" close=")" separator=",">
+                        #{productId}
+                    </foreach>
+                </if>
+            AND nps_depart.user_id IS NULL
+        LEFT JOIN nc_permission_stream_new nps_user ON mix.id = nps_user.business_id
+            AND nps_user.user_id = #{userId}
+            AND nps_user.delete_flag = '0'
+        WHERE
+            nps_depart.business_id IS NOT NULL
+            AND nps_user.business_id IS NOT NULL
+            AND mix.tree_type = #{businessType}
+            AND NOT EXISTS (SELECT 1 FROM ExclusionCTE e WHERE e.id = mix.id)
+        ORDER BY
+            mix.tree_type,
+            mix.create_time ASC
+            OPTION (MAXRECURSION 0);
+    </select>
 </mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/ComponentInfoCode.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/ComponentInfoCode.java
index 330404b..af3e7f3 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/ComponentInfoCode.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/ComponentInfoCode.java
@@ -16,13 +16,14 @@
     COMPONENT_CHILD_EXIST(false, 25108, "閮ㄤ欢瀛樺湪瀛愰儴浠讹紒"),
     COMPONENT_PARTS_EXIST(false, 25109, "閮ㄤ欢鏈夊叧鑱旂殑闆朵欢淇℃伅锛�"),
     COMPONENT_PROCESS_EXIST(false, 25110, "閮ㄤ欢鏈夊叧鑱旂殑宸ュ簭淇℃伅锛�"),
-    COMPONENT_DOC_EXIST(false, 25116, "閮ㄤ欢鏈夊叧鑱旂殑鏂囨。淇℃伅锛�"),
-    COMPONENT_CODE_NONE(false, 25111, "璇疯緭鍏ラ儴浠朵唬鍙凤紒"),
-    COMPONENT_IS_EXIST(false, 25112, "閮ㄤ欢宸插瓨鍦紒"),
-    COMPONENT_PN_NOT_VALID(false, 25113, "PN鐮佷笉鍚堟硶锛�"),
-    COMPONENT_PN_NOT_EXIST(false, 25114, "涓嶅瓨鍦ㄨPN鐮佸搴旂殑閮ㄤ欢鎴栭浂浠讹紒"),
-    COMPONENT_PN_NOT_ONLY(false, 25115, "PN鐮佷笉鍞竴锛�"),
-    COMPONENT_USER_NONE(false,25016,"閮ㄤ欢鏃犳硶娓呯┖鐢ㄦ埛鏉冮檺锛岃鑷冲皯淇濈暀涓�浣嶅彲鎿嶄綔鐢ㄦ埛锛�");
+    COMPONENT_DOC_EXIST(false, 251111, "閮ㄤ欢鏈夊叧鑱旂殑鏂囨。淇℃伅锛�"),
+    COMPONENT_CODE_NONE(false, 25112, "璇疯緭鍏ラ儴浠朵唬鍙凤紒"),
+    COMPONENT_IS_EXIST(false, 25113, "閮ㄤ欢宸插瓨鍦紒"),
+    COMPONENT_BORROW_EXIST(false, 25114, "閮ㄤ欢宸茶鍊熺敤锛岃鍏堝垹闄ゅ�熺敤鍐嶅垹闄わ紒"),
+    COMPONENT_PN_NOT_VALID(false, 25115, "PN鐮佷笉鍚堟硶锛�"),
+    COMPONENT_PN_NOT_EXIST(false, 25116, "涓嶅瓨鍦ㄨPN鐮佸搴旂殑閮ㄤ欢鎴栭浂浠讹紒"),
+    COMPONENT_PN_NOT_ONLY(false, 25117, "PN鐮佷笉鍞竴锛�"),
+    COMPONENT_USER_NONE(false,25018,"閮ㄤ欢鏃犳硶娓呯┖鐢ㄦ埛鏉冮檺锛岃鑷冲皯淇濈暀涓�浣嶅彲鎿嶄綔鐢ㄦ埛锛�");
 
     //鎿嶄綔浠g爜
     @ApiModelProperty(value = "鎿嶄綔鏄惁鎴愬姛", example = "true", required = true)
@@ -34,7 +35,7 @@
     //鎻愮ず淇℃伅
     @ApiModelProperty(value = "鎿嶄綔鎻愮ず", example = "鎿嶄綔杩囦簬棰戠箒锛�", required = true)
     String message;
-    private ComponentInfoCode(boolean success, int code, String message){
+    ComponentInfoCode(boolean success, int code, String message){
         this.success = success;
         this.code = code;
         this.message = message;
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IComponentInfoService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IComponentInfoService.java
index 724e004..0e00884 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IComponentInfoService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IComponentInfoService.java
@@ -1,6 +1,8 @@
 package org.jeecg.modules.dnc.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.dnc.dto.ComponentExt;
 import org.jeecg.modules.dnc.entity.ComponentInfo;
 import org.jeecg.modules.dnc.entity.DocInfo;
@@ -151,6 +153,22 @@
      * @return
      */
     List<DocInfo> getByComponentInfo(TreeInfoRequest treeInfoRequest);
+
+    /**
+     * 鏌ヨ鍙互琚紩鐢ㄧ殑閮ㄤ欢
+     * @param componentInfo
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+    IPage<ComponentInfo> getByComponentId(ComponentInfo componentInfo, Integer pageNo, Integer pageSize);
+
+    /**
+     * 鍊熺敤閮ㄤ欢(鍙壒閲�) - 鍘熸湁閮ㄤ欢id锛屾柊閮ㄤ欢ids
+     * @param oldId,newIds
+     * @return
+     */
+    Result<?> borrowComponent(String oldId, String newIds);
 }
 
 
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java
index 0fafcab..6696d49 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java
@@ -39,7 +39,7 @@
      * @param id
      * @return
      */
-    boolean deleteDocInfo(String id);
+    boolean deleteDocInfo(String id,String attrType,String attrId);
     /**
      * 鐩戞帶鏂囦欢瀵煎叆
      * @param pathFile
@@ -234,7 +234,7 @@
      * @param docIds
      * @return
      */
-    boolean batchRemoveDocInfo(String[] docIds);
+    boolean batchRemoveDocInfo(String[] docIds,String attrType,String attrId);
 
     /**
      * 鏂囨。涓嬭浇
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java
index 71b1f1f..4d6e3f9 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java
@@ -15,6 +15,17 @@
      */
     List<ProductMix> loadProductMix(String userId,List<String> productIdList);
 
+    /**
+     * 鏍规嵁鐢ㄦ埛id銆侀儴闂ㄥ垪琛ㄣ�乮d銆佷笟鍔$被鍨嬭幏鍙栧搴旂粨鏋勬爲鏉冮檺
+     * @param userId
+     * @param productIdList
+     * @param businessId
+     * @param businessType
+     * @return
+     */
+    List<ProductMix> loadProductMixByBusinessIdAndBusinessType(String userId,List<String> productIdList,
+                                                String businessId,String businessType);
+
 
     /**
      * 绠$悊鍛樿幏鍙栨墍鏈夋潈闄�
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
index 9b22567..986a593 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
@@ -4,9 +4,12 @@
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.dnc.dto.ComponentExt;
 import org.jeecg.modules.dnc.entity.*;
@@ -57,6 +60,8 @@
     @Autowired
     @Lazy
     private IDocInfoService docInfoService;
+    @Autowired
+    private IDocRelativeService docRelativeService;
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public boolean addComponentInfo(ComponentInfo componentInfo) {
@@ -69,7 +74,7 @@
         if(!ValidateUtil.validateString(componentInfo.getComponentCode()))
             ExceptionCast.cast(ComponentInfoCode.COMPONENT_CODE_NONE);
         ComponentInfo en = getByCode(componentInfo.getComponentCode());
-        if(en != null)
+        if(en != null&&componentInfo.getBorrowId()==null)
             ExceptionCast.cast(ComponentInfoCode.COMPONENT_IS_EXIST);
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = user.getId();
@@ -137,6 +142,20 @@
                     ,componentInfo.getComponentName(),componentInfo.getComponentCode(),2,new Date());
         }
         productMixService.save(productMix);
+        if (StrUtil.isNotEmpty(componentInfo.getBorrowId())){
+            //鍊熺敤閮ㄤ欢,鍚屾娣诲姞鏂囦欢
+            List<DocRelative> docRelativeList=docRelativeService.
+                    list(new QueryWrapper<DocRelative>().eq("attribution_type","2").eq("attribution_id",componentInfo.getBorrowId()));
+            if (!docRelativeList.isEmpty()){
+                docRelativeList.forEach(item -> {
+                    DocRelative docRelative = new DocRelative();
+                    BeanUtil.copyProperties(item,docRelative);
+                    docRelative.setId(null);
+                    docRelative.setAttributionId(componentInfo.getComponentId());
+                    docRelativeService.save(docRelative);
+                });
+            }
+        }
         //娣诲姞鏉冮檺
         PermissionStreamNew stream = new PermissionStreamNew();
         stream.setUserId(userId);
@@ -189,7 +208,11 @@
             stream.setBusinessType("2");
             return permissionStreamNewService.save(stream);
         }
-        return b;
+        List<ComponentInfo> list = super.lambdaQuery().eq(ComponentInfo::getBorrowId,id).list();
+        if (list != null && !list.isEmpty()) {
+            list.forEach(item -> editComponentInfo(item.getComponentId(),componentInfo));
+        }
+        return true;
     }
 
     @Override
@@ -267,14 +290,20 @@
         if(childrenList != null && !childrenList.isEmpty()) {
             ExceptionCast.cast(ComponentInfoCode.COMPONENT_CHILD_EXIST);
         }
-        //楠岃瘉浜у搧涓嬫槸鍚︽湁闆朵欢
+        //楠岃瘉閮ㄤ欢涓嬫槸鍚︽湁闆朵欢
         List<PartsInfo> partsInfoList = partsInfoService.getByComponentId(componentInfo.getProductId(), componentInfo.getComponentId());
         if(partsInfoList != null && !partsInfoList.isEmpty()) {
             ExceptionCast.cast(ComponentInfoCode.COMPONENT_PARTS_EXIST);
         }
+        //楠岃瘉閮ㄤ欢涓嬫槸鍚︽湁宸ュ簭淇℃伅
         List<ProcessStream> processStreamList = processStreamService.findByComponentId(id);
         if(processStreamList != null && !processStreamList.isEmpty()) {
             ExceptionCast.cast(ComponentInfoCode.COMPONENT_PROCESS_EXIST);
+        }
+        //楠岃瘉閮ㄤ欢鏄惁琚�熺敤
+        List<ComponentInfo> list = super.lambdaQuery().eq(ComponentInfo::getBorrowId,id).list();
+        if (list != null && !list.isEmpty()) {
+            ExceptionCast.cast(ComponentInfoCode.COMPONENT_BORROW_EXIST);
         }
         boolean b;
         //楠岃瘉鏄惁瀛樺湪鏂囨。
@@ -566,4 +595,91 @@
         }
         return docInfos;
     }
+
+    /**
+     * 鏌ヨ鍙互琚紩鐢ㄧ殑閮ㄤ欢
+     * @param componentInfo
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+    @Override
+    public IPage<ComponentInfo> getByComponentId(ComponentInfo componentInfo, Integer pageNo, Integer pageSize){
+        //鏉冮檺鎺掗櫎,涓嶈兘寮曠敤鑷繁涓婁笅绾ч儴浠�
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String productIds = loginUser.getProductionIds();
+        IPage<ComponentInfo> page = new Page<>(pageNo, pageSize);
+        if (productIds != null && !productIds.isEmpty()) {
+            List<String> productIdList = Arrays.asList(productIds.split(","));
+            List<ProductMix> productMixList = permissionStreamNewService.
+                    loadProductMixByBusinessIdAndBusinessType(loginUser.getId(),productIdList,componentInfo.getComponentId(),"2");
+            List<Long> ids = productMixList.stream().map(ProductMix::getId).collect(Collectors.toList());
+            //鑾峰彇宸茬粡琚�熺敤鐨勯儴浠�
+            LambdaQueryWrapper<ComponentInfo> borrowQueryWrapper = new LambdaQueryWrapper<>();
+            borrowQueryWrapper.in(ComponentInfo::getBorrowId,ids);
+            borrowQueryWrapper.eq(ComponentInfo::getParentId,componentInfo.getComponentId());
+            List<String> borrowIds= super.list(borrowQueryWrapper).stream().map(ComponentInfo::getBorrowId).collect(Collectors.toList());
+            LambdaQueryWrapper<ComponentInfo> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.like(StrUtil.isNotEmpty(componentInfo.getComponentName()),ComponentInfo::getComponentName, componentInfo.getComponentName());
+            queryWrapper.like(StrUtil.isNotEmpty(componentInfo.getComponentCode()),ComponentInfo::getComponentCode, componentInfo.getComponentCode());
+            queryWrapper.isNull(ComponentInfo::getBorrowId);
+            queryWrapper.in(ComponentInfo::getComponentId,ids);
+            if (!borrowIds.isEmpty()) {
+                queryWrapper.notIn(ComponentInfo::getComponentId,borrowIds);
+            }
+            queryWrapper.orderByDesc(ComponentInfo::getCreateTime);
+            page = super.page(page, queryWrapper);
+        }
+        return page;
+    }
+
+    /**
+     * 鍊熺敤閮ㄤ欢(鍙壒閲�) - 鍘熸湁閮ㄤ欢id锛屾柊閮ㄤ欢ids
+     * @param oldId,newIds
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result<?> borrowComponent(String oldId, String newIds){
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        ComponentInfo componentInfo = super.getById(oldId);
+        if(componentInfo == null) {
+            return Result.error("閮ㄤ欢涓嶅瓨鍦�");
+        }
+        List<String> productIdList = Arrays.asList(loginUser.getProductionIds().split(","));
+        //鑾峰彇鍙互鍊熺敤鐨勯儴浠�
+        List<ProductMix> productMixList = permissionStreamNewService.
+                loadProductMixByBusinessIdAndBusinessType(loginUser.getId(),productIdList,componentInfo.getComponentId(),"2");
+        Set<Long> allowedIds = productMixList.stream()
+                .map(ProductMix::getId)
+                .collect(Collectors.toCollection(HashSet::new));
+        List<String> newIdList = Arrays.asList(newIds.split(","));
+        boolean allAllowed = newIdList.parallelStream()
+                .map(Long::parseLong)
+                .allMatch(allowedIds::contains);
+        if (!allAllowed) {
+            return Result.error("瀛樺湪鏈巿鏉冪殑閮ㄤ欢鍊熺敤");
+        }
+        //鑾峰彇宸茬粡琚�熺敤鐨勯儴浠�
+        LambdaQueryWrapper<ComponentInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ComponentInfo::getBorrowId,newIdList);
+        queryWrapper.eq(ComponentInfo::getParentId,componentInfo.getComponentId());
+        List<ComponentInfo> list = super.list(queryWrapper);
+        //鍒ゆ柇鏄惁宸茬粡琚綋鍓嶉儴浠跺�熺敤
+        if(!list.isEmpty()) {
+            return Result.error("閫夋嫨鐨勯儴浠跺凡琚綋鍓嶉儴浠跺�熺敤");
+        }
+        List<ComponentInfo> componentInfoList=listByIds(newIdList);
+        componentInfoList.forEach(item->{
+            //娣诲姞閮ㄤ欢淇℃伅銆佸眰绾т俊鎭�佹潈闄愪俊鎭�
+            ComponentInfo newComponentInfo=new ComponentInfo();
+            BeanUtil.copyProperties(item,newComponentInfo);
+            newComponentInfo.setComponentId(null);
+            newComponentInfo.setProductId(componentInfo.getProductId());
+            newComponentInfo.setParentId(componentInfo.getComponentId());
+            newComponentInfo.setBorrowId(item.getComponentId());
+            addComponentInfo(newComponentInfo);
+        });
+        return Result.ok("閮ㄤ欢鍊熺敤鎴愬姛");
+    }
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceTypeServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceTypeServiceImpl.java
index fa5d47b..d6ddbe8 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceTypeServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceTypeServiceImpl.java
@@ -135,6 +135,7 @@
     /**
      * 鏍规嵁涓氬姟id鏌ヨ璁惧绫诲垪琛�
      * @param businessId
+     *
      * @param type
      * @return
      */
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
index fdf2f26..3b4b965 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
@@ -1,5 +1,6 @@
 package org.jeecg.modules.dnc.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -63,6 +64,9 @@
     private IDispatchFileService dispatchFileService;
     @Autowired
     private ISysParamsService sysParamsService;
+    @Autowired
+    @Lazy
+    private IComponentInfoService componentInfoService;
 
     /*澶囦唤澶勭悊*/
     @Override
@@ -99,6 +103,19 @@
         docRelative.setAttributionType(uploadRequest.getAttributionType());
         docRelative.setClassificationId(docClass.getClassificationId());
         boolean b = docRelativeService.save(docRelative);
+        if (uploadRequest.getAttributionType()==2){
+            //鏌ヨ鍊熺敤鐨勯儴浠�
+            List<ComponentInfo> borrowComponentInfoList=componentInfoService.list(new QueryWrapper<ComponentInfo>().eq("borrow_id", uploadRequest.getAttributionId()));
+            if (!borrowComponentInfoList.isEmpty()) {
+                borrowComponentInfoList.forEach(item->{
+                    DocRelative borrowDocRelative = new DocRelative();
+                    BeanUtil.copyProperties(docRelative,borrowDocRelative);
+                    borrowDocRelative.setAttributionId(item.getComponentId());
+                    borrowDocRelative.setId(null);
+                    docRelativeService.save(borrowDocRelative);
+                });
+            }
+        }
         if(!b)
             ExceptionCast.cast(DocumentCode.DOC_UPLOAD_ERROR);
         DocFile docFile = new DocFile();
@@ -318,7 +335,7 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public boolean deleteDocInfo(String id) {
+    public boolean deleteDocInfo(String id,String attrType,String attrId) {
         if(!ValidateUtil.validateString(id))
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         DocInfo en = super.getById(id);
@@ -326,6 +343,20 @@
             ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST);
         if(en.getDocStatus() != 1)
             ExceptionCast.cast(DocumentCode.DOC_DEL_ERROR);
+        //鏌ヨ瀵瑰簲鐨勫叧绯�
+        if ("2".equals(attrType)) {
+            //鍒ゆ柇閮ㄤ欢寮曠敤
+            ComponentInfo componentInfo=componentInfoService.getById(attrId);
+            if(componentInfo!=null&&componentInfo.getBorrowId()!=null){
+                //鍊熺敤鐨勯儴浠讹紝鍙垹闄よ嚜宸辩殑鍏崇郴
+                DocRelative docRelative=docRelativeService.getOne(new QueryWrapper<DocRelative>()
+                        .eq("attribution_id", attrId).eq("attribution_type", 2).eq("doc_id",id));
+                if(docRelative!=null){
+                    docRelativeService.removeById(docRelative.getId());
+                    return true;
+                }
+            }
+        }
         FileOperate operate = fileOperateService.getByDocId(id);
         if(operate != null)
             ExceptionCast.cast(DocumentCode.DOC_IS_OPERATING);
@@ -896,11 +927,11 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public boolean batchRemoveDocInfo(String[] docIds) {
+    public boolean batchRemoveDocInfo(String[] docIds,String attrType,String attrId) {
         if(docIds == null || docIds.length < 1)
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         for(String docId : docIds) {
-            this.deleteDocInfo(docId);
+            this.deleteDocInfo(docId,attrType,attrId);
         }
         return true;
     }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java
index 074a073..672b6ab 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java
@@ -35,6 +35,20 @@
     }
 
     /**
+     * 鏍规嵁鐢ㄦ埛id銆侀儴闂ㄥ垪琛ㄣ�乮d銆佷笟鍔$被鍨嬭幏鍙栧搴旂粨鏋勬爲鏉冮檺
+     * @param userId
+     * @param productIdList
+     * @param businessId
+     * @param businessType
+     * @return
+     */
+    @Override
+    public List<ProductMix> loadProductMixByBusinessIdAndBusinessType(String userId,List<String> productIdList,
+                                                String businessId,String businessType){
+        return baseMapper.loadProductMixByBusinessId(userId,productIdList,businessId,businessType);
+    }
+
+    /**
      * 绠$悊鍛樿幏鍙栨墍鏈夋潈闄�
      * @return
      */
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
index c5243fe..6b715e9 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
@@ -1069,8 +1069,10 @@
                     .processInstanceId(flowTaskDto.getProcInsId())
                     .singleResult();
             SysUser startUser = iFlowThirdService.getUserByUsername(historicProcessInstance.getStartUserId());
-            flowTaskDto.setStartUserId(startUser.getUsername());
-            flowTaskDto.setStartUserName(startUser.getRealname());
+            if (startUser!=null){
+                flowTaskDto.setStartUserId(startUser.getUsername());
+                flowTaskDto.setStartUserName(startUser.getRealname());
+            }
             List<String> departNamesByUsername = iFlowThirdService.getDepartNamesByUsername(historicProcessInstance.getStartUserId());
             flowTaskDto.setStartDeptName(CollUtil.join(departNamesByUsername,"锛�"));
             if (flowTaskDto.getTodoUsers() == null){
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/base/service/impl/WarehouseLocationServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/base/service/impl/WarehouseLocationServiceImpl.java
index 256b2bf..6bdcdda 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/base/service/impl/WarehouseLocationServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/base/service/impl/WarehouseLocationServiceImpl.java
@@ -1,13 +1,11 @@
 package org.jeecg.modules.base.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.jeecg.modules.base.entity.WarehouseLocation;
 import org.jeecg.modules.base.mapper.WarehouseLocationMapper;
-import org.jeecg.modules.base.mapper.WarehouseMapper;
 import org.jeecg.modules.base.service.IWarehouseLocationService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 /**
  * @Description: mom_base_warehouse_location

--
Gitblit v1.9.3