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.ProjectVO;
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.ArrayList;
import java.util.List;
import java.util.Spliterator;
/**
*
* 服务实现类
*
*
* @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;
@Override
public HttpRespMsg addAndUpdateProject(Project project, Integer flag, User user,String userIds,
String customerCompanyIds,String customerCompanyNames,String modelIds) {
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++;
}
}
}
}else if(flag == 1){
projectMapper.updateById(project);
//删除之前分配的人员
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.setId(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<>();
QueryWrapperqw = 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) {
HttpRespMsg msg = new HttpRespMsg();
ProjectVO vo = projectMapper.getProjectById(project.getId());
List users = projectMapper.getProjectUserById(project.getId());
//处理users按照客户呼和供应商分组
for (User user : users) {
if(user.getSubordinateType()==0){
//资产方
vo.getOwnerUsers().add(user);
}else if(user.getSubordinateType()==1){
//生产方
vo.getCustomUsers().add(user);
}
}
msg.data = vo;
return msg;
}
@Override
public HttpRespMsg getUserListByCompanyIds(String companyIds,Integer adminId) {
HttpRespMsg msg = new HttpRespMsg();
if(!"".equals(companyIds) && companyIds != null){
List ids = ListUtil.convertIntegerIdsArrayToList(companyIds);
msg.data = userMapper.selectList(new QueryWrapper().in("company_id",ids).ne("id",adminId));
}
return msg;
}
@Override
public HttpRespMsg getModelListByCompanyId(User user) {
HttpRespMsg msg = new HttpRespMsg();
QueryWrapper qw = new QueryWrapper<>();
if(Constant.SYS_ID == user.getParentId()){
//此时是admin
User admin = userMapper.selectOne(new QueryWrapper().eq("id", user.getId()));
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()));
qw.eq("company_id",admin.getCompanyId());
}
msg.data = mouldMapper.selectList(qw);
return msg;
}
}