package org.jeecg.modules.project.service.impl;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.UUID;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import org.jeecg.common.util.DateUtils;
|
import org.jeecg.modules.excel.ExcelUtils;
|
import org.jeecg.modules.project.entity.ProProject;
|
import org.jeecg.modules.project.entity.ProProjectLink;
|
import org.jeecg.modules.project.entity.ProSummary;
|
import org.jeecg.modules.project.mapper.ProProjectLinkMapper;
|
import org.jeecg.modules.project.mapper.ProProjectMapper;
|
import org.jeecg.modules.project.mapper.ProSummaryMapper;
|
import org.jeecg.modules.project.service.IProProjectService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@Service
|
@Slf4j
|
public class ProProjectService extends ServiceImpl<ProProjectMapper, ProProject> implements IProProjectService {
|
@Autowired
|
private ProProjectMapper projectMapper;
|
@Autowired
|
private ProProjectLinkMapper linkMapper;
|
|
@Autowired
|
private ProSummaryMapper summaryMapper;
|
|
@Autowired
|
private ExcelUtils excelUtils;
|
|
@Override
|
@Transactional
|
public Integer importExcel(List<Map<Integer, String>> listMap) {
|
|
ProProject project = excelUtils.CoverProProject(listMap);
|
List<ProProjectLink> linkList = project.getLinkList();
|
List<ProProjectLink> linkList1 = new ArrayList<>();
|
List<ProProjectLink> linkList2 = new ArrayList<>();
|
List<ProProjectLink> linkList3 = new ArrayList<>();
|
List<ProProjectLink> linkList4 = new ArrayList<>();
|
List<ProProjectLink> linkList5 = new ArrayList<>();
|
List<ProProjectLink> linkList6 = new ArrayList<>();
|
|
Map<String, Object> map = new HashMap<>();
|
map.put("xmbh", project.getXmbh());
|
List<ProProject> proProjects = projectMapper.selectByMap(map);
|
if (proProjects != null && proProjects.size() > 0) {
|
return 0;
|
}
|
|
projectMapper.insert(project);
|
//插入项目概述与预测
|
ProSummary summary = project.getSummary();
|
if (project.getId() != null) {
|
summary.setPro(project.getId());
|
summaryMapper.insert(summary);
|
}
|
|
|
|
/*
|
ProSummary mary = new ProSummary();
|
mary.setPro(project.getId());
|
mary.setGs(project.getBzgz());
|
mary.setYc(project.getXzgz());
|
//设置类型为 周计划
|
mary.setType(1);
|
summaryMapper.insert(mary);
|
*/
|
|
|
for (int i = 0; i < linkList.size(); i++) {
|
ProProjectLink link = linkList.get(i);
|
String s = UUID.randomUUID().toString().replaceAll("-", "");
|
link.setId(s);
|
link.setPro(project.getId());
|
link.setLeaf(true);
|
if (link.getLevel() == 1) {
|
linkList1.add(link);
|
} else if (link.getLevel() == 2) {
|
linkList2.add(link);
|
} else if (link.getLevel() == 3) {
|
linkList3.add(link);
|
} else if (link.getLevel() == 4) {
|
linkList4.add(link);
|
} else if (link.getLevel() == 5) {
|
linkList5.add(link);
|
} else if (link.getLevel() == 6) {
|
linkList6.add(link);
|
}
|
|
}
|
double sort = 0.0;
|
for (int i = 0; i < linkList1.size(); i++) {
|
ProProjectLink link1 = linkList1.get(i);
|
sort += 10;
|
link1.setSortNo(sort);
|
|
for (int j = 0; j < linkList2.size(); j++) {
|
ProProjectLink link2 = linkList2.get(j);
|
if (link2.getSxh().startsWith(link1.getSxh())) {
|
link2.setPid(link1.getId());
|
link1.setLeaf(false);
|
sort += 10;
|
link2.setSortNo(sort);
|
for (int k = 0; k < linkList3.size(); k++) {
|
ProProjectLink link3 = linkList3.get(k);
|
if (link3.getSxh().startsWith(link2.getSxh())) {
|
link3.setPid(link2.getId());
|
link2.setLeaf(false);
|
sort += 10;
|
link3.setSortNo(sort);
|
for (int l = 0; l < linkList4.size(); l++) {
|
ProProjectLink link4 = linkList4.get(l);
|
if (link4.getSxh().startsWith(link3.getSxh())) {
|
link4.setPid(link3.getId());
|
link3.setLeaf(false);
|
sort += 10;
|
link4.setSortNo(sort);
|
|
for (int i5 = 0; i5 < linkList5.size(); i5++) {
|
ProProjectLink link5 = linkList5.get(i5);
|
if (link5.getSxh().startsWith(link4.getSxh())) {
|
link5.setPid(link4.getId());
|
link4.setLeaf(false);
|
sort += 10;
|
link5.setSortNo(sort);
|
|
for (int i6 = 0; i6 < linkList6.size(); i6++) {
|
ProProjectLink link6 = linkList6.get(i6);
|
if (link6.getSxh().startsWith(link5.getSxh())) {
|
link6.setPid(link5.getId());
|
link5.setLeaf(false);
|
sort += 10;
|
link6.setSortNo(sort);
|
}
|
}
|
}
|
}
|
|
}
|
}
|
}
|
|
|
}
|
}
|
|
|
}
|
}
|
linkList.clear();
|
linkList.addAll(linkList1);
|
linkList.addAll(linkList2);
|
linkList.addAll(linkList3);
|
linkList.addAll(linkList4);
|
linkList.addAll(linkList5);
|
linkList.addAll(linkList6);
|
int wczs = 0;
|
for (int i = 0; i < linkList.size(); i++) {
|
ProProjectLink link = linkList.get(i);
|
if (link.getWcjd() != null && link.getWcjd() == 1) {
|
wczs += 1;
|
}
|
linkMapper.insert(link);
|
}
|
|
try {
|
// 计算项目周期
|
if (project.getKsrq() != null && project.getJsrq() != null) {
|
int xmzq = DateUtils.daysBetween(project.getKsrq(), project.getJsrq());
|
project.setXmzq(xmzq);
|
}
|
// 计算项目已用时间
|
if (project.getKsrq() != null) {
|
int yysj = DateUtils.daysBetween(project.getKsrq(), new Date());
|
project.setYysj(yysj);
|
}
|
// 计算项目剩余时间
|
if (project.getKsrq() != null) {
|
int sysj = DateUtils.daysBetween(new Date(), project.getJsrq());
|
project.setSysj(sysj);
|
}
|
// 计算项目时间进度
|
if (project.getXmzq() != null && project.getXmzq() > 0 && project.getYysj() != null) {
|
Double sjjd = Double.valueOf(project.getYysj()) / Double.valueOf(project.getXmzq()) * 100;
|
BigDecimal b = new BigDecimal(sjjd);
|
sjjd = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
|
project.setSjjd(sjjd);
|
}
|
|
project.setRwzs(linkList.size());
|
project.setWcrws(wczs);
|
|
if (wczs > 0 && !linkList.isEmpty()) {
|
Double jd = Double.valueOf(wczs) / Double.valueOf(linkList.size()) * 100;
|
BigDecimal b = new BigDecimal(jd);
|
jd = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
|
project.setWcjd(jd);
|
}
|
projectMapper.updateById(project);
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return 1;
|
}
|
|
@Override
|
public void updateProject(ProProject project) {
|
|
try {//TODO
|
|
//插入项目概述与预测
|
/* ProSummary mary = new ProSummary();
|
mary.setPro(project.getId());
|
mary.setGs(project.getBzgz());
|
mary.setYc(project.getXzgz());
|
//设置类型为 周计划
|
mary.setType(1);
|
//一天最多只能插入一条 先删除多余数据
|
Map<String,Object> map = new HashMap<>();
|
map.put("create_time",DateUtils.formatDate());
|
List<ProSummary> proSummaries = summaryMapper.selectByMap(map);
|
if(proSummaries!=null && proSummaries.size() > 0){
|
for (int i = 0; i < proSummaries.size(); i++) {
|
ProSummary proSummary = proSummaries.get(i);
|
summaryMapper.deleteById(proSummary.getId());
|
}
|
}
|
summaryMapper.insert(mary);
|
*/
|
// 计算项目周期
|
if (project.getKsrq() != null && project.getJsrq() != null) {
|
int xmzq = DateUtils.daysBetween(project.getKsrq(), project.getJsrq());
|
project.setXmzq(xmzq);
|
}
|
// 计算项目已用时间
|
if (project.getKsrq() != null) {
|
int yysj = DateUtils.daysBetween(project.getKsrq(), new Date());
|
project.setYysj(yysj);
|
}
|
// 计算项目剩余时间
|
if (project.getKsrq() != null) {
|
int sysj = DateUtils.daysBetween(new Date(), project.getJsrq());
|
project.setSysj(sysj);
|
}
|
// 计算项目时间进度
|
if (project.getXmzq() != null && project.getXmzq() > 0 && project.getYysj() != null) {
|
Double sjjd = Double.valueOf(project.getYysj()) / Double.valueOf(project.getXmzq()) * 100;
|
BigDecimal b = new BigDecimal(sjjd);
|
sjjd = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
|
project.setSjjd(sjjd);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
projectMapper.updateById(project);
|
|
}
|
|
@Override
|
public void updateProjectByLink(String id) {
|
try {
|
|
ProProjectLink link = linkMapper.selectById(id);
|
ProProject pro = projectMapper.selectById(link.getPro());
|
Map<String, Object> map = new HashMap<>();
|
map.put("pro", link.getPro());
|
List<ProProjectLink> linkList = linkMapper.selectByMap(map);
|
int wczs = 0;
|
for (int i = 0; i < linkList.size(); i++) {
|
ProProjectLink item = linkList.get(i);
|
if (item.getWcjd() != null && item.getWcjd() == 1) {
|
wczs += 1;
|
}
|
}
|
|
pro.setRwzs(linkList.size());
|
pro.setWcrws(wczs);
|
|
if (wczs > 0 && !linkList.isEmpty()) {
|
Double jd = Double.valueOf(wczs) / Double.valueOf(linkList.size()) * 100;
|
BigDecimal b = new BigDecimal(jd);
|
jd = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
|
pro.setWcjd(jd);
|
}
|
//设置本周更新状态
|
pro.setRenewal(1);
|
pro.setBgrq(new Date());
|
projectMapper.updateById(pro);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
@Override
|
public List<Map<String, Object>> generalBulletinBoard(Map<String, Object> params) {
|
|
return projectMapper.generalBulletinBoard(params);
|
}
|
|
@Override
|
public IPage<ProProject> queryCustomPageList(Page page, ProProject project) {
|
return projectMapper.queryCustomPageList(page, project);
|
}
|
|
@Override
|
public void resetProjectRenewal() {
|
LambdaUpdateWrapper<ProProject> updateWrapper = new LambdaUpdateWrapper();
|
updateWrapper.set(ProProject::getRenewal,0);
|
this.update(updateWrapper);
|
|
}
|
|
}
|