package com.lxzn.nc.service.impl; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.lxzn.auth.JwtUtil; import com.lxzn.framework.domain.nc.*; import com.lxzn.framework.domain.nc.request.DocInfoQueryRequest; import com.lxzn.framework.domain.nc.response.PartsInfoCode; import com.lxzn.framework.domain.nc.response.ProductInfoCode; import com.lxzn.framework.domain.ucenter.Department; import com.lxzn.framework.domain.ucenter.User; import com.lxzn.framework.domain.ucenter.response.UcenterCode; import com.lxzn.framework.domain.webservice.DispatchInfo; import com.lxzn.framework.exception.ExceptionCast; import com.lxzn.framework.model.response.CommonCode; import com.lxzn.framework.utils.ValidateUtil; import com.lxzn.nc.dao.PartsInfoMapper; import com.lxzn.nc.service.*; import org.apache.commons.collections4.ListUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @Service public class PartsInfoServiceImpl extends ServiceImpl implements IPartsInfoService { @Autowired private IProductInfoService productInfoService; @Autowired private IComponentInfoService componentInfoService; @Autowired private IPartsPermissionService partsPermissionService; @Autowired private IPermissionStreamService permissionStreamService; @Autowired private IPartsDepartmentService partsDepartmentService; @Autowired private IProcessStreamService processStreamService; @Autowired private IDocInfoService docInfoService; @Autowired private INcLogInfoService iNcLogInfoService; @Override @Transactional(rollbackFor = {Exception.class}) public boolean addPartsInfo(PartsInfo partsInfo) { if (partsInfo == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); if (!ValidateUtil.validateString(partsInfo.getPartsName())) ExceptionCast.cast(PartsInfoCode.PARTS_NAME_NONE); if (!ValidateUtil.validateString(partsInfo.getProductId())) ExceptionCast.cast(PartsInfoCode.PARTS_PRODUCT_NONE); if (!ValidateUtil.validateString(partsInfo.getComponentId())) ExceptionCast.cast(PartsInfoCode.PARTS_COMPONENT_NONE); if (!ValidateUtil.validateString(partsInfo.getPartsCode())) ExceptionCast.cast(PartsInfoCode.PARTS_CODE_NONE); PartsInfo en = getByCode(partsInfo.getPartsCode()); if (en != null) ExceptionCast.cast(PartsInfoCode.PARTS_IS_EXIST); String userId = JwtUtil.getUserId(); if (!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); ProductInfo productInfo = productInfoService.getById(partsInfo.getProductId()); if (productInfo == null) ExceptionCast.cast(PartsInfoCode.PARTS_PRODUCT_NONE); ComponentInfo componentInfo = componentInfoService.getById(partsInfo.getComponentId()); if (componentInfo == null) ExceptionCast.cast(PartsInfoCode.PARTS_COMPONENT_NONE); partsInfo.setPartsStatus(1); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("产品结构树"); //类型 ncLogInfo.setOperateType(2); //日志内容 ncLogInfo.setLogContent("零件名称:" + partsInfo.getPartsName() + ",零件代号:" + partsInfo.getPartsCode()); iNcLogInfoService.saveLogNcInfos(ncLogInfo); boolean b = super.save(partsInfo); List oldDepartPermList = permissionStreamService.getByComponentId(componentInfo.getProductId(), componentInfo.getComponentId()); if (oldDepartPermList != null && !oldDepartPermList.isEmpty()) { List partsDepartmentList = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); oldDepartPermList.forEach(item -> { PartsDepartment pd = new PartsDepartment(); pd.setDepartId(item.getDepartId()); pd.setPartsId(partsInfo.getPartsId()); partsDepartmentList.add(pd); PermissionStream perm = new PermissionStream(); perm.setDepartId(item.getDepartId()); perm.setProductId(partsInfo.getProductId()); perm.setComponentId(partsInfo.getComponentId()); perm.setPartsId(partsInfo.getPartsId()); permissionStreamList.add(perm); }); if (!partsDepartmentList.isEmpty()) { b = partsDepartmentService.saveBatch(partsDepartmentList); if (!b) ExceptionCast.cast(CommonCode.FAIL); } if (!permissionStreamList.isEmpty()) { b = permissionStreamService.saveBatch(permissionStreamList); if (!b) ExceptionCast.cast(CommonCode.FAIL); } } if (!b) ExceptionCast.cast(CommonCode.FAIL); PartsPermission permission = new PartsPermission(); permission.setPartsId(partsInfo.getPartsId()); permission.setUserId(userId); b = partsPermissionService.save(permission); if (!b) ExceptionCast.cast(CommonCode.FAIL); //添加默认工序 ProcessStream processStream = new ProcessStream(); processStream.setProductId(partsInfo.getProductId()); processStream.setComponentId(partsInfo.getComponentId()); processStream.setPartsId(partsInfo.getPartsId()); processStream.setProcessCode("1"); b = processStreamService.save(processStream); if (!b) ExceptionCast.cast(CommonCode.FAIL); //添加用户权限 PermissionStream stream = new PermissionStream(); stream.setProductId(partsInfo.getProductId()); stream.setComponentId(partsInfo.getComponentId()); stream.setPartsId(partsInfo.getPartsId()); stream.setUserId(userId); //添加日志 NcLogInfo ncLogInfogx = new NcLogInfo(); //模块 ncLogInfogx.setModuleInfo("产品结构树"); //类型 ncLogInfogx.setOperateType(2); //日志内容 ncLogInfogx.setLogContent("零件名称:" + partsInfo.getPartsName() + "生成默认工序,工序号:" + processStream.getProcessCode()); iNcLogInfoService.saveLogNcInfos(ncLogInfogx); return permissionStreamService.save(stream); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean editPartsInfo(String id, PartsInfo partsInfo) { if (!ValidateUtil.validateString(id) || partsInfo == null) ExceptionCast.cast(CommonCode.SUCCESS); String userId = JwtUtil.getUserId(); if (!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); PartsInfo en = super.getById(id); if (en == null) ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST); partsInfo.setPartsId(id); partsInfo.setPartsStatus(null); partsInfo.setProductId(null); partsInfo.setComponentId(null); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("产品结构树"); //类型 ncLogInfo.setOperateType(3); //修改保存备注 ncLogInfo.setRemark(JSONObject.toJSONString(en)); //日志内容 ncLogInfo.setLogContent("修改部件名称:" + productInfoService.getById(en.getProductId()).getProductName() + "子集零件"); iNcLogInfoService.saveLogNcInfos(ncLogInfo); boolean b = super.updateById(partsInfo); if (!b) return false; PartsPermission permission = partsPermissionService.getByPartsIdAndUserId(id, userId); if (permission == null) { permission = new PartsPermission(); permission.setPartsId(id); permission.setUserId(userId); b = partsPermissionService.save(permission); if (!b) return false; } PermissionStream stream = permissionStreamService.getByPartsIdAndUserId(en.getProductId(), en.getComponentId(), id, userId); if (stream == null) { stream = new PermissionStream(); stream.setProductId(en.getProductId()); stream.setComponentId(en.getComponentId()); stream.setPartsId(id); stream.setUserId(userId); return permissionStreamService.save(stream); } return b; } @Override public List getByUserPerms(String userId) { if (!ValidateUtil.validateString(userId)) return Collections.emptyList(); return super.getBaseMapper().getByUserPerms(userId); } @Override public List getByUserPerms(String userId, String componentId, String queryParam) { if (!ValidateUtil.validateString(userId)) return Collections.emptyList(); //去除权限 TODO //return super.getBaseMapper().getByUserPermsAndParams(userId, componentId, queryParam); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); if (ValidateUtil.validateString(componentId)) { queryWrapper.eq(PartsInfo::getComponentId, componentId); } if (ValidateUtil.validateString(queryParam)) { queryWrapper.and(wrapper -> wrapper.like(PartsInfo::getPartsCode, queryParam) .or() .like(PartsInfo::getPartsName, queryParam)); } queryWrapper.orderByAsc(PartsInfo::getCreateTime); return super.list(queryWrapper); } @Override public List getByProductId(String productId) { if (!ValidateUtil.validateString(productId)) return null; return super.lambdaQuery().eq(PartsInfo::getProductId, productId).list(); } @Override public List getByComponentId(String productId, String componentId) { if (!ValidateUtil.validateString(productId) || !ValidateUtil.validateString(componentId)) return null; return super.lambdaQuery().eq(PartsInfo::getProductId, productId).eq(PartsInfo::getComponentId, componentId).list(); } @Override public boolean deleteCollection(List partsInfoList) { if (partsInfoList == null || partsInfoList.isEmpty()) ExceptionCast.cast(PartsInfoCode.PARTS_DELETE_ERROR); partsInfoList.forEach(item -> { boolean b = partsPermissionService.deleteByPartsId(item.getPartsId()); if (!b) ExceptionCast.cast(PartsInfoCode.PARTS_DELETE_ERROR); b = partsDepartmentService.deleteByPartsId(item.getPartsId()); if (!b) ExceptionCast.cast(PartsInfoCode.PARTS_DELETE_ERROR); b = permissionStreamService.deleteUserPermsByPartsId(item.getProductId(), item.getComponentId(), item.getPartsId()); if (!b) ExceptionCast.cast(PartsInfoCode.PARTS_DELETE_ERROR); b = permissionStreamService.deleteDepartPermsByPartsId(item.getProductId(), item.getComponentId(), item.getPartsId()); if (!b) ExceptionCast.cast(PartsInfoCode.PARTS_DELETE_ERROR); b = super.removeById(item.getPartsId()); if (!b) ExceptionCast.cast(PartsInfoCode.PARTS_DELETE_ERROR); }); return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deletePartsInfo(String partsId) { if (!ValidateUtil.validateString(partsId)) ExceptionCast.cast(CommonCode.INVALID_PARAM); PartsInfo partsInfo = super.getById(partsId); if (partsInfo == null) ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST); List processStreams = processStreamService.findByPartsId(partsId); if (processStreams != null && !processStreams.isEmpty()) ExceptionCast.cast(PartsInfoCode.PARTS_PROCESS_EXIST); boolean b = partsPermissionService.deleteByPartsId(partsInfo.getPartsId()); if (!b) ExceptionCast.cast(CommonCode.FAIL); b = partsDepartmentService.deleteByPartsId(partsInfo.getPartsId()); if (!b) ExceptionCast.cast(CommonCode.FAIL); b = permissionStreamService.deleteUserPermsByPartsId(partsInfo.getProductId(), partsInfo.getComponentId(), partsInfo.getPartsId()); if (!b) ExceptionCast.cast(CommonCode.FAIL); b = permissionStreamService.deleteDepartPermsByPartsId(partsInfo.getProductId(), partsInfo.getComponentId(), partsInfo.getPartsId()); if (!b) ExceptionCast.cast(CommonCode.FAIL); b = docInfoService.deleteByPartsId(partsInfo.getPartsId()); if (!b) ExceptionCast.cast(CommonCode.FAIL); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("产品结构树"); //类型 ncLogInfo.setOperateType(4); //日志内容 ncLogInfo.setLogContent("零件名称:" + partsInfo.getPartsName()); iNcLogInfoService.saveLogNcInfos(ncLogInfo); return super.removeById(partsInfo.getPartsId()); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignAddUser(PartsInfo partsInfo, Collection userList) { if (partsInfo == null || userList == null || userList.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); List permissionList = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); userList.forEach(item -> { PartsPermission en = partsPermissionService.getByPartsIdAndUserId(partsInfo.getPartsId(), item.getUserId()); if (en == null) { en = new PartsPermission(); en.setUserId(item.getUserId()); en.setPartsId(partsInfo.getPartsId()); permissionList.add(en); } PermissionStream stream = permissionStreamService.getByPartsIdAndUserId(partsInfo.getProductId(), partsInfo.getComponentId(), partsInfo.getPartsId(), item.getUserId()); if (stream == null) { stream = new PermissionStream(); stream.setUserId(item.getUserId()); stream.setProductId(partsInfo.getProductId()); stream.setComponentId(partsInfo.getComponentId()); stream.setPartsId(partsInfo.getPartsId()); permissionStreamList.add(stream); } }); if (!permissionList.isEmpty()) { boolean b = partsPermissionService.saveBatch(permissionList); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } if (!permissionStreamList.isEmpty()) { boolean b = permissionStreamService.saveBatch(permissionStreamList); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignRemoveUser(PartsInfo partsInfo, Collection userList) { if (partsInfo == null || userList == null || userList.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); List permissionList = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); userList.forEach(item -> { PartsPermission en = partsPermissionService.getByPartsIdAndUserId(partsInfo.getPartsId(), item.getUserId()); if (en != null) { permissionList.add(en); } PermissionStream stream = permissionStreamService.getByPartsIdAndUserId(partsInfo.getProductId(), partsInfo.getComponentId(), partsInfo.getPartsId(), item.getUserId()); if (stream != null) { permissionStreamList.add(stream); } }); //清空用户权限校验 /*List exitsList = partsPermissionService.getByPartsId(partsInfo.getPartsId()); if(exitsList.size() <= permissionList.size()) ExceptionCast.cast(PartsInfoCode.PARTS_USER_NONE);*/ if (!permissionList.isEmpty()) { boolean b = partsPermissionService.removeByCollection(permissionList); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } if (!permissionStreamList.isEmpty()) { boolean b = permissionStreamService.removeByCollection(permissionStreamList); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignAddDepart(PartsInfo partsInfo, Collection departmentList) { if (partsInfo == null || departmentList == null || departmentList.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); List partsDepartments = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); departmentList.forEach(item -> { PartsDepartment en = partsDepartmentService.getByPartsIdAndDepartId(partsInfo.getPartsId(), item.getDepartId()); if (en == null) { en = new PartsDepartment(); en.setDepartId(item.getDepartId()); en.setPartsId(partsInfo.getPartsId()); partsDepartments.add(en); } PermissionStream stream = permissionStreamService.getByPartsIdAndDepartId(partsInfo.getProductId(), partsInfo.getComponentId(), partsInfo.getPartsId(), item.getDepartId()); if (stream == null) { stream = new PermissionStream(); stream.setDepartId(item.getDepartId()); stream.setProductId(partsInfo.getProductId()); stream.setComponentId(partsInfo.getComponentId()); stream.setPartsId(partsInfo.getPartsId()); permissionStreamList.add(stream); } }); if (!partsDepartments.isEmpty()) { boolean b = partsDepartmentService.saveBatch(partsDepartments); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } if (!permissionStreamList.isEmpty()) { boolean b = permissionStreamService.saveBatch(permissionStreamList); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignRemoveDepart(PartsInfo partsInfo, Collection departmentList) { if (partsInfo == null || departmentList == null || departmentList.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); List partsDepartments = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); departmentList.forEach(item -> { PartsDepartment en = partsDepartmentService.getByPartsIdAndDepartId(partsInfo.getPartsId(), item.getDepartId()); if (en != null) { partsDepartments.add(en); } PermissionStream stream = permissionStreamService.getByPartsIdAndDepartId(partsInfo.getProductId(), partsInfo.getComponentId(), partsInfo.getPartsId(), item.getDepartId()); if (stream != null) { permissionStreamList.add(stream); } }); if (!partsDepartments.isEmpty()) { boolean b = partsDepartmentService.removeByCollection(partsDepartments); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } if (!permissionStreamList.isEmpty()) { boolean b = permissionStreamService.removeByCollection(permissionStreamList); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } return true; } @Override public List getByComponentIdList(String productId, List componentIds) { if (!ValidateUtil.validateString(productId) || componentIds == null || componentIds.isEmpty()) return null; List list = new ArrayList<>(); if (componentIds.size() > 1000) { List> compListArr = ListUtils.partition(componentIds, 100); for (List compList : compListArr) { List partsList = super.lambdaQuery().eq(PartsInfo::getProductId, productId).in(PartsInfo::getComponentId, compList).list(); if (partsList != null && !partsList.isEmpty()) { list.addAll(partsList); } } } else { list = super.lambdaQuery().eq(PartsInfo::getProductId, productId).in(PartsInfo::getComponentId, componentIds).list(); } if (list == null || list.isEmpty()) return null; return list; } @Override public PartsInfo getByCode(String partsCode) { if(ValidateUtil.validateString(partsCode)) { List list = super.lambdaQuery().eq(PartsInfo::getPartsCode, partsCode).list(); if(list == null || list.isEmpty()) return null; return list.get(0); } return null; } @Override @Transactional public PartsInfo getByCodeAndComIdList(String partsCode, List componentIds) { if(ValidateUtil.validateString(partsCode)&& !componentIds.isEmpty() && componentIds.size()>0) { List list = super.lambdaQuery().eq(PartsInfo::getPartsCode, partsCode).in(PartsInfo::getComponentId,componentIds). list(); if(list == null || list.isEmpty()) return null; return list.get(0); } return null; } /** * 通过DispatchInfo获取nc文件ids * * @param dispatchInfo * @return */ @Override public List getNcIdsByDispatchInfo(DispatchInfo dispatchInfo) { List partsInfoList = this.list(new LambdaQueryWrapper() .eq(PartsInfo::getPartsName, dispatchInfo.getMesId()).eq(PartsInfo::getPartsCode, dispatchInfo.getMdsItemCode())); if (partsInfoList == null || partsInfoList.isEmpty()) { return null; } else { //查询零件下属工序信息 List processStreamList = processStreamService.list(new LambdaQueryWrapper() .in(ProcessStream::getPartsId, partsInfoList.stream().map(PartsInfo::getPartsId).collect(Collectors.toList())) .eq(ProcessStream::getProcessCode, dispatchInfo.getOperationSeqNo()) .eq(ProcessStream::getCraftVersion, dispatchInfo.getRevisionNo())); if (processStreamList == null || processStreamList.isEmpty()) { return null; } else { String ids = processStreamList.stream().map(ProcessStream::getProcessId).collect(Collectors.joining(",")); DocInfoQueryRequest docQuery = new DocInfoQueryRequest(); docQuery.setAttributionIds(ids); docQuery.setDocClassCode("NC"); docQuery.setAttributionType(5); List docInfoList = docInfoService.list(new LambdaQueryWrapper().in(DocInfo::getDocId, docQuery.getAttributionIds()) .eq(DocInfo::getDocClassCode, docQuery.getDocClassCode()).eq(DocInfo::getAttributionType, docQuery.getAttributionType())); if (docInfoList == null || docInfoList.isEmpty()) { return null; } else { return docInfoList; } } } } }