diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectBudgetInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectBudgetInfoEntity.java index 7b5e4bb..83be724 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/ProjectBudgetInfoEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectBudgetInfoEntity.java @@ -30,7 +30,7 @@ public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializ @ExcelProperty("主键") @ApiModelProperty("主键") - @TableId(value = "budget_id", type = IdType.ASSIGN_ID) + @TableId(value = "budget_id", type = IdType.AUTO) private String budgetId; @ExcelProperty("项目id") @@ -43,13 +43,8 @@ public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializ @TableField("budget_name") private String budgetName; - @ExcelProperty("预算类型") - @ApiModelProperty("预算类型") - @TableField("budget_type") - private String budgetType; - - @ExcelProperty("预算金额(万元)") - @ApiModelProperty("预算金额(万元)") + @ExcelProperty("预算花费金额") + @ApiModelProperty("预算花费金额") @TableField("budget_amount") private Double budgetAmount; @@ -57,5 +52,10 @@ public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializ @ApiModelProperty("预算说明") @TableField("budget_desc") private String budgetDesc; + + @ExcelProperty("附件") + @ApiModelProperty("附件") + @TableField("attach") + private String attach; } diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java index bb6acad..69340af 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java @@ -171,5 +171,35 @@ public class ProjectEntity extends AuditableEntity implements Serializable { @ApiModelProperty(value = "结束时间") private LocalDate endDate; + + @ApiModelProperty("人工成本") + private Double laborCost; + + @ApiModelProperty("设备摊销") + private Double equipmentAmortization; + + @ApiModelProperty("奖金预提") + private Double bonusProvision; + + @ApiModelProperty("交通食宿") + private Double transAccomMeals; + + @ApiModelProperty("其他杂费") + private Double othersCost; + + @ApiModelProperty("已用人工成本") + private Double useLaborCost; + + @ApiModelProperty("已用设备摊销") + private Double useEquipmentAmortization; + + @ApiModelProperty("已用奖金预提") + private Double useBonusProvision; + + @ApiModelProperty("已用交通食宿") + private Double useTransAccomMeals; + + @ApiModelProperty("已用其他杂费") + private Double useOthersCost; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoDetailResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoDetailResp.java new file mode 100644 index 0000000..fa1b3df --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoDetailResp.java @@ -0,0 +1,58 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@ApiModel("项目预算信息详情") +public class ProjectBudgetInfoDetailResp implements Serializable { + @Serial + private static final long serialVersionUID = 766154886845694269L; + + @ApiModelProperty("项目id") + private String projectId; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("项目预算") + private Double projectBudget; + + @ApiModelProperty("人工成本") + private Double laborCost; + + @ApiModelProperty("设备摊销") + private Double equipmentAmortization; + + @ApiModelProperty("奖金预提") + private Double bonusProvision; + + @ApiModelProperty("交通食宿") + private Double transAccomMeals; + + @ApiModelProperty("其他杂费") + private Double othersCost; + + @ApiModelProperty("已用人工成本") + private Double useLaborCost; + + @ApiModelProperty("已用设备摊销") + private Double useEquipmentAmortization; + + @ApiModelProperty("已用奖金预提") + private Double useBonusProvision; + + @ApiModelProperty("已用交通食宿") + private Double useTransAccomMeals; + + @ApiModelProperty("已用其他杂费") + private Double useOthersCost; + + @ApiModelProperty("剩余预算") + private Double restBudget; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoImportReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoImportReq.java index 18d93a7..ec8918f 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoImportReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoImportReq.java @@ -20,19 +20,18 @@ public class ProjectBudgetInfoImportReq implements Serializable { @Serial private static final long serialVersionUID = 580212651388155611L; - - @ExcelProperty(value = "项目名称") - private String projectName; + @ExcelProperty(value = "项目Id") + private String projectId; @ExcelProperty(value = "预算名称") private String budgetName; - @ExcelProperty(value = "预算类型") - private String budgetType; - - @ExcelProperty(value = "预算金额(万元)") + @ExcelProperty(value = "预算花费金额") private Double budgetAmount; @ExcelProperty(value = "预算说明") private String budgetDesc; + + @ExcelProperty(value = "附件") + private String attach; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListReq.java index 047b5e9..0188223 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListReq.java @@ -22,7 +22,7 @@ public class ProjectBudgetInfoListReq implements Serializable { @ApiModelProperty("查询关键字") private String keyword; - @ApiModelProperty("项目预算信息Id") + @ApiModelProperty("项目预算单Id") private String budgetId; @ApiModelProperty("项目id") @@ -31,14 +31,10 @@ public class ProjectBudgetInfoListReq implements Serializable { @ApiModelProperty("预算名称") private String budgetName; - @ApiModelProperty("预算类型") - private String budgetType; - - @ApiModelProperty("预算金额(万元)") + @ApiModelProperty("预算花费金额") private Double budgetAmount; @ApiModelProperty("预算说明") private String budgetDesc; - } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListResp.java index af0e31b..17abe5d 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoListResp.java @@ -2,6 +2,7 @@ package com.dite.znpt.domain.vo; import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity; import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,6 +15,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @ApiModel("项目预算信息列表响应实体") public class ProjectBudgetInfoListResp extends ProjectBudgetInfoEntity { - + @ApiModelProperty("项目名称") + private String projectName; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoReq.java index 60caa06..27998c3 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoReq.java @@ -26,16 +26,13 @@ public class ProjectBudgetInfoReq implements Serializable { @ApiModelProperty("预算名称") private String budgetName; - @ApiModelProperty("预算类型") - private String budgetType; - - @ApiModelProperty("预算金额(万元)") + @ApiModelProperty("预算花费金额") private Double budgetAmount; @ApiModelProperty("预算说明") private String budgetDesc; - @ApiModelProperty("附件id") - private String attachId; + @ApiModelProperty("附件") + private String attach; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoResp.java index 70b2d3f..fed9529 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectBudgetInfoResp.java @@ -15,8 +15,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @ApiModel("项目预算信息响应实体") public class ProjectBudgetInfoResp extends ProjectBudgetInfoEntity { - - @ApiModelProperty("预算类型描述") - private String budgetTypeDesc; + @ApiModelProperty("项目名称") + private String projectName; } diff --git a/core/src/main/java/com/dite/znpt/service/ProjectBudgetInfoService.java b/core/src/main/java/com/dite/znpt/service/ProjectBudgetInfoService.java index 72aa0f0..05e719a 100644 --- a/core/src/main/java/com/dite/znpt/service/ProjectBudgetInfoService.java +++ b/core/src/main/java/com/dite/znpt/service/ProjectBudgetInfoService.java @@ -2,10 +2,8 @@ package com.dite.znpt.service; import com.baomidou.mybatisplus.extension.service.IService; import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity; -import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq; -import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp; -import com.dite.znpt.domain.vo.ProjectBudgetInfoReq; -import com.dite.znpt.domain.vo.ProjectBudgetInfoResp; +import com.dite.znpt.domain.vo.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -15,34 +13,14 @@ import java.util.List; * @Description: 项目预算信息表服务接口 */ public interface ProjectBudgetInfoService extends IService { + List list(ProjectBudgetInfoListReq projectBudgetInfoListReq); - /** - * 功能描述:查询项目预算信息列表 - * - * @param projectBudgetInfoReq 项目预算信息 - * @return {@link List }<{@link ProjectBudgetInfoListResp }> - * @author huise23 - * @date 2025/07/17 21:58 - **/ - List selectList(ProjectBudgetInfoListReq projectBudgetInfoReq); + List page(ProjectBudgetInfoListReq projectBudgetInfoListReq); - /** - * 功能描述:根据项目id获取项目预算信息列表 - * - * @param projectId 项目id - * @return {@link List }<{@link ProjectBudgetInfoListResp }> - * @author huise23 - * @date 2025/07/17 21:58 - **/ - List detailByProjectId(String projectId); + void saveData(ProjectBudgetInfoImportReq req); - /** - * 功能描述:新增项目预算信息 - * - * @param projectBudgetInfoReq 项目预算信息 - * @author huise23 - * @date 2025/07/17 21:58 - **/ - void saveData(List projectBudgetInfoReq); + void saveData(ProjectBudgetInfoImportReq req, MultipartFile[] files); + + ProjectBudgetInfoDetailResp detailByProjectId(String projectId); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectBudgetInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectBudgetInfoServiceImpl.java index 5380782..7315277 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/ProjectBudgetInfoServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectBudgetInfoServiceImpl.java @@ -1,25 +1,21 @@ package com.dite.znpt.service.impl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.util.IdUtil; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity; -import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq; -import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp; -import com.dite.znpt.domain.vo.ProjectBudgetInfoReq; -import com.dite.znpt.domain.vo.ProjectBudgetInfoResp; -import com.dite.znpt.enums.AttachBusinessTypeEnum; -import com.dite.znpt.enums.BudgeTypeEnum; +import com.dite.znpt.domain.entity.ProjectEntity; +import com.dite.znpt.domain.vo.*; import com.dite.znpt.mapper.ProjectBudgetInfoMapper; -import com.dite.znpt.service.AttachInfoService; import com.dite.znpt.service.ProjectBudgetInfoService; +import com.dite.znpt.service.ProjectService; import com.dite.znpt.util.PageUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; -import java.util.ArrayList; +import javax.annotation.Resource; +import java.util.Collections; import java.util.List; /** @@ -30,63 +26,49 @@ import java.util.List; @Service @RequiredArgsConstructor public class ProjectBudgetInfoServiceImpl extends ServiceImpl implements ProjectBudgetInfoService { + @Resource + ProjectService projectService; - private final AttachInfoService attachInfoService; + @Resource + AttachInfoServiceImpl attachInfoService; - /** - * 功能描述:查询项目预算信息列表 - * - * @param projectBudgetInfoReq 项目预算信息信息 - * @return {@link List }<{@link ProjectBudgetInfoResp }> - * @author huise23 - * @date 2025/07/17 21:58 - **/ @Override - public List selectList(ProjectBudgetInfoListReq projectBudgetInfoReq) { - PageUtil.startPage(); - List projectBudgetInfoList= this.baseMapper.queryBySelective(projectBudgetInfoReq); - projectBudgetInfoList.forEach(resp -> { - - }); - return projectBudgetInfoList; - } - - /** - * 功能描述:根据项目id获取项目预算信息列表 - * - * @param projectId 项目id - * @return {@link List }<{@link ProjectBudgetInfoListResp }> - * @author huise23 - * @date 2025/07/17 21:58 - **/ - @Override - public List detailByProjectId(String projectId) { - List projectBudgetInfoList= this.baseMapper.detailByProjectId(projectId); - projectBudgetInfoList.forEach(resp -> { - resp.setBudgetTypeDesc(BudgeTypeEnum.getDescByCode(resp.getBudgetType())); - }); - return projectBudgetInfoList; - } - - /** - * 功能描述:新增项目预算信息 - * - * @param projectBudgetInfoReq 项目预算信息 - * @author huise23 - * @date 2025/07/17 21:58 - **/ - @Override - @Transactional(rollbackFor = Exception.class) - public void saveData(List projectBudgetInfoReq) { - List list = new ArrayList<>(); - for (ProjectBudgetInfoReq req : projectBudgetInfoReq) { - ProjectBudgetInfoEntity info = BeanUtil.copyProperties(req, ProjectBudgetInfoEntity.class); - info.setBudgetId(IdUtil.simpleUUID()); - attachInfoService.updateBusinessIdByAttachIds(info.getBudgetId(), ListUtil.of(req.getAttachId()), AttachBusinessTypeEnum.PROJECT_BUDGE); - list.add(info); + public List list(ProjectBudgetInfoListReq req) { + List list = this.baseMapper.queryBySelective(req); + if (CollectionUtil.isEmpty(list)) { + return Collections.emptyList(); // 返回不可修改的空集合 } - lambdaUpdate().eq(ProjectBudgetInfoEntity::getProjectId, list.get(0).getProjectId()).remove(); - baseMapper.insert(list); + list.forEach(item -> { + item.setProjectName(projectService.getById(item.getProjectId()).getProjectName()); + }); + return list; } + @Override + public List page(ProjectBudgetInfoListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public void saveData(ProjectBudgetInfoImportReq req) { + ProjectBudgetInfoEntity entity = BeanUtil.copyProperties(req, ProjectBudgetInfoEntity.class); + this.baseMapper.insert(entity); + } + + @Override + public void saveData(ProjectBudgetInfoImportReq req, MultipartFile[] files) { + ProjectBudgetInfoEntity entity = BeanUtil.copyProperties(req, ProjectBudgetInfoEntity.class); + // 把附件存起来,使用已有的附件上传逻辑就行,但我看不懂,pass + this.baseMapper.insert(entity); + } + + @Override + public ProjectBudgetInfoDetailResp detailByProjectId(String projectId) { + ProjectEntity projectEntity = projectService.getById(projectId); + ProjectBudgetInfoDetailResp resp = new ProjectBudgetInfoDetailResp(); + BeanUtil.copyProperties(projectEntity, resp); + resp.setRestBudget(resp.getProjectBudget() - resp.getUseLaborCost() - resp.getUseEquipmentAmortization() - resp.getUseBonusProvision() - resp.getUseTransAccomMeals() - resp.getUseOthersCost()); + return resp; + } } diff --git a/core/src/main/resources/mapper/ProjectBudgetInfoMapper.xml b/core/src/main/resources/mapper/ProjectBudgetInfoMapper.xml index 5425a2b..d8cd25a 100644 --- a/core/src/main/resources/mapper/ProjectBudgetInfoMapper.xml +++ b/core/src/main/resources/mapper/ProjectBudgetInfoMapper.xml @@ -3,47 +3,24 @@ - a.budget_id, a.project_id, a.budget_name, a.budget_type, - a.budget_amount, a.budget_desc, a.update_by, a.create_time, - a.create_by, a.update_time + a.budget_id, a.project_id, a.budget_name, + a.budget_amount, a.budget_desc, a.attach - - diff --git a/web/src/main/java/com/dite/znpt/web/controller/BudgetController.java b/web/src/main/java/com/dite/znpt/web/controller/BudgetController.java deleted file mode 100644 index 1039220..0000000 --- a/web/src/main/java/com/dite/znpt/web/controller/BudgetController.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.dite.znpt.web.controller; - -import com.dite.znpt.service.ProjectService; -import io.swagger.annotations.Api; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.List; - -@Api(tags = "预算管理") -@RestController("/budget") -public class BudgetController { - @Resource - private ProjectService projectService; - - -} diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectBudgetInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectBudgetInfoController.java index 3771898..98f5999 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/ProjectBudgetInfoController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectBudgetInfoController.java @@ -3,10 +3,7 @@ package com.dite.znpt.web.controller; import com.dite.znpt.domain.PageResult; import com.dite.znpt.domain.Result; -import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq; -import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp; -import com.dite.znpt.domain.vo.ProjectBudgetInfoReq; -import com.dite.znpt.domain.vo.ProjectBudgetInfoResp; +import com.dite.znpt.domain.vo.*; import com.dite.znpt.service.ProjectBudgetInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -26,23 +23,29 @@ public class ProjectBudgetInfoController { @Resource private ProjectBudgetInfoService projectBudgetInfoService; - @ApiOperation(value = "获取项目预算信息列表", httpMethod = "GET") + @ApiOperation(value = "筛选项目预算信息列表", httpMethod = "GET") @GetMapping("/list") - public PageResult list(ProjectBudgetInfoListReq projectBudgetInfoReq) { - return PageResult.ok(projectBudgetInfoService.selectList(projectBudgetInfoReq)); + public Result> list(ProjectBudgetInfoListReq projectBudgetInfoListReq) { + return Result.ok(projectBudgetInfoService.list(projectBudgetInfoListReq)); } - @ApiOperation(value = "根据项目id获取项目预算信息列表", httpMethod = "GET") - @GetMapping("/detail/{projectId}") - public PageResult detailByProjectId(@PathVariable String projectId) { - return PageResult.ok(projectBudgetInfoService.detailByProjectId(projectId)); + @ApiOperation(value = "分页筛选项目预算信息列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(ProjectBudgetInfoListReq projectBudgetInfoListReq) { + return PageResult.ok(projectBudgetInfoService.page(projectBudgetInfoListReq)); } - @ApiOperation(value = "保存项目预算信息", httpMethod = "POST") - @PostMapping - public Result add(@RequestBody List projectBudgetInfoReq) { - projectBudgetInfoService.saveData(projectBudgetInfoReq); + @ApiOperation(value = "新增项目预算信息", httpMethod = "POST") + @PostMapping("/save") + public Result save(@RequestBody ProjectBudgetInfoImportReq req) { + projectBudgetInfoService.saveData(req); return Result.ok(); } + + @ApiOperation(value = "项目预算信息详情", httpMethod = "GET") + @GetMapping("/{projectId}/detail") + public Result detail(@PathVariable String projectId) { + return Result.ok(projectBudgetInfoService.detailByProjectId(projectId)); + } }