| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- package com.goafanti.techproject.service.impl;
- import com.goafanti.common.bo.Result;
- import com.goafanti.common.dao.*;
- import com.goafanti.common.model.*;
- import com.goafanti.common.utils.excel.NewExcelUtil;
- import com.goafanti.core.mybatis.BaseMybatisDao;
- import com.goafanti.core.mybatis.page.Pagination;
- import com.goafanti.core.shiro.token.TokenManager;
- import com.goafanti.order.bo.TOrderTaskBo;
- import com.goafanti.techproject.bo.OutTaskDetailsBo;
- import com.goafanti.techproject.bo.TaskDetailsBo;
- import com.goafanti.techproject.service.TaskDetailsService;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * 项目申报详情(TaskDetails)表服务实现类
- *
- * @author makejava
- * @since 2024-12-26 17:11:50
- */
- @Service("taskDetailsService")
- public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> implements TaskDetailsService {
- @Resource
- private TaskDetailsMapper taskDetailsMapper;
- @Resource
- private TaskDetailsLogMapper taskDetailsLogMapper;
- @Resource
- private TOrderNewMapper tOrderNewMapper;
- @Resource
- private TOrderMidMapper tOrderMidMapper;
- @Resource
- private TOrderTaskMapper tOrderTaskMapper;
- @Resource
- private TaskFeatureMapper taskFeatureMapper;
- @Resource
- private TaskFeatureLogMapper taskFeatureLogMapper;
- @Value(value = "${upload.path}")
- private final String uploadPath = null;
- @Override
- public Pagination<TaskDetails> list(TaskDetails taskDetails, Integer pageNo, Integer pageSize) {
- Map<String, Object> params = new HashMap<>();
- params.put("in", taskDetails);
- return (Pagination<TaskDetails>) findPage("findTaskDetailsList",
- "findTaskDetailsCount", params, pageNo, pageSize);
- }
- @Override
- public TaskDetailsBo pushByTid(Integer id) {
- TaskDetailsBo res = new TaskDetailsBo();
- TOrderNew tOrderNew = tOrderNewMapper.selectByTid(id);
- TOrderTask tOrderTask = tOrderTaskMapper.queryById(id);
- TOrderMid mid = tOrderMidMapper.selectByOrderNo(tOrderNew.getOrderNo());
- List<Map<String,Object >> list=new ArrayList<>();
- TaskDetails taskDetails=null;
- //获取项目服务年份算出平均值
- List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(tOrderNew.getOrderNo(), null);
- List<TOrderTaskBo> collect = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 1).collect(Collectors.toList());
- List<TOrderTaskBo> collect2 = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 0||e.getSplitStatus() == 2).collect(Collectors.toList());
- int yearSum=1;
- for (TOrderTaskBo e : collect) {
- if (e.getYearSum()>yearSum){
- yearSum=e.getYearSum();
- }
- }
- if (tOrderTask.getProgressTid()==null){
- taskDetails=taskDetailsMapper.selectByTid(id);
- //首先直接查找,找不到的情况下找订单
- //如果是会员
- TOrderTaskBo thisTask = null;
- for (TOrderTaskBo e : collect2) {
- if (e.getId().equals(id)){
- thisTask=e;
- break;
- }
- }
- String serviceYear = thisTask.getServiceYear();
- if (serviceYear.contains("(赠)")){
- serviceYear=serviceYear.replace("(赠)", "");
- }
- Integer tid=null;
- for (TOrderTaskBo e : collect2) {
- e.getServiceLife();
- if (e.getServiceYear().equals(serviceYear)){
- Map<String,Object> map=new HashMap<>();
- map.put("serviceYear", e.getServiceYear());
- map.put("taskName", e.getCommodityName());
- map.put("id",e.getId());
- //如果没有项目进度,查询同年份的项目进度
- if (taskDetails==null&&!e.getId().equals(id)&&e.getcSort()==6){
- taskDetails=taskDetailsMapper.selectByTid(e.getId());
- tid=e.getId();
- }
- list.add(map);
- }
- }
- if (taskDetails !=null){
- BeanUtils.copyProperties(taskDetails, res);
- }
- res.setUserName(mid.getBuyerName());
- res.setOrderNo(tOrderNew.getOrderNo());
- res.setContractNo(tOrderNew.getContractNo());
- res.setMemberStatus(mid.getProjectType());
- res.setTaskList(list);
- BigDecimal totalAmount = tOrderNew.getTotalAmount().divide(new BigDecimal(yearSum), 2, RoundingMode.HALF_UP);
- String lvl=null;
- if (totalAmount.compareTo(new BigDecimal("3"))<0){
- lvl="A";
- }else if (totalAmount.compareTo(new BigDecimal("8"))<1){
- lvl="AA";
- }else if (totalAmount.compareTo(new BigDecimal("8"))>0){
- lvl="AAA";
- }
- res.setMemberLvl(lvl);
- res.setTaskList(list);
- res.setFeatureList(taskFeatureMapper.selectByTdId(id));
- if (tid==null){
- tid=taskDetails.getTid();
- TOrderTask update =new TOrderTask();
- update.setId(id);
- update.setProgressTid(tid);
- tOrderTaskMapper.update(update);
- }
- }else {
- taskDetails=taskDetailsMapper.selectByTid(tOrderTask.getProgressTid());
- //如果是会员
- TOrderTaskBo thisTask = null;
- for (TOrderTaskBo e : collect2) {
- if (e.getId().equals(id)){
- thisTask=e;
- break;
- }
- }
- String serviceYear = thisTask.getServiceYear();
- if (serviceYear.contains("(赠)")){
- serviceYear=serviceYear.replace("(赠)", "");
- }
- Integer tid=null;
- for (TOrderTaskBo e : collect2) {
- if (e.getServiceYear().equals(serviceYear)){
- Map<String,Object> map=new HashMap<>();
- map.put("serviceYear", e.getServiceYear());
- map.put("taskName", e.getCommodityName());
- map.put("id",e.getId());
- list.add(map);
- }
- }
- if (taskDetails !=null){
- BeanUtils.copyProperties(taskDetails, res);
- }
- res.setUserName(mid.getBuyerName());
- res.setOrderNo(tOrderNew.getOrderNo());
- res.setContractNo(tOrderNew.getContractNo());
- res.setMemberStatus(mid.getProjectType());
- res.setTaskList(list);
- BigDecimal totalAmount = tOrderNew.getTotalAmount().divide(new BigDecimal(yearSum), 2, RoundingMode.HALF_UP);
- String lvl=null;
- if (totalAmount.compareTo(new BigDecimal("3"))<0){
- lvl="A";
- }else if (totalAmount.compareTo(new BigDecimal("8"))<1){
- lvl="AA";
- }else if (totalAmount.compareTo(new BigDecimal("8"))>0){
- lvl="AAA";
- }
- res.setMemberLvl(lvl);
- res.setTaskList(list);
- res.setFeatureList(taskFeatureMapper.selectByTdId(id));
- }
- return res;
- }
- /**
- * 通过ID查询单条数据
- *
- * @param id 主键
- * @return 实例对象
- */
- @Override
- public TaskDetails queryById(Integer id) {
- return this.taskDetailsMapper.selectById(id);
- }
- /**
- * 新增数据
- *
- * @param taskDetails 实例对象
- * @return 实例对象
- */
- @Override
- public TaskDetails insert(TaskDetails taskDetails,Integer type) {
- if (type ==null)type=0;
- Date date = new Date();
- TOrderNew tOrderNew =tOrderNewMapper.selectByTid(taskDetails.getTid());
- taskDetails.setUid(tOrderNew.getBuyerId());
- taskDetails.setCreateTime(date);
- taskDetails.setUpdateTime(date);
- //数据计算
- countTaskDetails(taskDetails);
- this.taskDetailsMapper.insert(taskDetails);
- //新增日志数据
- if (type==1){
- addTaskDetailsLog(taskDetails);
- }
- return taskDetails;
- }
- /**
- *新增的时候特殊数据可以是单传输,修改的时候可以多传
- *
- * @param taskDetails 项目进度数据
- *
- */
- private void addTaskDetailsLog(TaskDetails taskDetails) {
- Admin adminToken = TokenManager.getAdminToken();
- TaskDetailsLog log=new TaskDetailsLog();
- BeanUtils.copyProperties(taskDetails, log);
- log.setTdid(taskDetails.getId());
- log.setId(null);
- log.setAid(adminToken.getId());
- log.setAname(adminToken.getName());
- taskDetailsLogMapper.insert(log);
- List<TaskFeature> list = taskFeatureMapper.selectByTdId(taskDetails.getId());
- for (TaskFeature feature : list) {
- TaskFeatureLog tfLog = new TaskFeatureLog();
- BeanUtils.copyProperties(feature, tfLog);
- tfLog.setTdlId(log.getId());
- tfLog.setId(null);
- tfLog.setAid(adminToken.getId());
- tfLog.setAname(adminToken.getName());
- taskFeatureLogMapper.insert(tfLog);
- }
- }
- private void countTaskDetails(TaskDetails taskDetails) {
- //计算人员占比
- if (taskDetails.getWorkersNumber()!=null||
- taskDetails.getTechnologyNumber()!=null){
- BigDecimal wn = BigDecimal.valueOf(taskDetails.getWorkersNumber());
- BigDecimal tn = BigDecimal.valueOf(taskDetails.getTechnologyNumber());
- BigDecimal res = tn.divide(wn,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
- taskDetails.setWorkersRate(res.doubleValue());
- }
- //计算研发预算完成进度 已归集研发费用总额÷年度研发预算总额X100%
- if (taskDetails.getActualRdAmount()!=null &&taskDetails.getRdBudget()!=null){
- BigDecimal multiply = taskDetails.getActualRdAmount().divide(taskDetails.getRdBudget(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
- taskDetails.setRdCompletionProgress(multiply.doubleValue());
- }
- //计算年度研发占比
- //计算三年度的研发占比
- if (taskDetails.getRdBudget() != null && taskDetails.getRdSalesAmount() != null){
- BigDecimal rdBudget = taskDetails.getRdBudget();
- BigDecimal rdSalesAmount = taskDetails.getRdSalesAmount();
- BigDecimal res = rdBudget.divide(rdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
- taskDetails.setRdBudgetRate(res.doubleValue());
- //计算三年度的研发占比
- if (taskDetails.getLastRdSalesAmount()!=null && taskDetails.getLastRdBudget()!=null&&
- taskDetails.getBeforeLastRdSalesAmount()!=null && taskDetails.getBeforeLastRdBudget()!=null){
- BigDecimal res2 = getBigDecimal(rdSalesAmount, rdBudget, taskDetails);
- taskDetails.setThreeYearsRdBudgetRate(res2.doubleValue());
- }
- }
- //计算实际研发占比
- if(taskDetails.getActualRdNumber() !=null &&
- taskDetails.getActualRdAmount() !=null){
- BigDecimal actualRdNumber = BigDecimal.valueOf(taskDetails.getActualRdNumber());
- BigDecimal actualRdAmount = taskDetails.getActualRdAmount();
- BigDecimal res3 = actualRdNumber.divide(actualRdAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
- taskDetails.setActualRdRate(res3.doubleValue());
- if (taskDetails.getLastRdSalesAmount()!=null && taskDetails.getLastRdBudget()!=null&&
- taskDetails.getBeforeLastRdSalesAmount()!=null && taskDetails.getBeforeLastRdBudget()!=null){
- BigDecimal res4 = getBigDecimal(actualRdAmount, actualRdNumber, taskDetails);
- taskDetails.setThreeYearsActualRdRate(res4.doubleValue());
- }
- }
- //计算立项资料占比
- if (taskDetails.getProjectApprovalWriteNumber()!=null){
- BigDecimal projectApprovalWriteNumber = BigDecimal.valueOf(taskDetails.getProjectApprovalWriteNumber());
- BigDecimal res5 = projectApprovalWriteNumber.divide(new BigDecimal(taskDetails.getProjectApprovalNumber()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
- taskDetails.setProjectApprovalWriteRate(res5.doubleValue());
- }
- }
- private BigDecimal getBigDecimal(BigDecimal rdSalesAmount, BigDecimal rdBudget, TaskDetails taskDetails) {
- BigDecimal threeYearsRdSalesAmount = rdSalesAmount;
- BigDecimal threeYearsRdBudget = rdBudget;
- threeYearsRdSalesAmount = threeYearsRdSalesAmount.add(taskDetails.getLastRdSalesAmount()).add(taskDetails.getBeforeLastRdSalesAmount());
- threeYearsRdBudget = threeYearsRdBudget.add(taskDetails.getLastRdBudget()).add(taskDetails.getBeforeLastRdBudget());
- return threeYearsRdBudget.divide(threeYearsRdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
- }
- /**
- * 修改数据
- *
- * @param taskDetails 实例对象
- * @return 实例对象
- */
- @Override
- public TaskDetails update(TaskDetails taskDetails) {
- taskDetails.setUpdateTime(new Date());
- countTaskDetails(taskDetails);
- this.taskDetailsMapper.update(taskDetails);
- TaskDetails res = this.queryById(taskDetails.getId());
- addTaskDetailsLog(res);
- return res;
- }
- /**
- * 通过主键删除数据
- *
- * @param id 主键
- * @return 是否成功
- */
- @Override
- public boolean deleteById(Integer id) {
- this.taskDetailsMapper.deleteById(id);
- return true;
- }
- @Override
- public Result export(Integer id) {
- OutTaskDetailsBo res = new OutTaskDetailsBo();
- NewExcelUtil<OutTaskDetailsBo> excel=new NewExcelUtil<>(OutTaskDetailsBo.class);
- TaskDetailsBo byTid = pushByTid(id);
- BeanUtils.copyProperties(byTid,res);
- StringBuffer sb = new StringBuffer();
- byTid.getTaskList().forEach(e->{
- if (res.getServiceyear()==null){
- res.setServiceyear((String) e.get("serviceYear"));
- }
- sb.append(e.get("taskName")).append("; ");
- });
- res.setServiceProject(sb.toString());
- return excel.exportTaskDetailsExcel(res,"项目进度表",uploadPath);
- }
- @Override
- public boolean checkTid(TaskDetails taskDetails) {
- TaskDetails res = taskDetailsMapper.selectByTid(taskDetails.getTid());
- return res != null;
- }
- @Override
- public TaskFeature addFeature(TaskFeature in) {
- in.setCreateTime(new Date());
- taskFeatureMapper.insert(in);
- return in;
- }
- @Override
- public TaskFeature updateFeature(TaskFeature in) {
- taskFeatureMapper.update(in);
- return taskFeatureMapper.selectById(in.getId());
- }
- @Override
- public Object logList(Integer id) {
- return taskDetailsLogMapper.selectByTid(id);
- }
- @Override
- public Object logDetails(Integer id) {
- TaskDetailsLog log = taskDetailsLogMapper.selectById(id);
- TaskDetails taskDetails = taskDetailsMapper.selectById(log.getTdid());
- Integer tid = taskDetails.getTid();
- TaskDetailsBo res = new TaskDetailsBo();
- TOrderNew tOrderNew = tOrderNewMapper.selectByTid(tid);
- TOrderMid mid = tOrderMidMapper.selectByOrderNo(tOrderNew.getOrderNo());
- List<Map<String,Object >> list=new ArrayList<>();
- List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(tOrderNew.getOrderNo(), 4);
- //如果是会员
- TOrderTaskBo thisTask = null;
- for (TOrderTaskBo e : tOrderTaskBos) {
- if (e.getId().equals(id)){
- thisTask=e;
- break;
- }
- }
- String serviceYear = thisTask.getServiceYear();
- if (serviceYear.contains("(赠)")){
- serviceYear=serviceYear.replace("(赠)", "");
- }
- for (TOrderTaskBo e : tOrderTaskBos) {
- if (e.getServiceYear().equals(serviceYear)){
- Map<String,Object> map=new HashMap<>();
- map.put("serviceYear", e.getServiceYear());
- map.put("taskName", e.getCommodityName());
- map.put("id",e.getId());
- list.add(map);
- }
- }
- if (taskDetails !=null){
- BeanUtils.copyProperties(log, res);
- }
- res.setUserName(mid.getBuyerName());
- res.setOrderNo(tOrderNew.getOrderNo());
- res.setContractNo(tOrderNew.getContractNo());
- res.setMemberStatus(mid.getProjectType());
- res.setTaskList(list);
- BigDecimal totalAmount = tOrderNew.getTotalAmount();
- String lvl=null;
- if (totalAmount.compareTo(new BigDecimal("3"))<0){
- lvl="A";
- }else if (totalAmount.compareTo(new BigDecimal("8"))<1){
- lvl="AA";
- }else if (totalAmount.compareTo(new BigDecimal("8"))>0){
- lvl="AAA";
- }
- res.setMemberLvl(lvl);
- res.setTaskList(list);
- res.setFeatureList(taskFeatureMapper.selectByTdId(id));
- return res;
- }
- @Override
- public Object deleteTaskFeature(Integer id) {
- return taskFeatureMapper.deleteById(id);
- }
- }
|