Lius
2025-03-27 b0f56573ea27a8798764314c72cf39e9eb0651dc
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
@@ -1,23 +1,31 @@
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.LoginUser;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.util.FillRuleUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.system.entity.*;
import org.jeecg.modules.system.mapper.*;
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;
@@ -45,7 +53,10 @@
    private MdcProductionEquipmentMapper productionEquipmentMapper;
    @Resource
    private DncDeviceGroupPermissionMapper dncDeviceGroupPermissionMapper;
    private ISysParamsService sysParamsService;
    @Resource
    private ISysDictService sysDictService;
    /**
     * queryTreeList 对应 queryTreeList 查询所有的产线数据,以树结构形式响应给前端
     */
@@ -60,6 +71,45 @@
        this.setUserIdsByProList(list);
        //调用wrapTreeDataToTreeList方法生成树状数据
        return FindsProductionsChildrenUtil.wrapTreeDataToTreeList(list);
    }
    /**
     * 查询所有产线信息,并分节点进行显示(添加系统配置)
     */
    @Override
    public List<MdcProductionTreeModel> queryTreeListByConfig(){
        SysParams sysParams = sysParamsService.getSysPramBySettingKey("dnc_production");
        LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<MdcProduction>();
        if (sysParams == null) {
            return null;
        }else {
            if (("0").equals(sysParams.getSettingValue())){
                query.eq(MdcProduction::getOrgType,"2");
                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);
            }
        }
    }
    /**
@@ -138,13 +188,13 @@
            mdcProduction.setOrgType(String.valueOf(orgType));
            mdcProduction.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
            this.save(mdcProduction);
            //新增DNC车间权限
            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
            String userId = user.getId();
            DncDeviceGroupPermission dncDeviceGroupPermission=new DncDeviceGroupPermission();
            dncDeviceGroupPermission.setGroupPermId(mdcProduction.getId());
            dncDeviceGroupPermission.setUserId(userId);
            dncDeviceGroupPermissionMapper.insert(dncDeviceGroupPermission);
            //处理存在父子关系 mdc标记统一的问题
            //1.mdc标记 为 1 开启 父级节点要统一开启
            //2.mdc标记 为 0 关闭 子级节点要统一关闭  新增操作 不存在此情况
            if(StringUtils.isNotBlank(parentId) && CommonConstant.DEFAULT_1.equals(mdcProduction.getMdcFlag())){
                openParentMdcFlag(parentId);
            }
        }
    }
@@ -156,6 +206,18 @@
    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;
@@ -202,6 +264,15 @@
    @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));
    }
    /**
@@ -368,4 +439,167 @@
        }
        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;
    }
    /**
     * 通过一组id获取部门
     * @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<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;
    }
    /**
     * 打开 父节点 及 以上的mdc标记
     * @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);
        }
    }
    /**
     * 关闭所有子节点的mdc标记
     * @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);
        }
    }
}