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 implements IProProjectService { @Autowired private ProProjectMapper projectMapper; @Autowired private ProProjectLinkMapper linkMapper; @Autowired private ProSummaryMapper summaryMapper; @Autowired private ExcelUtils excelUtils; @Override @Transactional public Integer importExcel(List> listMap) { ProProject project = excelUtils.CoverProProject(listMap); List linkList = project.getLinkList(); List linkList1 = new ArrayList<>(); List linkList2 = new ArrayList<>(); List linkList3 = new ArrayList<>(); List linkList4 = new ArrayList<>(); List linkList5 = new ArrayList<>(); List linkList6 = new ArrayList<>(); Map map = new HashMap<>(); map.put("xmbh", project.getXmbh()); List 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 map = new HashMap<>(); map.put("create_time",DateUtils.formatDate()); List 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 map = new HashMap<>(); map.put("pro", link.getPro()); List 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> generalBulletinBoard(Map params) { return projectMapper.generalBulletinBoard(params); } @Override public IPage queryCustomPageList(Page page, ProProject project) { return projectMapper.queryCustomPageList(page, project); } @Override public void resetProjectRenewal() { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); updateWrapper.set(ProProject::getRenewal,0); this.update(updateWrapper); } }