feature:1.新增预算接口(列表字段缺失)

This commit is contained in:
pve-win10 2025-07-19 16:03:46 +08:00
parent 477be1154d
commit 054e30c1b8
13 changed files with 536 additions and 0 deletions

View File

@ -0,0 +1,61 @@
package com.dite.znpt.domain.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dite.znpt.domain.AuditableEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.io.Serializable;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息表实体类
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("project_budget_info")
@ApiModel(value="ProjectBudgetInfoEntity对象", description="项目预算信息表")
public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializable {
@Serial
private static final long serialVersionUID = 514469235298737990L;
@ExcelProperty("主键")
@ApiModelProperty("主键")
@TableId(value = "budget_id", type = IdType.ASSIGN_ID)
private String budgetId;
@ExcelProperty("项目id")
@ApiModelProperty("项目id")
@TableField("project_id")
private String projectId;
@ExcelProperty("预算名称")
@ApiModelProperty("预算名称")
@TableField("budget_name")
private String budgetName;
@ExcelProperty("预算类型")
@ApiModelProperty("预算类型")
@TableField("budget_type")
private String budgetType;
@ExcelProperty("预算金额(万元)")
@ApiModelProperty("预算金额(万元)")
@TableField("budget_amount")
private Double budgetAmount;
@ExcelProperty("预算说明")
@ApiModelProperty("预算说明")
@TableField("budget_desc")
private String budgetDesc;
}

View File

@ -0,0 +1,38 @@
package com.dite.znpt.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.io.Serializable;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息表导入请求类
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ProjectBudgetInfo导入请求对象", description="项目预算信息表")
public class ProjectBudgetInfoImportReq implements Serializable {
@Serial
private static final long serialVersionUID = 580212651388155611L;
@ExcelProperty(value = "项目名称")
private String projectName;
@ExcelProperty(value = "预算名称")
private String budgetName;
@ExcelProperty(value = "预算类型")
private String budgetType;
@ExcelProperty(value = "预算金额(万元)")
private Double budgetAmount;
@ExcelProperty(value = "预算说明")
private String budgetDesc;
}

View File

@ -0,0 +1,44 @@
package com.dite.znpt.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息请求实体
*/
@Data
@ApiModel("项目预算信息列表请求实体")
public class ProjectBudgetInfoListReq implements Serializable {
@Serial
private static final long serialVersionUID = 539751666379021505L;
@ApiModelProperty("查询关键字")
private String keyword;
@ApiModelProperty("项目预算信息Id")
private String budgetId;
@ApiModelProperty("项目id")
private String projectId;
@ApiModelProperty("预算名称")
private String budgetName;
@ApiModelProperty("预算类型")
private String budgetType;
@ApiModelProperty("预算金额(万元)")
private Double budgetAmount;
@ApiModelProperty("预算说明")
private String budgetDesc;
}

View File

@ -0,0 +1,19 @@
package com.dite.znpt.domain.vo;
import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息列表响应实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("项目预算信息列表响应实体")
public class ProjectBudgetInfoListResp extends ProjectBudgetInfoEntity {
}

View File

@ -0,0 +1,41 @@
package com.dite.znpt.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.io.Serializable;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息表请求类
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ProjectBudgetInfo请求对象", description="项目预算信息表")
public class ProjectBudgetInfoReq implements Serializable {
@Serial
private static final long serialVersionUID = 778519049897573879L;
@ApiModelProperty("项目id")
private String projectId;
@ApiModelProperty("预算名称")
private String budgetName;
@ApiModelProperty("预算类型")
private String budgetType;
@ApiModelProperty("预算金额(万元)")
private Double budgetAmount;
@ApiModelProperty("预算说明")
private String budgetDesc;
@ApiModelProperty("附件id")
private String attachId;
}

View File

@ -0,0 +1,22 @@
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;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息响应实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("项目预算信息响应实体")
public class ProjectBudgetInfoResp extends ProjectBudgetInfoEntity {
@ApiModelProperty("预算类型描述")
private String budgetTypeDesc;
}

View File

@ -17,6 +17,8 @@ public enum AttachBusinessTypeEnum {
INSURANCE_FILE("insurance", "保险文件"), INSURANCE_FILE("insurance", "保险文件"),
MODEL_FILE("model", "模型文件"), MODEL_FILE("model", "模型文件"),
DEFECT_MARK_PIC("defect_mark_pic", "缺陷标注图片"), DEFECT_MARK_PIC("defect_mark_pic", "缺陷标注图片"),
REPORT("report", "报告"),
PROJECT_BUDGE("project_budge", "预算文件"),
; ;
private final String code; private final String code;
private final String desc; private final String desc;

View File

@ -0,0 +1,52 @@
package com.dite.znpt.enums;
import cn.hutool.json.JSONObject;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: gaoxiong
* @Date: 2025/5/7 21:22
* @Description:
*/
@Getter
public enum BudgeTypeEnum {
PROCUREMENT("procurement", "采购"),
ARTIFICIAL("artificial", "人工"),
MANAGEMENT_FEE("managementFee", "管理费"),
;
private final String code;
private final String desc;
BudgeTypeEnum(String code, String desc){
this.code = code;
this.desc = desc;
}
public static BudgeTypeEnum getByCode(String code){
for (BudgeTypeEnum e : BudgeTypeEnum.values() ) {
if(e.code.equals(code)){
return e;
}
}
return null;
}
public static String getDescByCode(String code){
BudgeTypeEnum e = getByCode(code);
return null == e ? null : e.desc;
}
public static List<JSONObject> listAll(){
List<JSONObject> list = new ArrayList<>(BudgeTypeEnum.values().length);
for (BudgeTypeEnum e : BudgeTypeEnum.values() ) {
JSONObject jsonObject = new JSONObject();
jsonObject.set(e.code, e.desc);
list.add(jsonObject);
}
return list;
}
}

View File

@ -0,0 +1,20 @@
package com.dite.znpt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
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.ProjectBudgetInfoResp;
import java.util.List;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息表数据库访问层
*/
public interface ProjectBudgetInfoMapper extends BaseMapper<ProjectBudgetInfoEntity> {
List<ProjectBudgetInfoListResp> queryBySelective(ProjectBudgetInfoListReq projectBudgetInfoReq);
List<ProjectBudgetInfoResp> detailByProjectId(String projectId);
}

View File

@ -0,0 +1,48 @@
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 java.util.List;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息表服务接口
*/
public interface ProjectBudgetInfoService extends IService<ProjectBudgetInfoEntity> {
/**
* 功能描述查询项目预算信息列表
*
* @param projectBudgetInfoReq 项目预算信息
* @return {@link List }<{@link ProjectBudgetInfoListResp }>
* @author huise23
* @date 2025/07/17 21:58
**/
List<ProjectBudgetInfoListResp> selectList(ProjectBudgetInfoListReq projectBudgetInfoReq);
/**
* 功能描述根据项目id获取项目预算信息列表
*
* @param projectId 项目id
* @return {@link List }<{@link ProjectBudgetInfoListResp }>
* @author huise23
* @date 2025/07/17 21:58
**/
List<ProjectBudgetInfoResp> detailByProjectId(String projectId);
/**
* 功能描述新增项目预算信息
*
* @param projectBudgetInfoReq 项目预算信息
* @author huise23
* @date 2025/07/17 21:58
**/
void saveData(List<ProjectBudgetInfoReq> projectBudgetInfoReq);
}

View File

@ -0,0 +1,92 @@
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 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.mapper.ProjectBudgetInfoMapper;
import com.dite.znpt.service.AttachInfoService;
import com.dite.znpt.service.ProjectBudgetInfoService;
import com.dite.znpt.util.PageUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* @author huise23
* @date 2025/07/17 21:58
* @Description: 项目预算信息表服务实现类
*/
@Service
@RequiredArgsConstructor
public class ProjectBudgetInfoServiceImpl extends ServiceImpl<ProjectBudgetInfoMapper, ProjectBudgetInfoEntity> implements ProjectBudgetInfoService {
private final AttachInfoService attachInfoService;
/**
* 功能描述查询项目预算信息列表
*
* @param projectBudgetInfoReq 项目预算信息信息
* @return {@link List }<{@link ProjectBudgetInfoResp }>
* @author huise23
* @date 2025/07/17 21:58
**/
@Override
public List<ProjectBudgetInfoListResp> selectList(ProjectBudgetInfoListReq projectBudgetInfoReq) {
PageUtil.startPage();
List<ProjectBudgetInfoListResp> 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<ProjectBudgetInfoResp> detailByProjectId(String projectId) {
List<ProjectBudgetInfoResp> 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> projectBudgetInfoReq) {
List<ProjectBudgetInfoEntity> 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);
}
lambdaUpdate().eq(ProjectBudgetInfoEntity::getProjectId, list.get(0).getProjectId()).remove();
baseMapper.insert(list);
}
}

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dite.znpt.mapper.ProjectBudgetInfoMapper">
<sql id="Base_Column_List">
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
</sql>
<select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectBudgetInfoListResp">
select
<include refid="Base_Column_List"/>, p.*
from project_budget_info a
left join project p on a.project_id = p.project_id
<where>
<if test="budgetId != null and budgetId != ''">
and a.budget_id like concat ('%', #{budgetId}, '%')
</if>
<if test="projectId != null and projectId != ''">
and a.project_id like concat ('%', #{projectId}, '%')
</if>
<if test="budgetName != null and budgetName != ''">
and a.budget_name like concat ('%', #{budgetName}, '%')
</if>
<if test="budgetType != null and budgetType != ''">
and a.budget_type like concat ('%', #{budgetType}, '%')
</if>
<if test="budgetAmount != null">
and a.budget_amount = #{budgetAmount}
</if>
<if test="budgetDesc != null and budgetDesc != ''">
and a.budget_desc like concat ('%', #{budgetDesc}, '%')
</if>
</where>
</select>
<select id="detailByProjectId" resultType="com.dite.znpt.domain.vo.ProjectBudgetInfoResp">
select
<include refid="Base_Column_List"/>
from project_budget_info a
<where>
<if test="_parameter != null and _parameter != ''">
and a.project_id like concat ('%', #{projectId}, '%')
</if>
</where>
</select>
</mapper>

View File

@ -0,0 +1,48 @@
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.service.ProjectBudgetInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @author huise23
* @date 2025/07/17 21:55
*/
@Api(tags = "项目预算信息")
@RestController
@RequestMapping("/project-budget-info")
public class ProjectBudgetInfoController {
@Resource
private ProjectBudgetInfoService projectBudgetInfoService;
@ApiOperation(value = "获取项目预算信息列表", httpMethod = "GET")
@GetMapping("/list")
public PageResult<ProjectBudgetInfoListResp> list(ProjectBudgetInfoListReq projectBudgetInfoReq) {
return PageResult.ok(projectBudgetInfoService.selectList(projectBudgetInfoReq));
}
@ApiOperation(value = "根据项目id获取项目预算信息列表", httpMethod = "GET")
@GetMapping("/detail/{projectId}")
public PageResult<ProjectBudgetInfoResp> detailByProjectId(@PathVariable String projectId) {
return PageResult.ok(projectBudgetInfoService.detailByProjectId(projectId));
}
@ApiOperation(value = "保存项目预算信息", httpMethod = "POST")
@PostMapping
public Result<Object> add(@RequestBody List<ProjectBudgetInfoReq> projectBudgetInfoReq) {
projectBudgetInfoService.saveData(projectBudgetInfoReq);
return Result.ok();
}
}