付款进度代码同步
This commit is contained in:
@@ -6,11 +6,15 @@ import java.util.Arrays;
|
||||
|
||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||
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.mapper.SysOaTaskMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.ruoyi.common.annotation.RepeatSubmit;
|
||||
@@ -164,4 +168,56 @@ public class SysOaProjectController extends BaseController {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 数据报表部分
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* GET /api/projects/foreign/dashboard/metrics
|
||||
* @param start yyyy/MM/dd
|
||||
* @param end yyyy/MM/dd
|
||||
*/
|
||||
@GetMapping("/metrics")
|
||||
public R<DashboardMetricsVo> metrics(
|
||||
@RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date start,
|
||||
@RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date end,
|
||||
@RequestParam(value="tradeType" , required = false) Long tradeType
|
||||
) {
|
||||
DashboardMetricsVo vo = iSysOaProjectService.getMetrics(start, end,tradeType);
|
||||
return R.ok(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/projects/foreign/dashboard/charts
|
||||
* @param start yyyy/MM/dd
|
||||
* @param end yyyy/MM/dd
|
||||
*/
|
||||
@GetMapping("/charts")
|
||||
public R<DashboardChartsVo> charts(
|
||||
@RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date start,
|
||||
@RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date end,
|
||||
@RequestParam(value="tradeType" , required = false) Long tradeType
|
||||
) {
|
||||
DashboardChartsVo vo = iSysOaProjectService.getCharts(start, end,tradeType);
|
||||
return R.ok(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/projects/foreign/expiring
|
||||
* @param days 预警天数,默认 7
|
||||
*/
|
||||
@GetMapping("/expiring")
|
||||
public R<List<SysOaProjectVo>> expiring(
|
||||
@RequestParam(name = "days", defaultValue = "7") Integer days,
|
||||
@RequestParam(value="tradeType" , required = false) Long tradeType
|
||||
) {
|
||||
List<SysOaProjectVo> list = iSysOaProjectService.getExpiringForeignProjects(days,tradeType);
|
||||
return R.ok(list);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -133,7 +133,7 @@ public class SysOaWarehouseTaskController extends BaseController {
|
||||
|
||||
|
||||
/**
|
||||
* 处理单个物料入库
|
||||
* 处理批量物料入库
|
||||
*/
|
||||
@RepeatSubmit()
|
||||
@PutMapping("/status-list")
|
||||
|
||||
@@ -79,4 +79,6 @@ public class SysOaWarehouseTask extends BaseEntity {
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date endTime;
|
||||
|
||||
private String unit;
|
||||
|
||||
}
|
||||
|
||||
@@ -181,5 +181,7 @@ public class SysOaProjectBo extends BaseEntity {
|
||||
* 代号类型
|
||||
*/
|
||||
private String projectCode;
|
||||
|
||||
private String status;
|
||||
}
|
||||
|
||||
|
||||
@@ -84,4 +84,9 @@ public class SysOaWarehouseTaskBo extends BaseEntity {
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unit;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.ruoyi.oa.domain.vo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DashboardChartsVo {
|
||||
|
||||
private List<TrendPointVo> contractAmountTrend; // 折线图
|
||||
private List<StatusCountVo> projectStatusDistribution; // 饼图
|
||||
private List<TrendPointVo> monthlyContractComparison; // 柱状图
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.ruoyi.oa.domain.vo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class DashboardMetricsVo {
|
||||
// 本月合同总额
|
||||
private BigDecimal totalFunds;
|
||||
// 合同数量统计
|
||||
private Integer contractCount;
|
||||
// 临期项目数量
|
||||
private Integer expiringCount;
|
||||
// 月度目标完成率(0-100)
|
||||
private BigDecimal completionRate;
|
||||
|
||||
private BigDecimal growthFunds;
|
||||
|
||||
private BigDecimal growthCount;
|
||||
|
||||
private BigDecimal growthExpiring;
|
||||
}
|
||||
@@ -99,6 +99,12 @@ public class OaProgressVo {
|
||||
*/
|
||||
private String contactPhone;
|
||||
|
||||
/**
|
||||
* 父项目电话
|
||||
*/
|
||||
private String parentPhone;
|
||||
private String nowDepart;
|
||||
|
||||
// 新增统计字段
|
||||
private Long progressSize;
|
||||
private Long finishCount;
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.ruoyi.oa.domain.vo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class StatusCountVo {
|
||||
private String status; // "正常"/"进行中"/"即将到期"/"已逾期"
|
||||
private Integer count;
|
||||
}
|
||||
@@ -246,4 +246,9 @@ public class SysOaProjectVo {
|
||||
*/
|
||||
private String projectCode;
|
||||
|
||||
/**
|
||||
* 项目状态
|
||||
*/
|
||||
private String status;
|
||||
|
||||
}
|
||||
|
||||
@@ -86,4 +86,9 @@ public class SysOaWarehouseTaskVo {
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unit;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.ruoyi.oa.domain.vo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class TrendPointVo {
|
||||
private String month; // 如 "1月"
|
||||
private BigDecimal value; // 金额或数量
|
||||
}
|
||||
@@ -7,12 +7,11 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.oa.domain.SysOaProject;
|
||||
import com.ruoyi.oa.domain.bo.SysOaProjectBo;
|
||||
import com.ruoyi.oa.domain.vo.SysOaCostAllVo;
|
||||
import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo;
|
||||
import com.ruoyi.oa.domain.vo.SysOaProjectVo;
|
||||
import com.ruoyi.oa.domain.vo.*;
|
||||
import com.ruoyi.common.core.mapper.BaseMapperPlus;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -57,4 +56,33 @@ public interface SysOaProjectMapper extends BaseMapperPlus<SysOaProjectMapper, S
|
||||
|
||||
SysOaProjectVo selectVoByIdPlus(Long projectId);
|
||||
|
||||
/** 本月合同总额 */
|
||||
BigDecimal selectTotalFunds(@Param("start") Date start,
|
||||
@Param("end") Date end, @Param("tradeType") Long tradeType);
|
||||
|
||||
/** 本月合同数量 */
|
||||
Integer selectContractCount(@Param("start") Date start,
|
||||
@Param("end") Date end, @Param("tradeType") Long tradeType);
|
||||
|
||||
/** 临期项目数量(到期日在 start~end 之间) */
|
||||
Integer selectExpiringCount(@Param("start") Date start,
|
||||
@Param("end") Date end, @Param("tradeType") Long tradeType);
|
||||
|
||||
List<TrendPointVo> selectContractAmountTrend(@Param("start") Date start,
|
||||
@Param("end") Date end, @Param("tradeType") Long tradeType);
|
||||
|
||||
/** 项目状态分布(示例按 finish_time 与 project_status 简单分类) */
|
||||
List<StatusCountVo> selectProjectStatusDistribution(@Param("tradeType") Long tradeType);
|
||||
|
||||
/** 月度合同数量对比 */
|
||||
List<TrendPointVo> selectMonthlyContractComparison(@Param("start") Date start,
|
||||
@Param("end") Date end, @Param("tradeType") Long tradeType);
|
||||
|
||||
List<SysOaProjectVo> selectExpiringForeignProjects(@Param("now") Date now, @Param("expireDays") Integer expireDays, @Param("tradeType") Long tradeType);
|
||||
|
||||
BigDecimal selectPrevAvgTotalFunds(@Param("start") Date start, @Param("end") Date end, @Param("tradeType") Long tradeType);
|
||||
|
||||
BigDecimal selectPrevAvgContractCount(@Param("start") Date start, @Param("end") Date end, @Param("tradeType") Long tradeType);
|
||||
|
||||
BigDecimal selectPrevAvgExpiringCount(@Param("start") Date start, @Param("end") Date end, @Param("tradeType") Long tradeType);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package com.ruoyi.oa.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.ruoyi.oa.domain.SysOaWarehouseTask;
|
||||
import com.ruoyi.oa.domain.vo.SysOaWarehouseTaskVo;
|
||||
import com.ruoyi.common.core.mapper.BaseMapperPlus;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 采购计划Mapper接口
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -124,71 +124,66 @@
|
||||
|
||||
|
||||
<select id="selectVoPagePlus" resultType="com.ruoyi.oa.domain.vo.OaProgressVo">
|
||||
SELECT
|
||||
op.progress_id,
|
||||
op.project_id,
|
||||
op.contact_phone,
|
||||
op.type,
|
||||
op.progress_name,
|
||||
op.parent_id,
|
||||
op.del_flag,
|
||||
op.sort,
|
||||
op.remark,
|
||||
op.status,
|
||||
op.amount,
|
||||
op.time_remark,
|
||||
sop.project_name,
|
||||
sop.project_num,
|
||||
sop.funds,
|
||||
-- 获取 detail_status = 0 且 plan_start_date 最小的记录的 detail_name 作为 nowLevel
|
||||
(
|
||||
SELECT d.detail_name
|
||||
SELECT op.progress_id,
|
||||
op.project_id,
|
||||
op.contact_phone,
|
||||
op.type,
|
||||
op.progress_name,
|
||||
op.parent_id,
|
||||
op.del_flag,
|
||||
op.sort,
|
||||
op.remark,
|
||||
op.status,
|
||||
op.amount,
|
||||
op.time_remark,
|
||||
sop.project_name,
|
||||
sop.project_num,
|
||||
sop.funds,
|
||||
-- 获取 detail_status = 0 且 plan_start_date 最小的记录的 detail_name 作为 nowLevel
|
||||
(SELECT d.detail_name
|
||||
FROM oa_progress_detail d
|
||||
WHERE d.progress_id = op.progress_id
|
||||
AND d.detail_status = 0
|
||||
ORDER BY d.plan_start_date ASC
|
||||
LIMIT 1
|
||||
) AS nowLevel,
|
||||
(
|
||||
SELECT d.detail_id
|
||||
LIMIT 1) AS nowLevel,
|
||||
(select op2.contact_phone
|
||||
from oa_progress op2
|
||||
where op2.progress_id = op.parent_id) as parentPhone,
|
||||
(SELECT d.detail_id
|
||||
FROM oa_progress_detail d
|
||||
WHERE d.progress_id = op.progress_id
|
||||
AND d.detail_status = 0
|
||||
ORDER BY d.plan_start_date ASC
|
||||
LIMIT 1
|
||||
) AS nowLevelId,
|
||||
-- 计算该记录 plan_end_date 与当前时间的天数差值作为 remainTime
|
||||
(
|
||||
SELECT TIMESTAMPDIFF(DAY, NOW(), d.plan_end_date)
|
||||
LIMIT 1) AS nowLevelId,
|
||||
-- 计算该记录 plan_end_date 与当前时间的天数差值作为 remainTime
|
||||
(SELECT TIMESTAMPDIFF(DAY, NOW(), d.plan_end_date)
|
||||
FROM oa_progress_detail d
|
||||
WHERE d.progress_id = op.progress_id
|
||||
AND d.detail_status = 0
|
||||
ORDER BY d.plan_start_date ASC
|
||||
LIMIT 1
|
||||
) AS remainTime,
|
||||
LIMIT 1) AS remainTime,
|
||||
(SELECT d.department
|
||||
FROM oa_progress_detail d
|
||||
WHERE d.progress_id = op.progress_id
|
||||
AND d.detail_status = 0
|
||||
ORDER BY d.plan_start_date ASC
|
||||
LIMIT 1) AS nowDepart,
|
||||
(SELECT d.plan_end_date
|
||||
FROM oa_progress_detail d
|
||||
WHERE d.progress_id = op.progress_id
|
||||
AND d.detail_status = 0
|
||||
ORDER BY d.plan_start_date ASC
|
||||
LIMIT 1) AS endTime,
|
||||
|
||||
(
|
||||
SELECT d.plan_end_date
|
||||
FROM oa_progress_detail d
|
||||
WHERE d.progress_id = op.progress_id
|
||||
AND d.detail_status = 0
|
||||
ORDER BY d.plan_start_date ASC
|
||||
LIMIT 1
|
||||
) AS endTime,
|
||||
|
||||
(
|
||||
SELECT d.plan_pay_date
|
||||
(SELECT d.plan_pay_date
|
||||
FROM oa_progress_detail d
|
||||
WHERE d.progress_id = op.progress_id
|
||||
ORDER BY d.plan_pay_date ASC
|
||||
LIMIT 1
|
||||
) AS payEndTime,
|
||||
-- 计算当前 progress 对应的 detail 完成比例:满足 detail_status = 1 的条数 / 总条数(避免除0)
|
||||
(
|
||||
SELECT IF(COUNT(*) = 0, 0, ROUND(SUM(CASE WHEN d.detail_status = 1 THEN 1 ELSE 0 END) / COUNT(*), 2))
|
||||
LIMIT 1) AS payEndTime,
|
||||
-- 计算当前 progress 对应的 detail 完成比例:满足 detail_status = 1 的条数 / 总条数(避免除0)
|
||||
(SELECT IF(COUNT(*) = 0, 0, ROUND(SUM(CASE WHEN d.detail_status = 1 THEN 1 ELSE 0 END) / COUNT(*), 2))
|
||||
FROM oa_progress_detail d
|
||||
WHERE d.progress_id = op.progress_id
|
||||
) AS detailCompletePercent
|
||||
WHERE d.progress_id = op.progress_id) AS detailCompletePercent
|
||||
FROM oa_progress op
|
||||
LEFT JOIN sys_oa_project sop ON sop.project_id = op.project_id
|
||||
${ew.getCustomSqlSegment}
|
||||
|
||||
@@ -585,6 +585,189 @@
|
||||
from sys_oa_project sop
|
||||
where sop.project_id = #{projectId}
|
||||
</select>
|
||||
<!-- 本月合同总额 -->
|
||||
<select id="selectTotalFunds" resultType="java.math.BigDecimal">
|
||||
SELECT IFNULL(SUM(funds),0)
|
||||
FROM sys_oa_project
|
||||
<where>
|
||||
AND begin_time BETWEEN #{start} AND #{end}
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
|
||||
</select>
|
||||
|
||||
<!-- 历史(月度)平均合同总额 -->
|
||||
<select id="selectPrevAvgTotalFunds" resultType="java.math.BigDecimal">
|
||||
SELECT IFNULL(AVG(monthly_sum),0)
|
||||
FROM (
|
||||
SELECT SUM(funds) AS monthly_sum
|
||||
FROM sys_oa_project
|
||||
<where>
|
||||
AND begin_time < #{start}
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY YEAR(begin_time), MONTH(begin_time)
|
||||
) t
|
||||
</select>
|
||||
|
||||
<!-- 本月合同数量 -->
|
||||
<select id="selectContractCount" resultType="java.lang.Integer">
|
||||
SELECT COUNT(*)
|
||||
FROM sys_oa_project
|
||||
<where>
|
||||
AND begin_time BETWEEN #{start} AND #{end}
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
|
||||
</select>
|
||||
|
||||
<!-- 历史(月度)平均合同数量 -->
|
||||
<select id="selectPrevAvgContractCount" resultType="java.math.BigDecimal">
|
||||
SELECT IFNULL(AVG(monthly_cnt),0)
|
||||
FROM (
|
||||
SELECT COUNT(*) AS monthly_cnt
|
||||
FROM sys_oa_project
|
||||
<where>
|
||||
AND begin_time < #{start}
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY YEAR(begin_time), MONTH(begin_time)
|
||||
) t
|
||||
</select>
|
||||
|
||||
<!-- 本月临期项目数(仅未完成) -->
|
||||
<select id="selectExpiringCount" resultType="java.lang.Integer">
|
||||
SELECT COUNT(*)
|
||||
FROM sys_oa_project
|
||||
<where>
|
||||
AND project_status = '0'
|
||||
AND finish_time BETWEEN #{start} AND #{end}
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
|
||||
</select>
|
||||
|
||||
<!-- 历史(月度)平均临期项目数 -->
|
||||
<select id="selectPrevAvgExpiringCount" resultType="java.math.BigDecimal">
|
||||
SELECT IFNULL(AVG(monthly_expiring),0)
|
||||
FROM (
|
||||
SELECT COUNT(*) AS monthly_expiring
|
||||
FROM sys_oa_project
|
||||
<where>
|
||||
AND project_status = '0'
|
||||
AND finish_time < #{start}
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
|
||||
GROUP BY YEAR(finish_time), MONTH(finish_time)
|
||||
) t
|
||||
</select>
|
||||
<select id="selectContractAmountTrend" resultType="com.ruoyi.oa.domain.vo.TrendPointVo">
|
||||
SELECT
|
||||
CONCAT(t.mth, '月') AS month,
|
||||
t.value
|
||||
FROM (
|
||||
SELECT
|
||||
YEAR(begin_time) AS yr,
|
||||
MONTH(begin_time) AS mth,
|
||||
IFNULL(SUM(funds),0) AS value
|
||||
FROM sys_oa_project
|
||||
|
||||
<where>
|
||||
AND begin_time BETWEEN #{start} AND #{end}
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY
|
||||
YEAR(begin_time),
|
||||
MONTH(begin_time)
|
||||
) AS t
|
||||
ORDER BY
|
||||
t.yr,
|
||||
t.mth
|
||||
</select>
|
||||
<select id="selectProjectStatusDistribution" resultType="com.ruoyi.oa.domain.vo.StatusCountVo">
|
||||
SELECT status, COUNT(*) AS count FROM (
|
||||
SELECT
|
||||
CASE
|
||||
WHEN NOW() > finish_time THEN '已逾期'
|
||||
WHEN finish_time BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY) THEN '即将到期'
|
||||
WHEN project_status = '0' THEN '进行中'
|
||||
ELSE '正常'
|
||||
END AS status
|
||||
FROM sys_oa_project
|
||||
<where>
|
||||
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
) t
|
||||
GROUP BY status
|
||||
</select>
|
||||
<select id="selectMonthlyContractComparison" resultType="com.ruoyi.oa.domain.vo.TrendPointVo">
|
||||
SELECT
|
||||
CONCAT(t.mth, '月') AS month,
|
||||
t.value
|
||||
FROM (
|
||||
SELECT
|
||||
YEAR(begin_time) AS yr,
|
||||
MONTH(begin_time) AS mth,
|
||||
COUNT(*) AS value
|
||||
FROM sys_oa_project
|
||||
<where>
|
||||
AND begin_time BETWEEN #{start} AND #{end}
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY
|
||||
YEAR(begin_time),
|
||||
MONTH(begin_time)
|
||||
) AS t
|
||||
ORDER BY
|
||||
t.yr,
|
||||
t.mth
|
||||
</select>
|
||||
<select id="selectExpiringForeignProjects" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
|
||||
SELECT
|
||||
p.project_id AS projectId,
|
||||
p.project_name AS projectName,
|
||||
p.funds AS funds,
|
||||
p.finish_time AS finishTime,
|
||||
CASE
|
||||
WHEN NOW() > p.finish_time THEN '已逾期'
|
||||
WHEN p.finish_time BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL #{expireDays} DAY) THEN '即将到期'
|
||||
ELSE '进行中'
|
||||
END AS status,
|
||||
TIMESTAMPDIFF(
|
||||
DAY,
|
||||
NOW(),
|
||||
p.finish_time
|
||||
) AS remainTime
|
||||
FROM sys_oa_project p
|
||||
<where>
|
||||
AND TIMESTAMPDIFF(DAY, NOW(), p.finish_time) < #{expireDays}
|
||||
AND p.project_status = '0'
|
||||
<if test="tradeType !=null and tradeType !=''">
|
||||
and p.trade_type = #{tradeType}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
TIMESTAMPDIFF(DAY, NOW(), p.finish_time) ASC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user