From cf7d1631c20c00e1fdb9d89a48d96a56d061445b Mon Sep 17 00:00:00 2001 From: liuzongkun999 Date: Wed, 5 Mar 2025 17:31:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=88=90=E6=9C=AC?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=A8=A1=E5=9D=97=E5=90=8E=E7=AB=AF=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/controller/SysOaCostController.java | 145 ++++++++++++ .../java/com/ruoyi/oa/domain/SysOaCost.java | 68 ++++++ .../com/ruoyi/oa/domain/bo/SysOaCostBo.java | 73 ++++++ .../com/ruoyi/oa/domain/vo/SysOaCostAll.java | 39 ++++ .../ruoyi/oa/domain/vo/SysOaCostAllVo.java | 44 ++++ .../com/ruoyi/oa/domain/vo/SysOaCostList.java | 20 ++ .../com/ruoyi/oa/domain/vo/SysOaCostRow.java | 13 ++ .../com/ruoyi/oa/domain/vo/SysOaCostVo.java | 80 +++++++ .../com/ruoyi/oa/mapper/SysOaCostMapper.java | 28 +++ .../ruoyi/oa/service/ISysOaCostService.java | 64 ++++++ .../oa/service/impl/SysOaCostServiceImpl.java | 212 ++++++++++++++++++ .../resources/mapper/oa/SysOaCostMapper.xml | 44 ++++ 12 files changed, 830 insertions(+) create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaCostController.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaCost.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaCostBo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAll.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAllVo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostList.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostRow.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostVo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaCostMapper.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaCostService.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaCostServiceImpl.java create mode 100644 ruoyi-oa/src/main/resources/mapper/oa/SysOaCostMapper.xml diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaCostController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaCostController.java new file mode 100644 index 0000000..92dd0be --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaCostController.java @@ -0,0 +1,145 @@ +package com.ruoyi.oa.controller; + +import java.util.Date; +import java.util.List; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.oa.domain.vo.SysOaCostAllVo; +import com.ruoyi.oa.domain.vo.SysOaCostRow; +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.SysOaCostVo; +import com.ruoyi.oa.domain.bo.SysOaCostBo; +import com.ruoyi.oa.service.ISysOaCostService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 项目成本分析 + * + * @author ruoyi + * @date 2025-03-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/cost") +public class SysOaCostController extends BaseController { + + private final ISysOaCostService iSysOaCostService; + + /** + * 查询项目成本分析列表 + */ + @SaCheckPermission("oa:oaCost:list") + @GetMapping("/list1") + public TableDataInfo list1(SysOaCostBo bo, PageQuery pageQuery) { + return iSysOaCostService.queryPageList(bo, pageQuery); + } + + /** + * 导出项目成本分析列表 + */ + @SaCheckPermission("oa:oaCost:export") + @Log(title = "项目成本分析", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysOaCostBo bo, HttpServletResponse response) { + List list = iSysOaCostService.queryList(bo); + ExcelUtil.exportExcel(list, "项目成本分析", SysOaCostVo.class, response); + } + + /** + * 获取项目成本分析详细信息 + * + * @param costId 主键 + */ + @SaCheckPermission("oa:oaCost:query") + @GetMapping("/old/{costId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long costId) { + return R.ok(iSysOaCostService.queryById(costId)); + } + + /** + * 新增项目成本分析 + */ + @SaCheckPermission("oa:oaCost:add") + @Log(title = "项目成本分析", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add1(@Validated(AddGroup.class) @RequestBody SysOaCostBo bo) { + return toAjax(iSysOaCostService.insertByBo(bo)); + } + + /** + * 修改项目成本分析 + */ + @SaCheckPermission("oa:oaCost:edit") + @Log(title = "项目成本分析", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysOaCostBo bo) { + return toAjax(iSysOaCostService.updateByBo(bo)); + } + + + + /** + * 查询所有项目成本 + */ + @SaCheckPermission("oa:oaCost:list") + @GetMapping("/list") + public TableDataInfo AllList(@RequestParam(required = false) String projectName, @RequestParam(required = false)String createTime) { + return iSysOaCostService.AllList(projectName, createTime); + } + /** + * 查询详情 + */ + @SaCheckPermission("oa:oaCost:list") + @GetMapping("/{projectId}") + public TableDataInfo getDetail(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + return iSysOaCostService.getDetail(projectId); + } + + /** + * 新增成本 + */ + @SaCheckPermission("oa:oaCost:add") + @Log(title = "项目成本分析", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/add") + public R add(@Validated(AddGroup.class) @RequestBody SysOaCostBo bo) { + return toAjax(iSysOaCostService.insertByBo(bo)); + } + + /** + * 删除项目成本分析 + * + * @param ids 主键串 + */ + @SaCheckPermission("oa:cost:remove") + @Log(title = "项目成本分析", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iSysOaCostService.deleteWithValidByIds(Arrays.asList(ids), true)); + } + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaCost.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaCost.java new file mode 100644 index 0000000..7f04202 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaCost.java @@ -0,0 +1,68 @@ +package com.ruoyi.oa.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 项目成本分析对象 sys_oa_cost + * + * @author ruoyi + * @date 2025-03-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_oa_cost") +public class SysOaCost extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键id + */ + @TableId(value = "cost_id") + private Long costId; + /** + * 绑定项目id + */ + private Long projectId; + /** + * 花费 + */ + private Double cost; + /** + * 花费类型,字典查询 + */ + private Integer costType; + /** + * 花费备注 + */ + private String remark; + /** + * 删除标志 + */ + @TableLogic + private Long delFlag; + /** + * 若为物料花费需要绑定物料id + */ + private Long materialId; + /** + * 若为人工花费则绑定用户id + */ + private Long userId; + /** + * 绑定财政收支id + */ + private Long financeId; + /** + * 若为差旅报销绑定差旅id + */ + private Long claimId; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaCostBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaCostBo.java new file mode 100644 index 0000000..c223862 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaCostBo.java @@ -0,0 +1,73 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 项目成本分析业务对象 sys_oa_cost + * + * @author ruoyi + * @date 2025-03-04 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SysOaCostBo extends BaseEntity { + + /** + * 主键id + */ + private Long costId; + + /** + * 绑定项目id + */ + @NotNull(message = "绑定项目id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long projectId; + + /** + * 花费 + */ + @NotNull(message = "花费不能为空", groups = { AddGroup.class, EditGroup.class }) + private Double cost; + + /** + * 花费类型,字典查询 + */ + @NotNull(message = "花费类型,字典查询不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer costType; + + /** + * 花费备注 + */ + private String remark; + + /** + * 若为物料花费需要绑定物料id + */ + private Long materialId; + + /** + * 若为人工花费则绑定用户id + */ + private Long userId; + + /** + * 绑定财政收支id + */ + private Long financeId; + + /** + * 若为差旅报销绑定差旅id + */ + private Long claimId; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAll.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAll.java new file mode 100644 index 0000000..7bd9bfe --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAll.java @@ -0,0 +1,39 @@ +package com.ruoyi.oa.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +/** + * 查询所有项目成本 返回对象 + */ +@Data +@AllArgsConstructor +public class SysOaCostAll { + + private Long projectId; + + private String projectName; + + private Double cost; + + private Integer costType; + + private String remark; + + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") + private Date createTime; + + private Long materialId; + + private Long userId; + + private Long financeId; + + private Long claimId; + + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAllVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAllVo.java new file mode 100644 index 0000000..7a7df66 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAllVo.java @@ -0,0 +1,44 @@ +package com.ruoyi.oa.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +/** + * 查询所有项目成本 返回对象 + */ +@Data +@AllArgsConstructor +public class SysOaCostAllVo { + + private Long projectId; + + private String projectName; + + private Double cost; + + private Integer costType; + + private String remark; + + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") + private Date createTime; + + private Long materialId; + + private Object materialVo; + + private Long userId; + + private Object userVo; + + private Long claimId; + + private Object claimVo; + + private Long financeId; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostList.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostList.java new file mode 100644 index 0000000..610d0b2 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostList.java @@ -0,0 +1,20 @@ +package com.ruoyi.oa.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysOaCostList { + private Long costId; + private Double cost; + private Long userId; + private Object userVo; + private Long materialId; + private Object materialVo; + private Long claimId; + private Object claimVo; + private Integer costType; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostRow.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostRow.java new file mode 100644 index 0000000..eacbfdc --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostRow.java @@ -0,0 +1,13 @@ +package com.ruoyi.oa.domain.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class SysOaCostRow { + List userCostList; + List materialList; + List claimList; + List otherList; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostVo.java new file mode 100644 index 0000000..fca8480 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostVo.java @@ -0,0 +1,80 @@ +package com.ruoyi.oa.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 项目成本分析视图对象 sys_oa_cost + * + * @author ruoyi + * @date 2025-03-04 + */ +@Data +@ExcelIgnoreUnannotated +public class SysOaCostVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long costId; + + /** + * 绑定项目id + */ + @ExcelProperty(value = "绑定项目id") + private Long projectId; + + /** + * 花费 + */ + @ExcelProperty(value = "花费") + private Double cost; + + /** + * 花费类型,字典查询 + */ + @ExcelProperty(value = "花费类型,字典查询", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "project_cost_type") + private Integer costType; + + /** + * 花费备注 + */ + @ExcelProperty(value = "花费备注") + private String remark; + + /** + * 若为物料花费需要绑定物料id + */ + @ExcelProperty(value = "若为物料花费需要绑定物料id") + private Long materialId; + + /** + * 若为人工花费则绑定用户id + */ + @ExcelProperty(value = "若为人工花费则绑定用户id") + private Long userId; + + /** + * 绑定财政收支id + */ + @ExcelProperty(value = "绑定财政收支id") + private Long financeId; + + /** + * 若为差旅报销绑定差旅id + */ + @ExcelProperty(value = "若为差旅报销绑定差旅id") + private Long claimId; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaCostMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaCostMapper.java new file mode 100644 index 0000000..722fe7d --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaCostMapper.java @@ -0,0 +1,28 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.SysOaCost; +import com.ruoyi.oa.domain.vo.SysOaCostAll; +import com.ruoyi.oa.domain.vo.SysOaCostAllVo; +import com.ruoyi.oa.domain.vo.SysOaCostVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 项目成本分析Mapper接口 + * + * @author ruoyi + * @date 2025-03-04 + */ +public interface SysOaCostMapper extends BaseMapperPlus { + + + /** + * 查询所有项目成本 + */ + List AllList(@Param(value = "projectName") String projectName, @Param(value = "createTime") String createTime); + + + List getListByProjectId(Long projectId); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaCostService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaCostService.java new file mode 100644 index 0000000..077a4d8 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaCostService.java @@ -0,0 +1,64 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.vo.SysOaCostAllVo; +import com.ruoyi.oa.domain.vo.SysOaCostRow; +import com.ruoyi.oa.domain.vo.SysOaCostVo; +import com.ruoyi.oa.domain.bo.SysOaCostBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import javax.validation.constraints.NotNull; +import java.util.Collection; +import java.util.List; + +/** + * 项目成本分析Service接口 + * + * @author ruoyi + * @date 2025-03-04 + */ +public interface ISysOaCostService { + + /** + * 查询项目成本分析 + */ + SysOaCostVo queryById(Long costId); + + /** + * 查询项目成本分析列表 + */ + TableDataInfo queryPageList(SysOaCostBo bo, PageQuery pageQuery); + + /** + * 查询项目成本分析列表 + */ + List queryList(SysOaCostBo bo); + + /** + * 新增项目成本分析 + */ + Boolean insertByBo(SysOaCostBo bo); + + /** + * 修改项目成本分析 + */ + Boolean updateByBo(SysOaCostBo bo); + + /** + * 校验并批量删除项目成本分析信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询所有项目成本 + */ + TableDataInfo AllList(String projectName, String createTime); + + /** + * 查询详情 + */ + TableDataInfo getDetail(Long projectId); + + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaCostServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaCostServiceImpl.java new file mode 100644 index 0000000..72285d8 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaCostServiceImpl.java @@ -0,0 +1,212 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; +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.SysOaProject; +import com.ruoyi.oa.domain.vo.*; +import com.ruoyi.oa.mapper.*; +import com.ruoyi.system.mapper.SysUserMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import com.ruoyi.oa.domain.bo.SysOaCostBo; +import com.ruoyi.oa.domain.SysOaCost; +import com.ruoyi.oa.service.ISysOaCostService; + +import java.util.*; + +/** + * 项目成本分析Service业务层处理 + * + * @author ruoyi + * @date 2025-03-04 + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class SysOaCostServiceImpl implements ISysOaCostService { + + private final SysOaCostMapper baseMapper; + + private final SysUserMapper userMapper; + + private final SysOaClaimMapper claimMapper; + + private final SysOaWarehouseMapper warehouseMapper; + + + /** + * 查询项目成本分析 + */ + @Override + public SysOaCostVo queryById(Long costId){ + return baseMapper.selectVoById(costId); + } + + /** + * 查询项目成本分析列表 + */ + @Override + public TableDataInfo queryPageList(SysOaCostBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询项目成本分析列表 + */ + @Override + public List queryList(SysOaCostBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysOaCostBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getProjectId() != null, SysOaCost::getProjectId, bo.getProjectId()); + lqw.eq(bo.getCost() != null, SysOaCost::getCost, bo.getCost()); + lqw.eq(bo.getCostType() != null, SysOaCost::getCostType, bo.getCostType()); + lqw.like(StringUtils.isNotBlank(bo.getRemark()), SysOaCost::getRemark, bo.getRemark()); + lqw.eq(bo.getMaterialId() != null, SysOaCost::getMaterialId, bo.getMaterialId()); + lqw.eq(bo.getUserId() != null, SysOaCost::getUserId, bo.getUserId()); + lqw.eq(bo.getFinanceId() != null, SysOaCost::getFinanceId, bo.getFinanceId()); + lqw.eq(bo.getClaimId() != null, SysOaCost::getClaimId, bo.getClaimId()); + return lqw; + } + + /** + * 新增项目成本分析 + */ + @Override + public Boolean insertByBo(SysOaCostBo bo) { + SysOaCost add = BeanUtil.toBean(bo, SysOaCost.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setCostId(add.getCostId()); + } + return flag; + } + + /** + * 修改项目成本分析 + */ + @Override + public Boolean updateByBo(SysOaCostBo bo) { + SysOaCost update = BeanUtil.toBean(bo, SysOaCost.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysOaCost entity){ + //TODO 做一些数据校验,如唯一约束 + + } + + + + /** + * 批量删除项目成本分析 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 查询所有项目成本 + */ + + @Override + public TableDataInfo AllList(String projectName, String createTime) { + + List alls = baseMapper.AllList(projectName,createTime); + List allVos = new java.util.ArrayList<>(Collections.emptyList()); + if (alls.isEmpty()) return TableDataInfo.build(allVos); + for (SysOaCostAll all : alls) { + SysOaCostAllVo allVo = BeanUtil.toBean(all, SysOaCostAllVo.class); + + // 车间用工 + if (allVo.getCostType() == 1) { + allVo.setUserVo(userMapper.selectUserById(allVo.getUserId())); + } else if (allVo.getCostType() == 2) { // 差旅花费 + allVo.setClaimVo(claimMapper.selectSysOaClaimVoById(allVo.getClaimId())); + + } else if (allVo.getCostType() == 3) { // 库房物料 + allVo.setMaterialVo(warehouseMapper.selectVoById(allVo.getMaterialId())); + + } else if (allVo.getCostType() == 4) { // 其他 + + + } else if (allVo.getCostType() == 5) { // 接待 + + } + allVos.add(allVo); + } + return TableDataInfo.build(allVos); + } + + /** + * 查询详情 + */ + @Override + public TableDataInfo getDetail(Long projectId) { + log.info("查询projectId = {}", projectId); +// LambdaQueryWrapper lqw = Wrappers.lambdaQuery(SysOaCost.class); +// lqw.eq(SysOaCost::getProjectId,projectId); +// List costs = baseMapper.selectList(lqw); + List costs = baseMapper.getListByProjectId(projectId); + log.info("查询costs = {}", costs); + + if (costs.isEmpty()) { + return TableDataInfo.build(); + } + SysOaCostRow sysOaCostRow = new SysOaCostRow(); + sysOaCostRow.setUserCostList(new ArrayList<>()); + sysOaCostRow.setMaterialList(new ArrayList<>()); + sysOaCostRow.setClaimList(new ArrayList<>()); + sysOaCostRow.setOtherList(new ArrayList<>()); + for(SysOaCost cost : costs) { + SysOaCostList sysOaCostList = BeanUtil.toBean(cost,SysOaCostList.class); + log.info("查询cost = {}", cost); + log.info("sysOaCostList = {}", sysOaCostList); + + if(cost.getCostType() == 1) { + log.info("查询useVo = {}", userMapper.selectUserById(cost.getUserId())); + sysOaCostList.setUserVo(userMapper.selectUserById(cost.getUserId())); + sysOaCostRow.getUserCostList().add(sysOaCostList); + } else if(cost.getCostType() == 2) { + log.info("查询claimMapperVo = {}", claimMapper.selectSysOaClaimVoById(cost.getClaimId())); + sysOaCostList.setClaimVo(claimMapper.selectSysOaClaimVoById(cost.getClaimId())); + sysOaCostRow.getClaimList().add(sysOaCostList); + } else if(cost.getCostType() == 3) { + log.info("查询warehouseMapperVo = {}",warehouseMapper.selectVoById(cost.getMaterialId())); + sysOaCostList.setMaterialVo(warehouseMapper.selectVoById(cost.getMaterialId())); + sysOaCostRow.getMaterialList().add(sysOaCostList); + } else{ + sysOaCostRow.getOtherList().add(sysOaCostList); + } + + } + log.info("sysOaCostRow = {}", sysOaCostRow); + List rows = new java.util.ArrayList<>(Collections.singletonList(sysOaCostRow)); + return TableDataInfo.build(rows); + + } +} diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaCostMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaCostMapper.xml new file mode 100644 index 0000000..1c41e41 --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaCostMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + From 8f9389b9d569b8e8f42ba1de2d0b0e5cab9257bc Mon Sep 17 00:00:00 2001 From: hdka <823267011@qq.com> Date: Wed, 5 Mar 2025 19:30:54 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=80=83=E5=8B=A4bar=E5=9B=BE=E6=98=BE?= =?UTF-8?q?=E7=A4=BAbug=E4=BB=A5=E5=8F=8A=E4=BA=94=E5=A4=A7=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E6=B5=81=E7=A8=8B=E5=BC=80=E5=AE=8C=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/dashboard/BarChart.vue | 26 +- ruoyi-ui/src/views/oa/apply/absence/index.vue | 329 ++++++++++++++++++ .../src/views/oa/apply/entertain/index.vue | 329 ++++++++++++++++++ ruoyi-ui/src/views/oa/apply/other/index.vue | 329 ++++++++++++++++++ ruoyi-ui/src/views/oa/apply/seal/index.vue | 329 ++++++++++++++++++ ruoyi-ui/src/views/oa/attendance/index.vue | 19 +- ruoyi-ui/src/views/oa/claim/detail.vue | 28 +- ruoyi-ui/src/views/workflow/work/detail.vue | 161 ++++++--- ruoyi-ui/src/views/workflow/work/own.vue | 1 - ruoyi-ui/src/views/workflow/work/start.vue | 12 +- 10 files changed, 1478 insertions(+), 85 deletions(-) create mode 100644 ruoyi-ui/src/views/oa/apply/absence/index.vue create mode 100644 ruoyi-ui/src/views/oa/apply/entertain/index.vue create mode 100644 ruoyi-ui/src/views/oa/apply/other/index.vue create mode 100644 ruoyi-ui/src/views/oa/apply/seal/index.vue diff --git a/ruoyi-ui/src/views/dashboard/BarChart.vue b/ruoyi-ui/src/views/dashboard/BarChart.vue index a4b50fd..a6b2cd3 100644 --- a/ruoyi-ui/src/views/dashboard/BarChart.vue +++ b/ruoyi-ui/src/views/dashboard/BarChart.vue @@ -64,6 +64,7 @@ export default { this.chart.dispose(); this.chart = null; }, + methods: { initChart() { this.chart = echarts.init(this.$el, 'macarons'); @@ -73,37 +74,41 @@ export default { updateData(projectList) { this.colors = projectList.map((item) => item.color); this.laborCosts = projectList.map((item) => item.laborCost); - this.projectNames = projectList.map((item) => item.projectName.replace(/(.{5})/g, '$1\n')); + this.projectNames = projectList.map((item) => item.projectName.replace(/(.{5})/g, '$1\n')); // 保持换行格式 }, setOption() { this.chart.setOption({ tooltip: { trigger: 'axis', - axisPointer: {type: 'shadow'}, + axisPointer: { type: 'shadow' }, + formatter: (params) => { // 自定义 tooltip 格式 + const { dataIndex } = params[0]; // 获取鼠标悬停的索引 + const projectName = this.projectNames[dataIndex]; // 获取对应的项目名称 + const laborCost = this.laborCosts[dataIndex]; // 获取对应的人工成本 + return `${projectName}
人工成本: ${laborCost} 人天`; // 显示项目名称和人工成本 + }, }, grid: { top: 10, left: '2%', - right: '8%', // 增加右边距以适应标签 + right: '8%', bottom: '3%', containLabel: true, }, xAxis: { max: 'dataMax', - name: '人天', // 设置横坐标名称 - nameLocation: 'middle', // 横坐标名称的位置 - nameGap: 25, // 横坐标名称与轴线的距离 + name: '人天', + nameLocation: 'middle', + nameGap: 25, }, yAxis: { type: 'category', data: this.projectNames, inverse: true, - animationDuration: 300, - animationDurationUpdate: 300, axisLabel: { - rotate: 45, // 设置标签旋转角度,正值表示顺时针旋转 + rotate: 45, // 设置标签旋转角度 interval: 0, // 强制显示所有标签 - } + }, }, series: [ { @@ -130,5 +135,6 @@ export default { }); }, }, + }; diff --git a/ruoyi-ui/src/views/oa/apply/absence/index.vue b/ruoyi-ui/src/views/oa/apply/absence/index.vue new file mode 100644 index 0000000..01b3fe9 --- /dev/null +++ b/ruoyi-ui/src/views/oa/apply/absence/index.vue @@ -0,0 +1,329 @@ + + + diff --git a/ruoyi-ui/src/views/oa/apply/entertain/index.vue b/ruoyi-ui/src/views/oa/apply/entertain/index.vue new file mode 100644 index 0000000..a90483a --- /dev/null +++ b/ruoyi-ui/src/views/oa/apply/entertain/index.vue @@ -0,0 +1,329 @@ + + + diff --git a/ruoyi-ui/src/views/oa/apply/other/index.vue b/ruoyi-ui/src/views/oa/apply/other/index.vue new file mode 100644 index 0000000..8d4909b --- /dev/null +++ b/ruoyi-ui/src/views/oa/apply/other/index.vue @@ -0,0 +1,329 @@ + + + diff --git a/ruoyi-ui/src/views/oa/apply/seal/index.vue b/ruoyi-ui/src/views/oa/apply/seal/index.vue new file mode 100644 index 0000000..1af3481 --- /dev/null +++ b/ruoyi-ui/src/views/oa/apply/seal/index.vue @@ -0,0 +1,329 @@ + + + diff --git a/ruoyi-ui/src/views/oa/attendance/index.vue b/ruoyi-ui/src/views/oa/attendance/index.vue index e444bc2..7a0cc73 100644 --- a/ruoyi-ui/src/views/oa/attendance/index.vue +++ b/ruoyi-ui/src/views/oa/attendance/index.vue @@ -161,7 +161,8 @@ 计算 + >计算 + @@ -231,7 +232,7 @@ -

{{ date.getMonth()+1 }} 月度工作签到情况

+

{{ date.getMonth() + 1 }} 月度工作签到情况

@@ -389,7 +390,7 @@ export default { calcResultAttendances: [], calcResultProject: {}, projects: [], - fullscreenLoading:false, + fullscreenLoading: false, } }, @@ -470,7 +471,7 @@ export default { projectId: 0, userId: this.selectUser.userId, attendanceDay: this.selectIndex, - selectTime:this.queryParams.selectTime + selectTime: this.queryParams.selectTime } addOaAttendance(this.form).then(res => { this.getList() @@ -481,7 +482,7 @@ export default { this.form = { projectId: 0, attendanceDay: this.selectIndex, - selectTime:this.queryParams.selectTime + selectTime: this.queryParams.selectTime } // 集体赋予状态 addBatchOaAttendance(this.form).then(res => { @@ -496,7 +497,7 @@ export default { projectId: 1, userId: this.selectUser.userId, attendanceDay: this.selectIndex, - selectTime:this.queryParams.selectTime + selectTime: this.queryParams.selectTime } addOaAttendance(this.form).then(res => { this.getList() @@ -507,7 +508,7 @@ export default { this.form = { projectId: 1, attendanceDay: this.selectIndex, - selectTime:this.queryParams.selectTime + selectTime: this.queryParams.selectTime } // 集体赋予状态 addBatchOaAttendance(this.form).then(res => { @@ -609,7 +610,7 @@ export default { attendanceDay: this.selectIndex, dayLength: this.timeFlag === 0 ? this.form.dayLength : undefined, hour: this.timeFlag === 1 ? this.form.hour : undefined, - selectTime:this.queryParams.selectTime + selectTime: this.queryParams.selectTime } addOaAttendance(this.form).then(res => { this.selectUser = this.selectArrayIndex >= this.userList.length - 1 ? this.selectUser : this.userList[this.selectArrayIndex + 1] @@ -624,7 +625,7 @@ export default { attendanceDay: this.selectIndex, dayLength: this.timeFlag === 0 ? this.form.dayLength : undefined, hour: this.timeFlag === 1 ? this.form.hour : undefined, - selectTime:this.queryParams.selectTime + selectTime: this.queryParams.selectTime } // 集体赋予状态 addBatchOaAttendance(this.form).then(res => { diff --git a/ruoyi-ui/src/views/oa/claim/detail.vue b/ruoyi-ui/src/views/oa/claim/detail.vue index b197f05..02e0e6c 100644 --- a/ruoyi-ui/src/views/oa/claim/detail.vue +++ b/ruoyi-ui/src/views/oa/claim/detail.vue @@ -18,6 +18,28 @@ + + + {{ item.nickName }} + + + + + + {{ item.nickName }} + + + @@ -251,13 +273,7 @@ /> - - - - - - diff --git a/ruoyi-ui/src/views/workflow/work/detail.vue b/ruoyi-ui/src/views/workflow/work/detail.vue index f5f3319..ab4bb04 100644 --- a/ruoyi-ui/src/views/workflow/work/detail.vue +++ b/ruoyi-ui/src/views/workflow/work/detail.vue @@ -19,12 +19,34 @@ - + + + + + {{ item.nickName }} + + + + + + {{ item.nickName }} + + - + 通过 @@ -42,44 +64,47 @@ -
+
{{ formInfo.title }}
- - + +
- + -
流程标题:{{processTitleValue}}
+
流程标题:{{ processTitleValue }}
- +

{{ item.activityName }}

{{ item.assigneeName }} 在 {{ item.createTime }} 发起流程 - {{ item.assigneeName || '-'}} - - {{ item.createTime || '-'}} + {{ item.assigneeName || '-' }} + + {{ item.createTime || '-' }} {{ item.endTime || '-' }} - {{ item.duration || '-'}} + {{ item.duration || '-' }}
- {{ commentType(item.commentList[0].type) }} + + {{ commentType(item.commentList[0].type) }} + {{ item.commentList[0].time }} {{ item.commentList[0].fullMessage }} @@ -108,14 +133,15 @@ - + {{item.name}} + >{{ item.name }} + @@ -134,7 +160,8 @@ 部门列表
- + - + - - - + + +