| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- package com.goafanti.techproject.service.impl;
- 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.time.LocalDate;
- import java.util.*;
- /**
- * 项目申报详情(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 TaskAnnualReportMapper taskAnnualReportMapper;
- @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 getByTid(Integer id) {
- TaskDetailsBo res = new TaskDetailsBo();
- TOrderNew tOrderNew = tOrderNewMapper.selectByTid(id);
- TOrderMid mid = tOrderMidMapper.selectByOrderNo(tOrderNew.getOrderNo());
- List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(tOrderNew.getOrderNo(), 4);
- List<Map<String,Object >> list=new ArrayList<>();
- TaskDetails taskDetails=taskDetailsMapper.selectByTid(id);
- LocalDate now = LocalDate.now();
- //如果是会员
- 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());
- //如果没有项目进度,查询同年份的项目进度
- if (taskDetails==null&&!e.getId().equals(id)&&e.getcSort()==6){
- taskDetails=taskDetailsMapper.selectByTid(e.getId());
- }
- list.add(map);
- }
- }
- if (taskDetails != null) {
- int year = now.getYear();
- List<TaskAnnualReport> taskAnnualReports = taskAnnualReportMapper.selectThreeYear(taskDetails.getTid(), year);
- for (TaskAnnualReport e : taskAnnualReports) {
- if (e.getYear()==(year-1)){
- res.setLastYear(e.getYear().toString());
- res.setLastSalesAmount(e.getSalesAmount());
- res.setLastRdBudget(e.getResearchAmount());
- }else if (e.getYear()==(year-2)){
- res.setBeforeLastYear(e.getYear().toString());
- res.setBeforeLastSalesAmount(e.getSalesAmount());
- res.setBeforeLastRdBudget(e.getResearchAmount());
- }
- }
- BeanUtils.copyProperties(taskDetails, res);
- }
- 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.setUserName(mid.getBuyerName());
- res.setOrderNo(tOrderNew.getOrderNo());
- res.setContractNo(tOrderNew.getContractNo());
- res.setMemberStatus(mid.getProjectType());
- res.setMemberLvl(lvl);
- res.setTaskList(list);
- 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) {
- TOrderNew tOrderNew =tOrderNewMapper.selectByTid(taskDetails.getTid());
- taskDetails.setUid(tOrderNew.getBuyerId());
- taskDetails.setCreateTime(new Date());
- taskDetails.setUpdateTime(new Date());
- //数据计算
- countTaskDetails(taskDetails);
- this.taskDetailsMapper.insert(taskDetails);
- addTaskDetailsLog(taskDetails);
- return taskDetails;
- }
- private void addTaskDetailsLog(TaskDetails taskDetails) {
- TaskDetailsLog log=new TaskDetailsLog();
- BeanUtils.copyProperties(taskDetails, log);
- log.setTdid(taskDetails.getId());
- log.setId(null);
- Admin adminToken = TokenManager.getAdminToken();
- log.setAid(adminToken.getId());
- log.setAname(adminToken.getName());
- taskDetailsLogMapper.insert(log);
- }
- 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());
- }
- //计算年度研发占比
- //计算三年度的研发占比
- LocalDate now = LocalDate.now();
- int year = now.getYear();
- List<TaskAnnualReport> taskAnnualReports = taskAnnualReportMapper.selectThreeYear(taskDetails.getTid(), year);
- 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 (taskAnnualReports.size()==2){
- BigDecimal res2 = getBigDecimal(rdSalesAmount, rdBudget, taskAnnualReports);
- taskDetails.setThreeYearsRdBudgetRate(res2.doubleValue());
- }
- }
- //计算实际研发占比
- if(taskDetails.getActualRdNumber() !=null ||
- taskDetails.getActualRdAmount() !=null){
- BigDecimal actualRdNumber = BigDecimal.valueOf(taskDetails.getActualRdNumber());
- BigDecimal actualRdAmount = taskDetails.getActualRdAmount();
- BigDecimal res = actualRdNumber.divide(actualRdAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
- taskDetails.setActualRdRate(res.doubleValue());
- if (taskAnnualReports.size()==2){
- BigDecimal res2 = getBigDecimal(actualRdAmount, actualRdNumber, taskAnnualReports);
- taskDetails.setThreeYearsActualRdRate(res2.doubleValue());
- }
- }
- //计算立项资料占比
- if (taskDetails.getProjectApprovalWriteNumber()!=null){
- BigDecimal projectApprovalWriteNumber = BigDecimal.valueOf(taskDetails.getProjectApprovalWriteNumber());
- BigDecimal res = projectApprovalWriteNumber.divide(new BigDecimal(taskDetails.getProjectApprovalNumber()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
- taskDetails.setProjectApprovalWriteRate(res.doubleValue());
- }
- }
- private BigDecimal getBigDecimal(BigDecimal rdSalesAmount, BigDecimal rdBudget, List<TaskAnnualReport> taskAnnualReports) {
- BigDecimal threeYearsRdSalesAmount = rdSalesAmount;
- BigDecimal threeYearsRdBudget = rdBudget;
- for (TaskAnnualReport e : taskAnnualReports) {
- threeYearsRdBudget=threeYearsRdBudget.add(e.getResearchAmount());
- threeYearsRdSalesAmount=threeYearsRdSalesAmount.add(e.getSalesAmount());
- }
- 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());
- this.taskDetailsMapper.update(taskDetails);
- countTaskDetails(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 Object export(Integer id) {
- OutTaskDetailsBo res = new OutTaskDetailsBo();
- NewExcelUtil<OutTaskDetailsBo> excel=new NewExcelUtil<>(OutTaskDetailsBo.class);
- TaskDetailsBo byTid = getByTid(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;
- }
- }
|