| | |
| | | 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.*; |
| | | 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; |
| | |
| | | @Resource |
| | | private MdcProductionEquipmentMapper productionEquipmentMapper; |
| | | |
| | | @Resource |
| | | private ISysParamsService sysParamsService; |
| | | |
| | | @Resource |
| | | private ISysDictService sysDictService; |
| | | /** |
| | | * queryTreeList 对应 queryTreeList 查询所有的产线数据,以树结构形式响应给前端 |
| | | */ |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | }); |
| | | 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); |
| | | } |
| | | } |
| | | } |