付款进度代码同步

This commit is contained in:
2025-06-07 15:15:55 +08:00
parent d5660ee8aa
commit ce5e217c0c
21 changed files with 515 additions and 99 deletions

View File

@@ -1,6 +1,8 @@
package com.ruoyi.oa.service;
import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo;
import com.ruoyi.oa.domain.vo.DashboardChartsVo;
import com.ruoyi.oa.domain.vo.DashboardMetricsVo;
import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo;
import com.ruoyi.oa.domain.vo.SysOaProjectVo;
import com.ruoyi.oa.domain.bo.SysOaProjectBo;
@@ -78,4 +80,12 @@ public interface ISysOaProjectService {
TableDataInfo<SysOaProjectVo> listProjects(SysOaProjectBo bo, PageQuery pageQuery);
TableDataInfo<SysOaProjectVo> listWareProject(SysOaProjectBo bo, PageQuery pageQuery);
DashboardMetricsVo getMetrics(Date start, Date end,Long tradeType);
DashboardChartsVo getCharts(Date start, Date end,Long tradeType);
List<SysOaProjectVo> getExpiringForeignProjects(Integer days,Long tradeType);
}

View File

@@ -10,19 +10,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo;
import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo;
import com.ruoyi.oa.domain.vo.SysOaTaskVo;
import com.ruoyi.oa.domain.vo.*;
import com.ruoyi.oa.service.CodeGeneratorService;
import liquibase.pro.packaged.A;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.oa.domain.bo.SysOaProjectBo;
import com.ruoyi.oa.domain.vo.SysOaProjectVo;
import com.ruoyi.oa.domain.SysOaProject;
import com.ruoyi.oa.mapper.SysOaProjectMapper;
import com.ruoyi.oa.service.ISysOaProjectService;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@@ -44,7 +43,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
// 1. 定义常量列表(最好放到某个常量类里)
private static final Set<String> VALID_PREFIXES = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
"PL", "TC", "GI", "GL", "ZAM", "CC", "CR", "STL", "SM", "TH","RJ"
"PL", "TC", "GI", "GL", "ZAM", "CC", "CR", "STL", "SM", "TH", "RJ"
)));
@@ -98,7 +97,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
*/
@Override
public Boolean insertByBo(SysOaProjectBo bo) {
if (bo.getProjectCode()!=null){
if (bo.getProjectCode() != null) {
bo.setProjectCode(codeGeneratorService.nextCode(bo.getProjectCode()));
}
SysOaProject add = BeanUtil.toBean(bo, SysOaProject.class);
@@ -126,6 +125,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
}
// 2. 在你的逻辑里做判断
/**
* 保存前的数据校验
*/
@@ -262,12 +262,13 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
qw.eq("sop.trade_type", bo.getTradeType());
qw.like(StringUtils.isNotBlank(bo.getProjectNum()), "sop.project_num", bo.getProjectNum());
qw.groupBy("sop.project_id");
Page<SysOaProjectVo> result = baseMapper.selectVoListPage(pageQuery.build(),qw);
Page<SysOaProjectVo> result = baseMapper.selectVoListPage(pageQuery.build(), qw);
return TableDataInfo.build(result);
}
/**
* 查看存在出库的项目
*
* @param bo
* @param pageQuery
* @return
@@ -275,12 +276,81 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
@Override
public TableDataInfo<SysOaProjectVo> listWareProject(SysOaProjectBo bo, PageQuery pageQuery) {
QueryWrapper<SysOaProject> lqw = Wrappers.query();
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName());
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName());
Page<SysOaProjectVo> result = baseMapper.listWareProject(pageQuery.build(), lqw);
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.project_name", bo.getProjectName());
lqw.like(StringUtils.isNotBlank(bo.getProjectCode()), "sop.project_code", bo.getProjectCode());
lqw.like(StringUtils.isNotBlank(bo.getProjectNum()), "sop.project_num", bo.getProjectNum());
Page<SysOaProjectVo> result = baseMapper.listWareProject(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
@Override
public DashboardMetricsVo getMetrics(Date start, Date end,Long tradeType) {
// 本期
BigDecimal curFunds = baseMapper.selectTotalFunds(start, end,tradeType);
Integer curCount = baseMapper.selectContractCount(start, end,tradeType);
Integer curExpire = baseMapper.selectExpiringCount(start, end,tradeType);
// 前期平均
BigDecimal avgFunds = baseMapper.selectPrevAvgTotalFunds(start, end,tradeType);
BigDecimal avgCount = baseMapper.selectPrevAvgContractCount(start, end,tradeType);
BigDecimal avgExpire = baseMapper.selectPrevAvgExpiringCount(start, end,tradeType);
// 计算增长率 = (cur - avg) / avg * 100
BigDecimal fundRate = avgFunds.compareTo(BigDecimal.ZERO) == 0
? BigDecimal.ZERO
: curFunds.subtract(avgFunds)
.divide(avgFunds, 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
BigDecimal countRate = avgCount.compareTo(BigDecimal.ZERO) == 0
? BigDecimal.ZERO
: BigDecimal.valueOf(curCount).subtract(avgCount)
.divide(avgCount, 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
BigDecimal expireRate = avgExpire.compareTo(BigDecimal.ZERO) == 0
? BigDecimal.ZERO
: BigDecimal.valueOf(curExpire).subtract(avgExpire)
.divide(avgExpire, 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
// 组装 VO
DashboardMetricsVo vo = new DashboardMetricsVo();
vo.setTotalFunds(curFunds);
vo.setGrowthFunds(fundRate);
vo.setContractCount(curCount);
vo.setGrowthCount(countRate);
vo.setExpiringCount(curExpire);
vo.setGrowthExpiring(expireRate);
// 用本月金额 ÷ 历史平均 × 100 得到 completionRate
BigDecimal completionRate;
if (avgFunds.compareTo(BigDecimal.ZERO) > 0) {
completionRate = curFunds
.divide(avgFunds, 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
} else {
completionRate = BigDecimal.ZERO;
}
vo.setCompletionRate(completionRate);
return vo;
}
@Override
public DashboardChartsVo getCharts(Date start, Date end,Long tradeType) {
DashboardChartsVo vo = new DashboardChartsVo();
vo.setContractAmountTrend(baseMapper.selectContractAmountTrend(start, end,tradeType));
vo.setProjectStatusDistribution(baseMapper.selectProjectStatusDistribution(tradeType));
vo.setMonthlyContractComparison(baseMapper.selectMonthlyContractComparison(start, end,tradeType));
return vo;
}
@Override
public List<SysOaProjectVo> getExpiringForeignProjects(Integer expireDays,Long tradeType) {
Date now = new Date();
return baseMapper.selectExpiringForeignProjects(now, expireDays,tradeType);
}
private QueryWrapper<SysOaProject> buildOutWareQueryWrapper(SysOaWarehouseDetailBo bo) {
QueryWrapper<SysOaProject> lqw = Wrappers.query();

View File

@@ -71,7 +71,6 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
sysOaTaskBo.setState(0L);
sysOaTaskBo.setWorkerId(LoginHelper.getUserId());
List<SysOaTaskVo> tasks = sysOaTaskService.queryListByRemain(sysOaTaskBo,pageQuery);
System.out.println(tasks);
ArrayList<SysOaRemindVo> sysOaRemindVos = new ArrayList<>();
for (SysOaTaskVo task : tasks) {
SysOaRemindVo sysOaRemindVo = new SysOaRemindVo();
@@ -111,34 +110,21 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
}
// 查询邻近过期进度
OaProgressBo oaProgressBo = new OaProgressBo();
oaProgressBo.setType(1L);
List<OaProgressVo> rows1 = progressService.queryPageList(oaProgressBo, pageQuery).getRows();
for (OaProgressVo row : rows1) {
if (row.getRemainTime()!=null && row.getStatus() !=1L && row.getRemainTime()<3L){
SysOaRemindVo sysOaRemindVo = new SysOaRemindVo();
sysOaRemindVo.setType("progress-project");
sysOaRemindVo.setContent(row.getProgressName());
sysOaRemindVo.setRemainTime(row.getRemainTime());
sysOaRemindVo.setTaskTime(row.getEndTime());
sysOaRemindVos.add(sysOaRemindVo);
}
// OaProgressBo oaProgressBo = new OaProgressBo();
// oaProgressBo.setType(1L);
// List<OaProgressVo> rows1 = progressService.queryPageList(oaProgressBo, pageQuery).getRows();
// for (OaProgressVo row : rows1) {
// if (row.getRemainTime()!=null && row.getStatus() ==0L && row.getRemainTime()<3L){
// SysOaRemindVo sysOaRemindVo = new SysOaRemindVo();
// sysOaRemindVo.setType("progress-project");
// sysOaRemindVo.setContent(row.getProgressName());
// sysOaRemindVo.setRemainTime(row.getRemainTime());
// sysOaRemindVo.setTaskTime(row.getEndTime());
// sysOaRemindVos.add(sysOaRemindVo);
// }
//
// }
}
// 查询邻近过期进度
oaProgressBo.setType(2L);
List<OaProgressVo> rows2 = progressService.queryPageList(oaProgressBo, pageQuery).getRows();
for (OaProgressVo row : rows2) {
if (row.getRemainTime()!=null && row.getRemainTime()<3L){
SysOaRemindVo sysOaRemindVo = new SysOaRemindVo();
sysOaRemindVo.setType("progress-money");
sysOaRemindVo.setContent(row.getProgressName());
sysOaRemindVo.setRemainTime(row.getRemainTime());
sysOaRemindVo.setTaskTime(row.getPayEndTime());
sysOaRemindVos.add(sysOaRemindVo);
}
}
return R.ok(sysOaRemindVos);
}

View File

@@ -172,9 +172,12 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService {
if (select == null) {
baseMapper.insert(add);
flag = add.getId();
} else {
} else {
select.setInventory(select.getInventory() + bo.getInventory());
select.setPrice((select.getPrice() * select.getInventory() + bo.getPrice() * bo.getInventory()) / (select.getInventory() + bo.getInventory()));
if (bo.getPrice()!=null && bo.getPrice()>0) {
select.setPrice((select.getPrice() * select.getInventory() + bo.getPrice() * bo.getInventory()) / (select.getInventory() + bo.getInventory()));
}
flag = select.getId();
}

View File

@@ -167,7 +167,6 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService
@Override
public int updateToWare(SysOaWarehouseTaskBo bo) {
System.out.println(bo);
// 判断是否为此物料完成状态
if (bo.getTaskStatus() == 2) {
Long masterId;
@@ -197,10 +196,8 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService
.eq(SysOaWarehouseTask::getMasterId, bo.getMasterId())
.in(SysOaWarehouseTask::getTaskStatus, Arrays.asList(0, 1));
List<SysOaWarehouseTask> sysOaWarehouseTasks = baseMapper.selectList(taskLambdaQueryWrapper);
System.out.println(sysOaWarehouseTasks);
if (sysOaWarehouseTasks.isEmpty()) {
SysOaWarehouseMasterVo sysOaWarehouseMasterVo = masterMapper.selectVoById(bo.getMasterId());
System.out.println("184513807548012740712308470812");
// 如果为空代表了所有都结束了 将采购单状态置1
sysOaWarehouseMasterVo.setStatus(1L);
masterMapper.updateById(BeanUtil.toBean(sysOaWarehouseMasterVo, SysOaWarehouseMaster.class));
@@ -213,7 +210,7 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService
return baseMapper.updateById(task);
}
private int toWareOne(Long masterId, SysOaWarehouseTaskBo bo, SysOaWarehouseDetailBo sysOaWarehouseDetailBo) {
private int toWareOne(Long masterId, SysOaWarehouseTaskBo bo , SysOaWarehouseDetailBo sysOaWarehouseDetailBo) {
// 进行入库操作 (因为存在一种情况是此为全新物料是没有物料id的)
SysOaWarehouse sysOaWarehouse = new SysOaWarehouse();
Long warehouseId = 0L;
@@ -226,16 +223,14 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService
sysOaWarehouse.setSpecifications(bo.getSpecifications());
sysOaWarehouse.setName(bo.getName());
sysOaWarehouse.setRemark(bo.getRemark());
sysOaWarehouse.setUnit("");
sysOaWarehouse.setUnit(bo.getUnit());
wareMapper.insert(sysOaWarehouse);
warehouseId = sysOaWarehouse.getId();
} else {
warehouseId = bo.getWarehouseId();
sysOaWarehouse = wareMapper.selectById(warehouseId);
sysOaWarehouse.setPrice((sysOaWarehouse.getPrice() * sysOaWarehouse.getInventory() + bo.getPrice() * bo.getTaskInventory()) / (sysOaWarehouse.getInventory() + bo.getTaskInventory()));
sysOaWarehouse.setInventory(sysOaWarehouse.getInventory() + bo.getTaskInventory());
System.out.println(sysOaWarehouse);
wareMapper.updateById(sysOaWarehouse);
}