package com.hssx.cloudmodel.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hssx.cloudmodel.constant.Constant;
import com.hssx.cloudmodel.entity.*;
import com.hssx.cloudmodel.entity.vo.MouldVO;
import com.hssx.cloudmodel.entity.vo.ProjectVO;
import com.hssx.cloudmodel.entity.vo.UserVO;
import com.hssx.cloudmodel.mapper.*;
import com.hssx.cloudmodel.service.ProjectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hssx.cloudmodel.util.HttpRespMsg;
import com.hssx.cloudmodel.util.ListUtil;
import com.hssx.cloudmodel.util.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.jws.soap.SOAPBinding;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author 吴涛涛
* @since 2019-07-27
*/
@Service
public class ProjectServiceImpl extends ServiceImpl implements ProjectService {
@Resource
ProjectMapper projectMapper;
@Resource
ProjectUserMapper projectUserMapper;
@Resource
UserMapper userMapper;
@Resource
CompanyMapper companyMapper;
@Resource
CustomCompanyMapper customCompanyMapper;
@Resource
MouldMapper mouldMapper;
@Resource
ProjectApproveMapper projectApproveMapper;
@Resource
PowerMapper powerMapper;
@Override
public HttpRespMsg addAndUpdateProject(Project project, Integer flag, User user, String userIds,
String customerCompanyIds, String customerCompanyNames, String modelIds,
Integer customerApproverId, Integer ownerApproverId) {
HttpRespMsg msg = new HttpRespMsg();
if (user != null) {
QueryWrapper qw = new QueryWrapper<>();
qw.orderByDesc("id").last("limit 1");
Project lastProject = projectMapper.selectOne(qw);
if (flag == 0) {
synchronized (this) {
int count = 1;
if (lastProject != null) {
//YMXM201903220001
String numStr = lastProject.getProjectNo().substring(13);
int num = Integer.valueOf(numStr).intValue();
count += num;
}
long time = System.currentTimeMillis();
Company company = companyMapper.selectById(user.getCompanyId());
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String seq = sdf.format(time) + String.format("%04d", count);
project.setCreatorId(user.getId());
project.setCreator(user.getUsername());
project.setOwnerCompany(user.getCompanyId());
project.setOwnerCompanyName(company.getCompanyName());
project.setProjectNo(Constant.PROJECT_PREFIX + seq);
projectMapper.insert(project);
//添加生产方关联公司
if (customerCompanyIds != null && !"".equals(customerCompanyIds) && customerCompanyNames != null && !"".equals(customerCompanyNames)) {
List ides = ListUtil.convertIntegerIdsArrayToList(customerCompanyIds);
String[] split = customerCompanyNames.split(",");
int index = 0;
for (String cusCompany : split) {
CustomCompany customCompany = new CustomCompany();
customCompany.setCompanyId(ides.get(index));
customCompany.setCompanyName(cusCompany);
customCompany.setProjectId(project.getId());
customCompanyMapper.insert(customCompany);
index++;
}
}
//添加模具
if (modelIds != null && !"".equals(modelIds)) {
List modelList = ListUtil.convertIntegerIdsArrayToList(modelIds);
int index = 1;
if (modelList.size() > 0) {
for (Integer id : modelList) {
Mould mould = new Mould();
mould.setId(id);
mould.setProjectId(project.getId());
mould.setBelongProjectGrade(index / modelList.size() + "");
mouldMapper.updateById(mould);
}
}
}
}
} else if (flag == 1) {
projectMapper.updateById(project);
//删除参与人与项目项目经理相同id的人
projectUserMapper.delete(new QueryWrapper().eq("user_id", project.getManagerId()).eq("project_id", project.getId()));
//删除之前添加的生产方公司
customCompanyMapper.delete(new QueryWrapper().eq("project_id", project.getId()));
//重新添加生产方公司
if (customerCompanyIds != null && !"".equals(customerCompanyIds) && customerCompanyNames != null && !"".equals(customerCompanyNames)) {
List ides = ListUtil.convertIntegerIdsArrayToList(customerCompanyIds);
String[] split = customerCompanyNames.split(",");
int index = 0;
for (String cusCompany : split) {
CustomCompany customCompany = new CustomCompany();
customCompany.setCompanyId(ides.get(index));
customCompany.setCompanyName(cusCompany);
customCompany.setProjectId(project.getId());
customCompanyMapper.insert(customCompany);
index++;
}
}
//删除之前的项目审批人
projectApproveMapper.delete(new QueryWrapper().eq("project_id", project.getId()));
//删除权限表里的审批权限数据
powerMapper.delete(new QueryWrapper().eq("project_id", project.getId()).eq("power_type", Constant.APPROVAL_AUTHORITY));
//删除之前项目参与人的下载权限
projectMapper.selectById(project.getId());
List approverIds = projectApproveMapper.selectList(new QueryWrapper().eq("project_id", project.getId()))
.stream()
.map(ProjectApprove::getApproverId)
.collect(Collectors.toList());
approverIds.add(-1);
powerMapper.delete(new QueryWrapper().in("user_id", approverIds));
//重新添加审批人
//1.添加资产方审批人
if (null != customerApproverId) {
User customerExaminer = userMapper.selectById(customerApproverId);
Company company = companyMapper.selectById(customerExaminer.getCompanyId());
ProjectApprove projectApprove = new ProjectApprove();
projectApprove.setApproverId(customerExaminer.getId());
projectApprove.setApproverName(customerExaminer.getUsername());
projectApprove.setCompanyId(customerExaminer.getCompanyId());
projectApprove.setCompanyName(company.getCompanyName());
projectApprove.setProjectId(project.getId());
projectApprove.setSubordinateType(customerExaminer.getSubordinateType());
projectApproveMapper.insert(projectApprove);
Power power = new Power();
power.setUserId(customerExaminer.getId());
power.setProjectId(project.getId());
power.setPowerType(Constant.APPROVAL_AUTHORITY);
powerMapper.insert(power);
//审批人默认有下载权限
power.setUserId(customerExaminer.getId());
power.setProjectId(project.getId());
power.setPowerType(Constant.DOWNLOAD_AUTHORITY);
powerMapper.insert(power);
}
if (null != ownerApproverId) {
//2.添加生产方审批人
User ownerExaminer = userMapper.selectById(ownerApproverId);
Company company = companyMapper.selectById(ownerExaminer.getCompanyId());
ProjectApprove ownerProjectApprove = new ProjectApprove();
ownerProjectApprove.setApproverId(ownerExaminer.getId());
ownerProjectApprove.setApproverName(ownerExaminer.getUsername());
ownerProjectApprove.setCompanyId(ownerExaminer.getCompanyId());
ownerProjectApprove.setCompanyName(company.getCompanyName());
ownerProjectApprove.setProjectId(project.getId());
ownerProjectApprove.setSubordinateType(ownerExaminer.getSubordinateType());
projectApproveMapper.insert(ownerProjectApprove);
Power power = new Power();
power.setUserId(ownerExaminer.getId());
power.setProjectId(project.getId());
power.setPowerType(Constant.APPROVAL_AUTHORITY);
powerMapper.insert(power);
//审批人默认有下载权限
power.setUserId(ownerExaminer.getId());
power.setProjectId(project.getId());
power.setPowerType(Constant.DOWNLOAD_AUTHORITY);
powerMapper.insert(power);
}
//删除之前分配的人员
QueryWrapper qwPro = new QueryWrapper<>();
qwPro.eq("project_id", project.getId());
projectUserMapper.delete(qwPro);
//再次重新分配
this.handOutProject(project, userIds);
//删除之前分配与项目关联的模具,即将之前的关联项目id修改成未关联
mouldMapper.updateMouldByProjectId(project);
//再次模具的分配
if (modelIds != null && !"".equals(modelIds)) {
List modelList = ListUtil.convertIntegerIdsArrayToList(modelIds);
int index = 1;
if (modelList.size() > 0) {
for (Integer id : modelList) {
Mould mould = new Mould();
mould.setId(id);
mould.setProjectId(project.getId());
mould.setBelongProjectGrade(index / modelList.size() + "");
mouldMapper.updateById(mould);
}
}
}
}
} else {
msg.setError("当前角色涉及权限问题,请重新登录");
}
return msg;
}
@Override
public HttpRespMsg handOutProject(Project project, String userIds) {
HttpRespMsg msg = new HttpRespMsg();
Project pro = projectMapper.selectById(project.getId());
List ids = new ArrayList<>();
if (userIds != null && userIds != "") {
List list = ListUtil.convertLongIdsArrayToList(userIds);
if (list().size() > 0) {
for (String id : list) {
User user = userMapper.selectById(id);
ProjectUser projectUser = new ProjectUser();
projectUser.setUserId(Integer.parseInt(id));
projectUser.setProjectId(project.getId());
projectUser.setSubordinate(user.getSubordinateType());
projectUserMapper.insert(projectUser);
}
}
} else {
msg.setError("用户id不能为null和空");
}
return msg;
}
@Override
public HttpRespMsg getList(String keyName, PageUtil page, User currentUser) {
HttpRespMsg msg = new HttpRespMsg();
if (currentUser != null) {
PageHelper.startPage(page.getPageNum(), page.getPageSize());
List projects = projectMapper.getProjectListByUid(keyName, currentUser);
PageInfo pageInfos = new PageInfo<>(projects);
msg.data = pageInfos;
} else {
msg.setError("当前用户不存,或涉及到权限问题,请重新登录");
}
QueryWrapper qw = new QueryWrapper<>();
qw.select("project_name", "creator", "charger", "indate");
if (keyName != null) {
qw.like("project_name", keyName);
}
return msg;
}
@Override
public HttpRespMsg getUserByCompanyIdOrSubordinateType(User user) {
HttpRespMsg msg = new HttpRespMsg();
List users = new ArrayList<>();
QueryWrapper qw = new QueryWrapper<>();
if (user.getCompanyId() != null) {
qw.eq("company_id", user.getCompanyId());
} else if (user.getSubordinateType() != null) {
qw.eq("subordinate_type", user.getSubordinateType());
}
users = userMapper.selectList(qw);
msg.data = users;
return msg;
}
@Override
public HttpRespMsg getProjectDetail(Project project, String token) {
Map map = new HashMap<>();
HttpRespMsg msg = new HttpRespMsg();
ProjectVO vo = projectMapper.getProjectById(project.getId());
User currentUser = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", token));
if (Constant.SYS_PARENT_ID == currentUser.getParentId()) {
//当前人超级管理员 ,对项目只可以浏览
map.put("update", 0);
map.put("download", 0);
map.put("view", 1);
map.put("approve", 0);
} else if (Constant.SYS_ID == currentUser.getParentId()) {
//当前为系统管理员
map.put("update", 1);
map.put("download", 1);
map.put("view", 1);
map.put("approve", 0);
} else if (vo.getManagerId() == currentUser.getId()) {
//当前人是该项目的项目经理
Integer approve = 0;
if (projectApproveMapper.selectCount(new QueryWrapper().eq("approver_id", currentUser.getId())) > 0) {
//查看当前项目经理是否为审批人
approve = 1;
}
map.put("update", 1);
map.put("download", 1);
map.put("view", 1);
map.put("approve", approve);
} else if (projectApproveMapper.selectCount(new QueryWrapper().eq("approver_id", currentUser.getId())) > 0) {
//是否为审批人
//该项目的参与人
Integer update = 0;
Integer download = 0;
Integer view = 0;
Integer approve = 1;
List powers = powerMapper.selectList(new QueryWrapper().eq("project_id", project.getId()).eq("user_id", currentUser.getId()));
if (powers.size() > 0) {
for (Power power : powers) {
if (power.getPowerType() == 0) {
update = 1;
} else if (power.getPowerType() == 1) {
download = 1;
} else if (power.getPowerType() == 2) {
view = 1;
} else {
approve = 1;
}
}
}
map.put("update", update);
map.put("download", download);
map.put("view", view);
map.put("approve", approve);
} else {
//该项目的参与人
Integer update = 0;
Integer download = 0;
Integer view = 0;
Integer approve = 0;
List powers = powerMapper.selectList(new QueryWrapper().eq("project_id", project.getId()).eq("user_id", currentUser.getId()));
if (powers.size() > 0) {
for (Power power : powers) {
if (power.getPowerType() == 0) {
update = 1;
} else if (power.getPowerType() == 1) {
download = 1;
} else if (power.getPowerType() == 2) {
view = 1;
} else {
approve = 1;
}
}
}
map.put("update", update);
map.put("download", download);
map.put("view", view);
map.put("approve", approve);
}
List users = projectMapper.getProjectUserById(project.getId());
vo.setParticipateUsers(users);
//处理users按照客户呼和供应商分组
System.out.println("users===>" + users);
// for (User user : users) {
// if (user.getSubordinateType() == 0) {
// //资产方
// vo.getOwnerUsers().add(user);
// } else if (user.getSubordinateType() == 1) {
// //生产方
// vo.getCustomUsers().add(user);
// }
// }
map.put("vo", vo);
msg.data = map;
return msg;
}
@Override
public HttpRespMsg getUserListByCompanyIds(String companyIds, Integer adminId, Integer projectId) {
HttpRespMsg msg = new HttpRespMsg();
QueryWrapper qw = new QueryWrapper();
if (!"".equals(companyIds) && companyIds != null) {
List ids = ListUtil.convertIntegerIdsArrayToList(companyIds);
//该项目的项目经理不能充当参与人
Integer managerId = -1;
if (projectId != null) {
Project project = projectMapper.selectById(projectId);
if (adminId == project.getManagerId()) {
//是本项目的项目项目经理需要返回本人
qw.eq("id", adminId);
}
}
//所选公司下的人
qw.in("company_id", ids);
//不包含资产方的系统管理员
qw.ne("parent_id", Constant.SYS_ID);
msg.data = userMapper.selectList(qw);
}
return msg;
}
@Override
public HttpRespMsg getModelListByCompanyId(User user) {
HttpRespMsg msg = new HttpRespMsg();
QueryWrapper qw = new QueryWrapper<>();
Integer companyId = -1;
if (Constant.SYS_ID == user.getParentId()) {
//此时是admin
User admin = userMapper.selectOne(new QueryWrapper().eq("id", user.getId()));
companyId = admin.getCompanyId();
// qw.eq("company_id", admin.getCompanyId());
} else if (Constant.SYS_PARENT_ID == user.getParentId()) {
//系统管理员
// qw.eq("company_type",Constant.ASSETS_COMPANY);
} else {
//此时是项目经理
User admin = userMapper.selectOne(new QueryWrapper().eq("id", user.getParentId()));
companyId = admin.getCompanyId();
// qw.eq("company_id", admin.getCompanyId());
}
msg.data = mouldMapper.selectListByCompanyId(companyId);
return msg;
}
@Override
public HttpRespMsg getModelListByUser(UserVO userVO, PageUtil page) {
HttpRespMsg msg = new HttpRespMsg();
List set = new ArrayList<>();
set.add(-1);
List moulds = new ArrayList<>();
if (userVO.getId() != null) {
//资产方管理员,获取他公司下的所有模具
PageHelper.startPage(page.getPageNum(), page.getPageSize());
if (Constant.SYS_PARENT_ID == userVO.getParentId()) {
moulds = mouldMapper.selectListByCondition(userVO);
} else if (Constant.SYS_ID == userVO.getParentId()) {
moulds = mouldMapper.selectListByCondition(userVO);
} else {
//普通用户或者项目经理
//充当项目经理参与的项目
if (userVO.getProjectId() != -1) {
set.add(userVO.getProjectId());
moulds = mouldMapper.selectListByConditionByProject(userVO, set);
} else {
QueryWrapper qw = new QueryWrapper<>();
qw.eq("manager_id", userVO.getId());
List projects = projectMapper.selectList(qw);
if (projects.size() > 0) {
for (Project project : projects) {
set.add(project.getId());
}
}
// //充当普通人员参与的项目
List projectUsers = projectUserMapper.selectList(new QueryWrapper().eq("user_id", userVO.getId()));
if (projectUsers.size() > 0) {
for (ProjectUser projectUser : projectUsers) {
set.add(projectUser.getProjectId());
}
}
// //充当审批人员参与的项目
List projectss = projectApproveMapper.selectList(new QueryWrapper().eq("approver_id", userVO.getId()));
if (projectss.size() > 0) {
for (ProjectApprove projectUser : projectss) {
set.add(projectUser.getProjectId());
}
}
moulds = mouldMapper.selectListByConditionByProject(userVO, set);
}
}
PageInfo pageInfo = new PageInfo<>(moulds);
msg.data = pageInfo;
} else {
msg.setError("用户不存在,或者未登录!");
}
return msg;
}
@Override
public HttpRespMsg getListByUser(String token) {
HttpRespMsg msg = new HttpRespMsg();
List ides = new ArrayList<>();
ides.add(-1);
User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", token));
List projects = new ArrayList<>();
if (user != null) {
QueryWrapper qw = new QueryWrapper<>();
qw.select("id", "project_name");
if (Constant.SYS_PARENT_ID == user.getParentId()) {
//系统超级管理员,可获得所有项目
projects = projectMapper.selectList(qw);
} else if (Constant.SYS_ID == user.getParentId()) {
//资产方管理员
qw.eq("owner_company", user.getCompanyId());
projects = projectMapper.selectList(qw);
} else {
QueryWrapper qwPro = new QueryWrapper<>();
qwPro.eq("manager_id", user.getId());
List projectList = projectMapper.selectList(qw);
for (Project project : projectList) {
ides.add(project.getId());
}
//项目经理或者普通用户
List projectUsers = projectUserMapper.selectList(new QueryWrapper().eq("user_id", user.getId()));
for (ProjectUser projectUser : projectUsers) {
ides.add(projectUser.getProjectId());
}
//作为审批人
List projectApproves = projectApproveMapper.selectList(new QueryWrapper().eq("approver_id", user.getId()));
for (ProjectApprove projectApprove : projectApproves) {
ides.add(projectApprove.getProjectId());
}
qw.in("id", ides);
projects = projectMapper.selectList(qw);
}
msg.data = projects;
} else {
msg.setError("当前用户未登录,或者用户不存在");
}
return msg;
}
@Override
public HttpRespMsg getProjectListByUserAndCompany(UserVO userVO) {
HttpRespMsg msg = new HttpRespMsg();
User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", userVO.getToken()));
List list = new ArrayList<>();
if (user == null) {
msg.setError("当前用户未登录,或者用户不存在");
return msg;
} else {
if (Constant.SYS_ID == user.getId()) {
//admin创建人员,获取该公司下的所有项目
list = projectMapper.selectList(new QueryWrapper().eq("owner_company", user.getCompanyId()));
}else{
//项目经理创建人员,获取当前项目经理的充当项目经理的任务
list = projectMapper.selectList(new QueryWrapper().eq("manager_id", user.getId()));
}
msg.data = list;
}
return msg;
}
}