From 23855599412c4d61b38d78f0f3abd3430a48b5b1 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期三, 25 六月 2025 11:51:38 +0800
Subject: [PATCH] Merge branch 'mdc_hyjs_master'

---
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java |  645 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 645 insertions(+), 0 deletions(-)

diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
new file mode 100644
index 0000000..291d646
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
@@ -0,0 +1,645 @@
+package org.jeecg.modules.system.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.constant.FillRuleConstant;
+import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.FillRuleUtil;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.system.entity.*;
+import org.jeecg.modules.system.mapper.MdcProductionEquipmentMapper;
+import org.jeecg.modules.system.mapper.MdcProductionMapper;
+import org.jeecg.modules.system.mapper.MdcUserProductionMapper;
+import org.jeecg.modules.system.mapper.SysUserMapper;
+import org.jeecg.modules.system.model.MdcProductionTreeModel;
+import org.jeecg.modules.system.model.ProductionIdModel;
+import org.jeecg.modules.system.service.IMdcProductionService;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.jeecg.modules.system.service.ISysParamsService;
+import org.jeecg.modules.system.util.FindsProductionsChildrenUtil;
+import org.jeecg.modules.system.vo.MdcProOptionsVo;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 浜х嚎琛�
+ * @Author: liuS
+ * @Date: 2023-03-23
+ * @Version: V1.0
+ */
+@Service
+public class MdcProductionServiceImpl extends ServiceImpl<MdcProductionMapper, MdcProduction> implements IMdcProductionService {
+
+    @Resource
+    private SysUserMapper sysUserMapper;
+
+    @Resource
+    private MdcUserProductionMapper userProductionMapper;
+
+    @Resource
+    private MdcProductionEquipmentMapper productionEquipmentMapper;
+
+    @Resource
+    private ISysParamsService sysParamsService;
+
+    @Resource
+    private ISysDictService sysDictService;
+    /**
+     * queryTreeList 瀵瑰簲 queryTreeList 鏌ヨ鎵�鏈夌殑浜х嚎鏁版嵁,浠ユ爲缁撴瀯褰㈠紡鍝嶅簲缁欏墠绔�
+     */
+    @Override
+    @Cacheable(value = "mdc:cache:production:alldata")
+    public List<MdcProductionTreeModel> queryTreeList() {
+        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<MdcProduction>();
+        query.eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.orderByAsc(MdcProduction::getProductionOrder);
+        List<MdcProduction> list = this.list(query);
+        //璁剧疆鐢ㄦ埛id锛岃鍓嶅彴鏄剧ず
+        this.setUserIdsByProList(list);
+        //璋冪敤wrapTreeDataToTreeList鏂规硶鐢熸垚鏍戠姸鏁版嵁
+        return FindsProductionsChildrenUtil.wrapTreeDataToTreeList(list);
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈変骇绾夸俊鎭紝骞跺垎鑺傜偣杩涜鏄剧ず(娣诲姞绯荤粺閰嶇疆)
+     */
+    @Override
+    public List<MdcProductionTreeModel> queryTreeListByConfig(){
+        SysParams sysParams = sysParamsService.getSysPramBySettingKey("dnc_production");
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<MdcProduction>();
+        if (sysParams == null) {
+            return null;
+        }else {
+            List<String> productionIds = new ArrayList<>();
+            if (!("admin").equals(loginUser.getUsername())) {
+                //涓嶆槸瓒呯骇绠$悊鍛橈紝鑾峰彇鐢ㄦ埛鎷ユ湁鐨勪骇绾�
+                if (loginUser.getProductionIds() != null) {
+                    if (loginUser.getProductionIds().contains(",")) {
+                        productionIds = Arrays.asList(loginUser.getProductionIds().split(","));
+                    } else {
+                        productionIds = Collections.singletonList(loginUser.getProductionIds());
+                    }
+                }
+            }
+            if (("0").equals(sysParams.getSettingValue())){
+                query.eq(MdcProduction::getOrgType,"2");
+                query.in(!productionIds.isEmpty(), MdcProduction::getId, productionIds);
+                query.eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+                query.orderByAsc(MdcProduction::getProductionOrder);
+                List<MdcProduction> list = this.list(query);
+                //璁剧疆鐢ㄦ埛id锛岃鍓嶅彴鏄剧ず
+                this.setUserIdsByProList(list);
+                //灏佽涓�绾ф爲
+                List<MdcProductionTreeModel> listResult = new ArrayList<>();
+                for (MdcProduction production : list) {
+                    if (production.getDescription().isEmpty()){
+                        production.setDescription("");
+                    }
+                    listResult.add(new MdcProductionTreeModel(production));
+                }
+                //璋冪敤wrapTreeDataToTreeList鏂规硶鐢熸垚鏍戠姸鏁版嵁
+                return listResult;
+            }else {
+                query.eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+                query.orderByAsc(MdcProduction::getProductionOrder);
+                List<MdcProduction> list = this.list(query);
+                //璁剧疆鐢ㄦ埛id锛岃鍓嶅彴鏄剧ず
+                this.setUserIdsByProList(list);
+                //璋冪敤wrapTreeDataToTreeList鏂规硶鐢熸垚鏍戠姸鏁版嵁
+                return FindsProductionsChildrenUtil.wrapTreeDataToTreeList(list);
+            }
+        }
+    }
+
+    /**
+     * queryTreeList 鏍规嵁浜х嚎id鏌ヨ,鍓嶇鍥炴樉璋冪敤
+     */
+    @Override
+    public List<MdcProductionTreeModel> queryTreeList(String ids) {
+        List<MdcProductionTreeModel> listResult = new ArrayList<>();
+        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<MdcProduction>();
+        query.eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        if (oConvertUtils.isNotEmpty(ids)) {
+            query.in(true, MdcProduction::getId, ids.split(","));
+        }
+        query.orderByAsc(MdcProduction::getProductionOrder);
+        List<MdcProduction> list = this.list(query);
+        for (MdcProduction production : list) {
+            if (production.getDescription().isEmpty()){
+                production.setDescription("");
+            }
+            listResult.add(new MdcProductionTreeModel(production));
+        }
+        return listResult;
+    }
+
+    @Override
+    @Cacheable(value = "mdc:cache:production:allids")
+    public List<ProductionIdModel> queryProductionIdTreeList() {
+        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<>();
+        query.eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.orderByAsc(MdcProduction::getProductionOrder);
+        List<MdcProduction> list = this.list(query);
+        //璋冪敤wrapTreeDataToTreeList鏂规硶鐢熸垚鏍戠姸鏁版嵁
+        return FindsProductionsChildrenUtil.wrapTreeDataToProductionIdTreeList(list);
+    }
+
+    /**
+     * 鏍规嵁鍏抽敭瀛楁悳绱㈢浉鍏崇殑閮ㄩ棬鏁版嵁
+     */
+    @Override
+    public List<MdcProductionTreeModel> searchByKeyWord(String keyWord) {
+        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<>();
+        List<MdcProductionTreeModel> newList = new ArrayList<>();
+        query.like(MdcProduction::getProductionName, keyWord);
+        MdcProductionTreeModel model = new MdcProductionTreeModel();
+        List<MdcProduction> productionList = this.list(query);
+        if (!productionList.isEmpty()) {
+            for (MdcProduction mdcProduction : productionList) {
+                model = new MdcProductionTreeModel(mdcProduction);
+                model.setChildren(null);
+                newList.add(model);
+            }
+            return newList;
+        }
+        return Collections.emptyList();
+    }
+
+    /**
+     * saveProductionData 瀵瑰簲 add 淇濆瓨鐢ㄦ埛鍦ㄩ〉闈㈡坊鍔犵殑鏂扮殑浜х嚎瀵硅薄鏁版嵁
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveProductionData(MdcProduction mdcProduction) {
+        if (mdcProduction != null) {
+            if (mdcProduction.getParentId() == null) {
+                mdcProduction.setParentId("");
+            }
+            mdcProduction.setId(IdWorker.getIdStr(mdcProduction));
+            // 鍏堝垽鏂瀵硅薄鏈夋棤鐖剁骇ID,鏈夊垯鎰忓懗鐫�涓嶆槸鏈�楂樼骇,鍚﹀垯鎰忓懗鐫�鏄渶楂樼骇
+            // 鑾峰彇鐖剁骇ID
+            String parentId = mdcProduction.getParentId();
+            JSONObject formData = new JSONObject();
+            formData.put("parentId",parentId);
+            String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.PRODUCTION,formData);
+            mdcProduction.setOrgCode(codeArray[0]);
+            String orgType = codeArray[1];
+            mdcProduction.setOrgType(String.valueOf(orgType));
+            mdcProduction.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
+            this.save(mdcProduction);
+
+            //澶勭悊瀛樺湪鐖跺瓙鍏崇郴 mdc鏍囪缁熶竴鐨勯棶棰�
+            //1.mdc鏍囪 涓� 1 寮�鍚� 鐖剁骇鑺傜偣瑕佺粺涓�寮�鍚�
+            //2.mdc鏍囪 涓� 0 鍏抽棴 瀛愮骇鑺傜偣瑕佺粺涓�鍏抽棴  鏂板鎿嶄綔 涓嶅瓨鍦ㄦ鎯呭喌
+            if(StringUtils.isNotBlank(parentId) && CommonConstant.DEFAULT_1.equals(mdcProduction.getMdcFlag())){
+                openParentMdcFlag(parentId);
+            }
+        }
+    }
+
+    /**
+     * updateProductionDataById 瀵瑰簲 edit 鏍规嵁浜х嚎涓婚敭鏉ユ洿鏂板搴旂殑浜х嚎鏁版嵁
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateProductionDataById(MdcProduction mdcProduction) {
+        if (mdcProduction != null) {
+            this.updateById(mdcProduction);
+
+            //澶勭悊瀛樺湪鐖跺瓙鍏崇郴 mdc鏍囪缁熶竴鐨勯棶棰�
+            //1.mdc鏍囪 涓� 1 寮�鍚� 鐖剁骇鑺傜偣瑕佺粺涓�寮�鍚�
+            //2.mdc鏍囪 涓� 0 鍏抽棴 瀛愮骇鑺傜偣瑕佺粺涓�鍏抽棴
+            String parentId = mdcProduction.getParentId();
+            if(StringUtils.isNotBlank(parentId) && CommonConstant.DEFAULT_1.equals(mdcProduction.getMdcFlag())){
+                openParentMdcFlag(parentId);
+            }
+            if(CommonConstant.DEFAULT_0.equals(mdcProduction.getMdcFlag())){
+                //鍏抽棴
+                closeChildrenMdcFlag(mdcProduction.getId());
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 鏍规嵁浜х嚎id鍒犻櫎骞跺垹闄ゅ叾鍙兘瀛樺湪鐨勫瓙绾т骇绾�
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean delete(String id) {
+        List<String> idList = new ArrayList<>();
+        idList.add(id);
+        this.checkChildrenExists(id, idList);
+        boolean result = this.removeByIds(idList);
+        //鏍规嵁浜х嚎id鍒犻櫎鐢ㄦ埛涓庝骇绾垮叧绯�
+        userProductionMapper.delete(new LambdaQueryWrapper<MdcUserProduction>().in(MdcUserProduction::getProId, idList));
+        //鏍规嵁浜х嚎id鍒犻櫎浜х嚎涓庤澶囧叧绯�
+        productionEquipmentMapper.delete(new LambdaQueryWrapper<MdcProductionEquipment>().in(MdcProductionEquipment::getProductionId, idList));
+        return result;
+    }
+
+    /**
+     * 鏍规嵁浜х嚎id鎵归噺鍒犻櫎骞跺垹闄ゅ叾鍙兘瀛樺湪鐨勫瓙绾т骇绾�
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteBatchWithChildren(List<String> ids) {
+        List<String> idList = new ArrayList<>();
+        for (String id : ids) {
+            idList.add(id);
+            this.checkChildrenExists(id, idList);
+        }
+        this.removeByIds(idList);
+        //鏍规嵁浜х嚎id鍒犻櫎鐢ㄦ埛涓庝骇绾垮叧绯�
+        userProductionMapper.delete(new LambdaQueryWrapper<MdcUserProduction>().in(MdcUserProduction::getProId, idList));
+        //鏍规嵁浜х嚎id鍒犻櫎浜х嚎涓庤澶囧叧绯�
+        productionEquipmentMapper.delete(new LambdaQueryWrapper<MdcProductionEquipment>().in(MdcProductionEquipment::getProductionId, idList));
+    }
+
+    /**
+     * 鏍规嵁id鏌ヨ涓嬬骇浜х嚎
+     */
+    @Override
+    public List<MdcProduction> queryProdByPid(String pid) {
+        return this.baseMapper.queryProdByPid(pid);
+    }
+
+    /**
+     * 閫掑綊鏌ヨ鎵�鏈夊瓙鑺傜偣
+     */
+    @Override
+    public List<MdcProduction> recursionChildrenByPid(String pid){
+        List<String> ids=this.recursionChildren(pid);
+        return super.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).in(MdcProduction::getId, ids));
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鑾峰彇浜х嚎涓嬫媺鏍戦�夐」
+     */
+    @Override
+    public List<ProductionIdModel> loadProductionTreeOptions(String userId) {
+        //鑾峰彇鎵�鏈変骇绾挎暟鎹�
+        List<MdcProduction> productionList = this.baseMapper.selectList(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder));
+        //鏍规嵁鐢ㄦ埛id鑾峰彇鎷ユ湁鐨勪骇绾夸俊鎭泦鍚�
+        List<String> productionIds = userProductionMapper.queryProductionIdsByUserId(userId);
+        List<String> allProductionIds = new ArrayList<>();
+        //鎵惧埌鎵�鏈変骇绾縤d鐨勪笂绾d
+        if (productionIds != null && !productionIds.isEmpty()) {
+            for (String productionId : productionIds) {
+                this.getAllProductionIds(productionList, productionId, allProductionIds);
+            }
+        }
+        //杩囨护浜х嚎鏁版嵁
+        List<MdcProduction> list = productionList.stream().filter((MdcProduction mdcProduction) -> allProductionIds.contains(mdcProduction.getId())).collect(Collectors.toList());
+        return FindsProductionsChildrenUtil.wrapTreeDataToProductionIdTreeList(list);
+    }
+
+    /**
+     * 閫掑綊鏌ヨ鎵�鏈夊瓙鑺傜偣id
+     */
+    @Override
+    public List<String> recursionChildren(String productionId) {
+        return this.baseMapper.recursionChildren(productionId);
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鍜岃溅闂磇d鑾峰彇鐢ㄦ埛鎷ユ湁鐨勮溅闂磇d
+     * @param userId
+     * @param productionId
+     * @return
+     */
+    @Override
+    public String findFirstProduction(String userId, String productionId) {
+        return this.baseMapper.findFirstProduction(userId, productionId);
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鏌ヨ鐢ㄦ埛宸ユ鏉冮檺
+     */
+    @Override
+    public String findThreeProductionId(String userId) {
+        return this.baseMapper.findThreeProductionId(userId);
+    }
+
+    /**
+     * delete 鏂规硶璋冪敤 閫掑綊鏌ユ壘瀛愰泦id
+     */
+    private void checkChildrenExists(String id, List<String> idList) {
+        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<>();
+        query.eq(MdcProduction::getParentId, id);
+        List<MdcProduction> productionList = this.list(query);
+        if (productionList != null && !productionList.isEmpty()) {
+            for (MdcProduction production : productionList) {
+                idList.add(production.getId());
+                this.checkChildrenExists(production.getId(), idList);
+            }
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夌殑浜х嚎id锛堝寘鍚墍鏈変笂绾э級
+     */
+    private void getAllProductionIds(List<MdcProduction> productionList, String productionId, List<String> allProductionIds) {
+        if (!allProductionIds.contains(productionId)) {
+            allProductionIds.add(productionId);
+        }
+        for (MdcProduction mdcProduction : productionList) {
+            if (StringUtils.isEmpty(mdcProduction.getParentId())) {
+                continue;
+            }
+            if (productionId.equals(mdcProduction.getId())) {
+                if (!allProductionIds.contains(mdcProduction.getParentId())) {
+                    allProductionIds.add(mdcProduction.getParentId());
+                    getAllProductionIds(productionList, mdcProduction.getParentId(), allProductionIds);
+                }
+            }
+        }
+    }
+
+    /**
+     * 閫氳繃浜х嚎闆嗗悎涓轰骇绾胯缃敤鎴穒d锛岀敤浜庡墠鍙板睍绀�
+     */
+    private void setUserIdsByProList(List<MdcProduction> productionList) {
+        //鏌ヨ璐熻矗閮ㄩ棬涓嶄负绌虹殑鎯呭喌
+        LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
+        query.isNotNull(SysUser::getDepartIds);
+        List<SysUser> users = sysUserMapper.selectList(query);
+        Map<String, Object> map = new HashMap(5);
+        //鍏堝惊鐜竴閬嶆壘鍒颁笉鍚岀殑璐熻矗浜х嚎id
+        for (SysUser user : users) {
+            String productionIds = user.getProductionIds();
+            if (StringUtils.isNotBlank(productionIds)) {
+                String[] productionIdArray = productionIds.split(",");
+                for (String productionId : productionIdArray) {
+                    if (map.containsKey(productionId)) {
+                        String userIds = map.get(productionId) + "," + user.getId();
+                        map.put(productionId, userIds);
+                    } else {
+                        map.put(productionId, user.getId());
+                    }
+                }
+            }
+        }
+        //寰幆浜х嚎闆嗗悎鎵惧埌浜х嚎id瀵瑰簲鐨勮礋璐g敤鎴�
+        for (MdcProduction mdcProduction : productionList) {
+            if (map.containsKey(mdcProduction.getId())) {
+                mdcProduction.setDirectorUserIds(map.get(mdcProduction.getId()).toString());
+            }
+        }
+    }
+
+    /**
+     *  鏌ヨ鎵�鏈夌埗鑺傜偣鍜屾湰鑺傜偣鍚嶇О
+     * @param id
+     * @return
+     */
+    @Override
+    public List<String> findListParentTreeAll(String id){
+        MdcProductionEquipment mdcProductionEquipment=productionEquipmentMapper.selectOne(new QueryWrapper<MdcProductionEquipment>().eq("equipment_id",id));
+        if (mdcProductionEquipment==null) {
+            return null;
+        }
+        List<String> strings = new ArrayList<>();
+        MdcProduction en=super.getById(mdcProductionEquipment.getProductionId());
+        if (en == null) {
+            return null;
+        }
+        strings.add(en.getProductionName());
+        if (StringUtils.isEmpty(en.getParentId())) {
+            return strings;
+        } else {
+            return findListParentTree(en.getParentId(),strings);
+        }
+    }
+
+    //  鏌ヨ鎵�浠ョ埗鑺傜偣
+    @Override
+    public List<String> findListParentTree(String parentId,List<String> stringList){
+        if (StringUtils.isEmpty(parentId)) {
+            return null;
+        }
+        if (stringList == null || stringList.isEmpty()) {
+            stringList = new ArrayList<>();
+        }
+        boolean p = true;
+        if (p) {
+            MdcProduction en = super.getById(parentId);
+            if (en != null) {
+                stringList.add(0,en.getProductionName());
+            }
+            if (StringUtils.isNotBlank(en.getParentId())) {
+                parentId = en.getParentId();
+                findListParentTree(parentId,stringList);
+            } else {
+                p = false;
+                return stringList;
+            }
+        }
+        return stringList;
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛宸插垎閰嶇殑閮ㄩ棬鍒楄〃
+     * @param userId
+     * @return
+     */
+     @Override
+     public Map<String, MdcProduction> getUserAssignedDepart(String userId){
+         if(StrUtil.isEmpty(userId))
+             return null;
+         List<MdcProduction> userPermDepart = this.baseMapper.findAllProductionId(userId);
+         if(userPermDepart == null || userPermDepart.isEmpty())
+             return null;
+         Map<String, MdcProduction> map = new HashMap<>();
+         userPermDepart.forEach(item -> {
+             map.put(item.getId(), item);
+         });
+         return map;
+    }
+
+    /**
+     * 閫氳繃涓�缁刬d鑾峰彇閮ㄩ棬
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<String> findAllProductionIds(List<String> ids){
+        return this.baseMapper.recursionChildrenByList(ids);
+    }
+
+    @Override
+    public List<String> findParentIdsForProduction(String parentId, List<String> idList) {
+        if (StringUtils.isEmpty(parentId)) {
+            return null;
+        }
+        if (idList == null || idList.isEmpty()) {
+            idList = new ArrayList<>();
+        }
+        boolean p = true;
+        if (p) {
+            MdcProduction en = super.getById(parentId);
+            if (en != null) {
+                idList.add(0, en.getId());
+            }
+            if (StringUtils.isNotBlank(en.getParentId())) {
+                parentId = en.getParentId();
+                findParentIdsForProduction(parentId, idList);
+            } else {
+                p = false;
+                return idList;
+            }
+        }
+        return idList;
+    }
+
+    @Override
+    public List<MdcProductionTreeModel> queryTreeListByMdc(String ids) {
+        List<MdcProductionTreeModel> listResult = new ArrayList<>();
+        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<MdcProduction>();
+        query.eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.eq(MdcProduction::getMdcFlag, CommonConstant.DEFAULT_1);
+        if (oConvertUtils.isNotEmpty(ids)) {
+            query.in(true, MdcProduction::getId, ids.split(","));
+        }
+        query.orderByAsc(MdcProduction::getProductionOrder);
+        List<MdcProduction> list = this.list(query);
+        for (MdcProduction production : list) {
+            if (production.getDescription().isEmpty()){
+                production.setDescription("");
+            }
+            listResult.add(new MdcProductionTreeModel(production));
+        }
+        return listResult;
+    }
+
+    @Override
+    public List<MdcProductionTreeModel> queryTreeListByMdc() {
+        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<MdcProduction>();
+        query.eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.eq(MdcProduction::getMdcFlag, CommonConstant.DEFAULT_1);
+        query.orderByAsc(MdcProduction::getProductionOrder);
+        List<MdcProduction> list = this.list(query);
+        //璁剧疆鐢ㄦ埛id锛岃鍓嶅彴鏄剧ず
+        this.setUserIdsByProList(list);
+        //璋冪敤wrapTreeDataToTreeList鏂规硶鐢熸垚鏍戠姸鏁版嵁
+        return FindsProductionsChildrenUtil.wrapTreeDataToTreeList(list);
+    }
+
+    @Override
+    public List<String> findChildren(List<String> mdcProductionIds) {
+        return this.baseMapper.findChildren(mdcProductionIds);
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id鑾峰彇浜х嚎(涓績)鎴栫彮缁勪笅鎷夐�夐」
+     * @param userId
+     * @param productionId
+     * @return
+     */
+    @Override
+    public List<MdcProOptionsVo> loadProductionOptions(String userId, String productionId) {
+        List<MdcProOptionsVo> result = new ArrayList<>();
+        List<MdcProduction> mdcProductionList = this.baseMapper.loadProductionOptions(userId, productionId);
+        if (mdcProductionList != null && !mdcProductionList.isEmpty()) {
+            for (MdcProduction mdcProduction : mdcProductionList) {
+                MdcProOptionsVo vo = new MdcProOptionsVo().convert(mdcProduction);
+                result.add(vo);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public List<MdcProduction> findMdcPros(String userId, String productionId) {
+        return this.baseMapper.loadProductionOptions(userId, productionId);
+    }
+
+    @Override
+    public List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId) {
+        List<MdcProOptionsVo> result = new ArrayList<>();
+        List<String> productionList = this.findChildren(Arrays.asList(productionId.split(",")));
+        if (productionList != null && !productionList.isEmpty()) {
+            List<String> dictValues = this.baseMapper.findTeamValue(userId, productionList);
+            if (dictValues != null && !dictValues.isEmpty()) {
+                List<DictModel> dictModels = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_MDC_STAFF_TEAM);
+                if (dictModels != null && !dictModels.isEmpty()) {
+                    for (DictModel dictModel : dictModels) {
+                        if (dictValues.contains(dictModel.getValue())) {
+                            MdcProOptionsVo vo = new MdcProOptionsVo();
+                            vo.setKey(dictModel.getValue());
+                            vo.setValue(dictModel.getValue());
+                            vo.setTitle(dictModel.getText());
+                            result.add(vo);
+                        }
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public List<String> findProIdsByUId(String userId, List<String> allProductionIds) {
+        return this.baseMapper.findProIdsByUId(userId, allProductionIds);
+    }
+
+    /**
+     * 鎵撳紑 鐖惰妭鐐� 鍙� 浠ヤ笂鐨刴dc鏍囪
+     * @param parentId
+     */
+    private void openParentMdcFlag(String parentId) {
+        List<String> listParentTree = findParentIdsForProduction(parentId, new ArrayList<>());
+        if (!CollectionUtil.isEmpty(listParentTree)) {
+            UpdateWrapper<MdcProduction> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.in("id", listParentTree);
+            updateWrapper.set("mdc_flag", "1");
+            super.update(updateWrapper);
+        }
+    }
+
+    /**
+     * 鍏抽棴鎵�鏈夊瓙鑺傜偣鐨刴dc鏍囪
+     * @param productionId
+     */
+    private void closeChildrenMdcFlag(String productionId) {
+        List<String> childrenList = recursionChildren(productionId);
+        if (!CollectionUtil.isEmpty(childrenList)) {
+            UpdateWrapper<MdcProduction> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.in("id", childrenList);
+            updateWrapper.set("mdc_flag", "0");
+            super.update(updateWrapper);
+        }
+    }
+
+    @Override
+    public List<String> findChildByProId(String productionId) {
+        return this.baseMapper.findChildByProId(productionId);
+    }
+
+    @Override
+    public String findProName(String equipmentId) {
+        return this.baseMapper.findProName(equipmentId);
+    }
+
+    @Override
+    public MdcProduction findByOrgCode(String orgCode){
+        return this.baseMapper.selectOne(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getOrgCode, orgCode));
+    }
+}

--
Gitblit v1.9.3