package org.jeecg.modules.dnc.service.impl;
|
|
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 org.apache.shiro.SecurityUtils;
|
import org.jeecg.common.system.vo.LoginUser;
|
|
import org.jeecg.modules.dnc.exception.ExceptionCast;
|
import org.jeecg.modules.dnc.mapper.ComponentInfoMapper;
|
import org.jeecg.modules.dnc.mapper.PartsInfoMapper;
|
import org.jeecg.modules.dnc.mapper.ProductInfoMapper;
|
import org.jeecg.modules.dnc.response.CommonCode;
|
import org.jeecg.modules.dnc.response.PartsInfoCode;
|
import org.jeecg.modules.dnc.response.ProductInfoCode;
|
import org.jeecg.modules.dnc.response.UcenterCode;
|
|
import org.jeecg.modules.dnc.service.*;
|
import org.jeecg.modules.dnc.ucenter.Department;
|
import org.jeecg.modules.dnc.utils.ValidateUtil;
|
|
import org.jeecg.modules.dnc.entity.*;
|
import org.jeecg.modules.system.entity.SysUser;
|
import org.apache.commons.collections4.ListUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Lazy;
|
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;
|
|
@Service
|
public class PartsInfoServiceImpl extends ServiceImpl<PartsInfoMapper, PartsInfo> implements IPartsInfoService {
|
@Autowired
|
private ProductInfoMapper productInfoMapper;
|
@Autowired
|
private ComponentInfoMapper componentInfoMapper;
|
@Autowired
|
private IPartsPermissionService partsPermissionService;
|
@Autowired
|
private IPermissionStreamService permissionStreamService;
|
@Autowired
|
private IPartsDepartmentService partsDepartmentService;
|
@Autowired
|
@Lazy
|
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);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
if(!ValidateUtil.validateString(userId))
|
ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
|
ProductInfo productInfo = productInfoMapper.selectById(partsInfo.getProductId());
|
if(productInfo == null)
|
ExceptionCast.cast(PartsInfoCode.PARTS_PRODUCT_NONE);
|
ComponentInfo componentInfo = componentInfoMapper.selectById(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<PermissionStream> oldDepartPermList = permissionStreamService.getByComponentId(componentInfo.getProductId(), componentInfo.getComponentId());
|
if(oldDepartPermList != null && !oldDepartPermList.isEmpty()) {
|
List<PartsDepartment> partsDepartmentList = new ArrayList<>();
|
List<PermissionStream> 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);
|
// 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);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
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("修改部件名称:"+productInfoMapper.selectById(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<PartsInfo> getByUserPerms(String userId) {
|
if(!ValidateUtil.validateString(userId))
|
return Collections.emptyList();
|
return super.getBaseMapper().getByUserPerms(userId);
|
}
|
|
@Override
|
public List<PartsInfo> getByUserPerms(String userId, String componentId, String queryParam) {
|
if(!ValidateUtil.validateString(userId))
|
return Collections.emptyList();
|
//去除权限 TODO
|
//return super.getBaseMapper().getByUserPermsAndParams(userId, componentId, queryParam);
|
LambdaQueryWrapper<PartsInfo> 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<PartsInfo> getByProductId(String productId) {
|
if(!ValidateUtil.validateString(productId))
|
return null;
|
return super.lambdaQuery().eq(PartsInfo::getProductId, productId).list();
|
}
|
|
@Override
|
public List<PartsInfo> 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<PartsInfo> 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<ProcessStream> 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<SysUser> userList) {
|
if(partsInfo == null || userList == null || userList.isEmpty())
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
List<PartsPermission> permissionList = new ArrayList<>();
|
List<PermissionStream> permissionStreamList = new ArrayList<>();
|
userList.forEach(item -> {
|
PartsPermission en = partsPermissionService.getByPartsIdAndUserId(partsInfo.getPartsId(), item.getId());
|
if(en == null) {
|
en = new PartsPermission();
|
en.setUserId(item.getId());
|
en.setPartsId(partsInfo.getPartsId());
|
permissionList.add(en);
|
}
|
PermissionStream stream = permissionStreamService.getByPartsIdAndUserId(partsInfo.getProductId(), partsInfo.getComponentId(), partsInfo.getPartsId(), item.getId());
|
if(stream == null) {
|
stream = new PermissionStream();
|
stream.setUserId(item.getId());
|
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<SysUser> userList) {
|
if(partsInfo == null || userList == null || userList.isEmpty())
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
List<PartsPermission> permissionList = new ArrayList<>();
|
List<PermissionStream> permissionStreamList = new ArrayList<>();
|
userList.forEach(item -> {
|
PartsPermission en = partsPermissionService.getByPartsIdAndUserId(partsInfo.getPartsId(), item.getId());
|
if(en != null) {
|
permissionList.add(en);
|
}
|
PermissionStream stream = permissionStreamService.getByPartsIdAndUserId(partsInfo.getProductId(), partsInfo.getComponentId(), partsInfo.getPartsId(), item.getId());
|
if(stream != null) {
|
permissionStreamList.add(stream);
|
}
|
});
|
//清空用户权限校验
|
/*List<PartsPermission> 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<Department> departmentList) {
|
if(partsInfo == null || departmentList == null || departmentList.isEmpty())
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
List<PartsDepartment> partsDepartments = new ArrayList<>();
|
List<PermissionStream> 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<Department> departmentList) {
|
if(partsInfo == null || departmentList == null || departmentList.isEmpty())
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
List<PartsDepartment> partsDepartments = new ArrayList<>();
|
List<PermissionStream> 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<PartsInfo> getByComponentIdList(String productId, List<String> componentIds) {
|
if(!ValidateUtil.validateString(productId) || componentIds == null || componentIds.isEmpty())
|
return null;
|
List<PartsInfo> list = new ArrayList<>();
|
if(componentIds.size() > 1000){
|
List<List<String>> compListArr = ListUtils.partition(componentIds, 100);
|
for(List<String> compList : compListArr){
|
List<PartsInfo> 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<PartsInfo> list = super.lambdaQuery().eq(PartsInfo::getPartsCode, partsCode).list();
|
if(list == null || list.isEmpty())
|
return null;
|
return list.get(0);
|
}
|
return null;
|
}
|
|
}
|