投标管理模块

This commit is contained in:
2025-08-20 17:31:02 +08:00
parent 2a327719e2
commit 560cfc6658
32 changed files with 1927 additions and 17 deletions

View File

@ -0,0 +1,105 @@
package org.dromara.bidding.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.bidding.domain.vo.BusBiddingLimitListVo;
import org.dromara.bidding.domain.bo.BusBiddingLimitListBo;
import org.dromara.bidding.service.IBusBiddingLimitListService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 成本-投标
*
* @author Lion Li
* @date 2025-08-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/bidding/biddingLimitList")
public class BusBiddingLimitListController extends BaseController {
private final IBusBiddingLimitListService busBiddingLimitListService;
/**
* 查询成本-投标列表
*/
@SaCheckPermission("bidding:biddingLimitList:list")
@GetMapping("/list")
public TableDataInfo<BusBiddingLimitListVo> list(BusBiddingLimitListBo bo, PageQuery pageQuery) {
return busBiddingLimitListService.queryPageList(bo, pageQuery);
}
/**
* 导出成本-投标列表
*/
@SaCheckPermission("bidding:biddingLimitList:export")
@Log(title = "成本-投标", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BusBiddingLimitListBo bo, HttpServletResponse response) {
List<BusBiddingLimitListVo> list = busBiddingLimitListService.queryList(bo);
ExcelUtil.exportExcel(list, "成本-投标", BusBiddingLimitListVo.class, response);
}
/**
* 获取成本-投标详细信息
*
* @param id 主键
*/
@SaCheckPermission("bidding:biddingLimitList:query")
@GetMapping("/{id}")
public R<BusBiddingLimitListVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(busBiddingLimitListService.queryById(id));
}
/**
* 新增成本-投标
*/
@SaCheckPermission("bidding:biddingLimitList:add")
@Log(title = "成本-投标", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusBiddingLimitListBo bo) {
return toAjax(busBiddingLimitListService.insertByBo(bo));
}
/**
* 修改成本-投标
*/
@SaCheckPermission("bidding:biddingLimitList:edit")
@Log(title = "成本-投标", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusBiddingLimitListBo bo) {
return toAjax(busBiddingLimitListService.updateByBo(bo));
}
/**
* 删除成本-投标
*
* @param ids 主键串
*/
@SaCheckPermission("bidding:biddingLimitList:remove")
@Log(title = "成本-投标", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(busBiddingLimitListService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.bidding.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.bidding.domain.vo.BusBiddingUserVo;
import org.dromara.bidding.domain.bo.BusBiddingUserBo;
import org.dromara.bidding.service.IBusBiddingUserService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 招投标人员
*
* @author Lion Li
* @date 2025-08-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/bidding/biddingUser")
public class BusBiddingUserController extends BaseController {
private final IBusBiddingUserService busBiddingUserService;
/**
* 查询招投标人员列表
*/
@SaCheckPermission("bidding:biddingUser:list")
@GetMapping("/list")
public TableDataInfo<BusBiddingUserVo> list(BusBiddingUserBo bo, PageQuery pageQuery) {
return busBiddingUserService.queryPageList(bo, pageQuery);
}
/**
* 导出招投标人员列表
*/
@SaCheckPermission("bidding:biddingUser:export")
@Log(title = "招投标人员", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BusBiddingUserBo bo, HttpServletResponse response) {
List<BusBiddingUserVo> list = busBiddingUserService.queryList(bo);
ExcelUtil.exportExcel(list, "招投标人员", BusBiddingUserVo.class, response);
}
/**
* 获取招投标人员详细信息
*
* @param id 主键
*/
@SaCheckPermission("bidding:biddingUser:query")
@GetMapping("/{id}")
public R<BusBiddingUserVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(busBiddingUserService.queryById(id));
}
/**
* 新增招投标人员
*/
@SaCheckPermission("bidding:biddingUser:add")
@Log(title = "招投标人员", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusBiddingUserBo bo) {
return toAjax(busBiddingUserService.insertByBo(bo));
}
/**
* 修改招投标人员
*/
@SaCheckPermission("bidding:biddingUser:edit")
@Log(title = "招投标人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusBiddingUserBo bo) {
return toAjax(busBiddingUserService.updateByBo(bo));
}
/**
* 删除招投标人员
*
* @param ids 主键串
*/
@SaCheckPermission("bidding:biddingUser:remove")
@Log(title = "招投标人员", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(busBiddingUserService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.bidding.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.bidding.domain.vo.BusListOfWinningBidsVo;
import org.dromara.bidding.domain.bo.BusListOfWinningBidsBo;
import org.dromara.bidding.service.IBusListOfWinningBidsService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 中标项目一览
*
* @author Lion Li
* @date 2025-08-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/bidding/listOfWinningBids")
public class BusListOfWinningBidsController extends BaseController {
private final IBusListOfWinningBidsService busListOfWinningBidsService;
/**
* 查询中标项目一览列表
*/
@SaCheckPermission("bidding:listOfWinningBids:list")
@GetMapping("/list")
public TableDataInfo<BusListOfWinningBidsVo> list(BusListOfWinningBidsBo bo, PageQuery pageQuery) {
return busListOfWinningBidsService.queryPageList(bo, pageQuery);
}
/**
* 导出中标项目一览列表
*/
@SaCheckPermission("bidding:listOfWinningBids:export")
@Log(title = "中标项目一览", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BusListOfWinningBidsBo bo, HttpServletResponse response) {
List<BusListOfWinningBidsVo> list = busListOfWinningBidsService.queryList(bo);
ExcelUtil.exportExcel(list, "中标项目一览", BusListOfWinningBidsVo.class, response);
}
/**
* 获取中标项目一览详细信息
*
* @param id 主键
*/
@SaCheckPermission("bidding:listOfWinningBids:query")
@GetMapping("/{id}")
public R<BusListOfWinningBidsVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(busListOfWinningBidsService.queryById(id));
}
/**
* 新增中标项目一览
*/
@SaCheckPermission("bidding:listOfWinningBids:add")
@Log(title = "中标项目一览", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusListOfWinningBidsBo bo) {
return toAjax(busListOfWinningBidsService.insertByBo(bo));
}
/**
* 修改中标项目一览
*/
@SaCheckPermission("bidding:listOfWinningBids:edit")
@Log(title = "中标项目一览", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusListOfWinningBidsBo bo) {
return toAjax(busListOfWinningBidsService.updateByBo(bo));
}
/**
* 删除中标项目一览
*
* @param ids 主键串
*/
@SaCheckPermission("bidding:listOfWinningBids:remove")
@Log(title = "中标项目一览", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(busListOfWinningBidsService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,91 @@
package org.dromara.bidding.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 成本-投标对象 bus_bidding_limit_list
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("bus_bidding_limit_list")
public class BusBiddingLimitList extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 项目Id
*/
private Long projectId;
/**
* 版本号
*/
private String versions;
/**
* 表名
*/
private String sheet;
/**
* 子ID
*/
private String sid;
/**
* 父ID
*/
private String pid;
/**
* 编号
*/
private String num;
/**
* 名称
*/
private String name;
/**
* 规格
*/
private String specification;
/**
* 单位
*/
private String unit;
/**
* 数量
*/
private Long quantity;
/**
* 单价
*/
private Long unitPrice;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,46 @@
package org.dromara.bidding.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 招投标人员对象 bus_bidding_user
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("bus_bidding_user")
public class BusBiddingUser extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 招投标人员id
*/
private Long userId;
/**
* 招投标人员姓名
*/
private String userName;
}

View File

@ -0,0 +1,123 @@
package org.dromara.bidding.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 中标项目一览对象 bus_list_of_winning_bids
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("bus_list_of_winning_bids")
public class BusListOfWinningBids extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 项目状态
*/
private String projectStatus;
/**
* 项目名称
*/
private String projectName;
/**
* 中标价(原币)
*/
private Long winningBidOriginal;
/**
* 汇率
*/
private Long exchangeRate;
/**
* 币种
*/
private String currency;
/**
* 所属主体
*/
private String subject;
/**
* 中标价
*/
private Long winningBid;
/**
* 中标日期
*/
private Date bidWinningDate;
/**
* 投标保证金
*/
private Long bidDeposit;
/**
* 是否退还
*/
private String whetherSendBack;
/**
* 建设单位(客户)
*/
private String construction;
/**
* 总造价
*/
private Long totalCost;
/**
* 立项申请人
*/
private String projectApplicant;
/**
* 立项部门
*/
private String projectApplicantDept;
/**
* 立项申请日期
*/
private Date projectApplicantTime;
/**
* 流程状态
*/
private String processStatus;
/**
* 项目编号
*/
private String projectNumbering;
}

View File

@ -0,0 +1,92 @@
package org.dromara.bidding.domain.bo;
import org.dromara.bidding.domain.BusBiddingLimitList;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 成本-投标业务对象 bus_bidding_limit_list
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BusBiddingLimitList.class, reverseConvertGenerate = false)
public class BusBiddingLimitListBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 项目Id
*/
@NotNull(message = "项目Id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 版本号
*/
@NotBlank(message = "版本号不能为空", groups = { AddGroup.class, EditGroup.class })
private String versions;
/**
* 表名
*/
private String sheet;
/**
* 子ID
*/
private String sid;
/**
* 父ID
*/
private String pid;
/**
* 编号
*/
private String num;
/**
* 名称
*/
private String name;
/**
* 规格
*/
private String specification;
/**
* 单位
*/
private String unit;
/**
* 数量
*/
private Long quantity;
/**
* 单价
*/
private Long unitPrice;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,48 @@
package org.dromara.bidding.domain.bo;
import org.dromara.bidding.domain.BusBiddingUser;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 招投标人员业务对象 bus_bidding_user
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BusBiddingUser.class, reverseConvertGenerate = false)
public class BusBiddingUserBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 招投标人员id
*/
@NotNull(message = "招投标人员id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 招投标人员姓名
*/
@NotBlank(message = "招投标人员姓名不能为空", groups = { AddGroup.class, EditGroup.class })
private String userName;
}

View File

@ -0,0 +1,123 @@
package org.dromara.bidding.domain.bo;
import org.dromara.bidding.domain.BusListOfWinningBids;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 中标项目一览业务对象 bus_list_of_winning_bids
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BusListOfWinningBids.class, reverseConvertGenerate = false)
public class BusListOfWinningBidsBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 项目状态
*/
private String projectStatus;
/**
* 项目名称
*/
private String projectName;
/**
* 中标价(原币)
*/
private Long winningBidOriginal;
/**
* 汇率
*/
private Long exchangeRate;
/**
* 币种
*/
private String currency;
/**
* 所属主体
*/
private String subject;
/**
* 中标价
*/
private Long winningBid;
/**
* 中标日期
*/
private Date bidWinningDate;
/**
* 投标保证金
*/
private Long bidDeposit;
/**
* 是否退还
*/
private String whetherSendBack;
/**
* 建设单位(客户)
*/
private String construction;
/**
* 总造价
*/
private Long totalCost;
/**
* 立项申请人
*/
private String projectApplicant;
/**
* 立项部门
*/
private String projectApplicantDept;
/**
* 立项申请日期
*/
private Date projectApplicantTime;
/**
* 流程状态
*/
private String processStatus;
/**
* 项目编号
*/
private String projectNumbering;
}

View File

@ -0,0 +1,110 @@
package org.dromara.bidding.domain.vo;
import org.dromara.bidding.domain.BusBiddingLimitList;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 成本-投标视图对象 bus_bidding_limit_list
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusBiddingLimitList.class)
public class BusBiddingLimitListVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 项目Id
*/
@ExcelProperty(value = "项目Id")
private Long projectId;
/**
* 版本号
*/
@ExcelProperty(value = "版本号")
private String versions;
/**
* 表名
*/
@ExcelProperty(value = "表名")
private String sheet;
/**
* 子ID
*/
@ExcelProperty(value = "子ID")
private String sid;
/**
* 父ID
*/
@ExcelProperty(value = "父ID")
private String pid;
/**
* 编号
*/
@ExcelProperty(value = "编号")
private String num;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String name;
/**
* 规格
*/
@ExcelProperty(value = "规格")
private String specification;
/**
* 单位
*/
@ExcelProperty(value = "单位")
private String unit;
/**
* 数量
*/
@ExcelProperty(value = "数量")
private Long quantity;
/**
* 单价
*/
@ExcelProperty(value = "单价")
private Long unitPrice;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,56 @@
package org.dromara.bidding.domain.vo;
import org.dromara.bidding.domain.BusBiddingUser;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 招投标人员视图对象 bus_bidding_user
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusBiddingUser.class)
public class BusBiddingUserVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 项目id
*/
@ExcelProperty(value = "项目id")
private Long projectId;
/**
* 招投标人员id
*/
@ExcelProperty(value = "招投标人员id")
private Long userId;
/**
* 招投标人员姓名
*/
@ExcelProperty(value = "招投标人员姓名")
private String userName;
}

View File

@ -0,0 +1,150 @@
package org.dromara.bidding.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.bidding.domain.BusListOfWinningBids;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 中标项目一览视图对象 bus_list_of_winning_bids
*
* @author Lion Li
* @date 2025-08-20
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusListOfWinningBids.class)
public class BusListOfWinningBidsVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 项目id
*/
@ExcelProperty(value = "项目id")
private Long projectId;
/**
* 项目状态
*/
@ExcelProperty(value = "项目状态")
private String projectStatus;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 中标价(原币)
*/
@ExcelProperty(value = "中标价", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "原=币")
private Long winningBidOriginal;
/**
* 汇率
*/
@ExcelProperty(value = "汇率")
private Long exchangeRate;
/**
* 币种
*/
@ExcelProperty(value = "币种")
private String currency;
/**
* 所属主体
*/
@ExcelProperty(value = "所属主体")
private String subject;
/**
* 中标价
*/
@ExcelProperty(value = "中标价")
private Long winningBid;
/**
* 中标日期
*/
@ExcelProperty(value = "中标日期")
private Date bidWinningDate;
/**
* 投标保证金
*/
@ExcelProperty(value = "投标保证金")
private Long bidDeposit;
/**
* 是否退还
*/
@ExcelProperty(value = "是否退还")
private String whetherSendBack;
/**
* 建设单位(客户)
*/
@ExcelProperty(value = "建设单位", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "客=户")
private String construction;
/**
* 总造价
*/
@ExcelProperty(value = "总造价")
private Long totalCost;
/**
* 立项申请人
*/
@ExcelProperty(value = "立项申请人")
private String projectApplicant;
/**
* 立项部门
*/
@ExcelProperty(value = "立项部门")
private String projectApplicantDept;
/**
* 立项申请日期
*/
@ExcelProperty(value = "立项申请日期")
private Date projectApplicantTime;
/**
* 流程状态
*/
@ExcelProperty(value = "流程状态")
private String processStatus;
/**
* 项目编号
*/
@ExcelProperty(value = "项目编号")
private String projectNumbering;
}

View File

@ -0,0 +1,15 @@
package org.dromara.bidding.mapper;
import org.dromara.bidding.domain.BusBiddingLimitList;
import org.dromara.bidding.domain.vo.BusBiddingLimitListVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 成本-投标Mapper接口
*
* @author Lion Li
* @date 2025-08-20
*/
public interface BusBiddingLimitListMapper extends BaseMapperPlus<BusBiddingLimitList, BusBiddingLimitListVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.bidding.mapper;
import org.dromara.bidding.domain.BusBiddingUser;
import org.dromara.bidding.domain.vo.BusBiddingUserVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 招投标人员Mapper接口
*
* @author Lion Li
* @date 2025-08-20
*/
public interface BusBiddingUserMapper extends BaseMapperPlus<BusBiddingUser, BusBiddingUserVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.bidding.mapper;
import org.dromara.bidding.domain.BusListOfWinningBids;
import org.dromara.bidding.domain.vo.BusListOfWinningBidsVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 中标项目一览Mapper接口
*
* @author Lion Li
* @date 2025-08-20
*/
public interface BusListOfWinningBidsMapper extends BaseMapperPlus<BusListOfWinningBids, BusListOfWinningBidsVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.bidding.service;
import org.dromara.bidding.domain.vo.BusBiddingLimitListVo;
import org.dromara.bidding.domain.bo.BusBiddingLimitListBo;
import org.dromara.bidding.domain.BusBiddingLimitList;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 成本-投标Service接口
*
* @author Lion Li
* @date 2025-08-20
*/
public interface IBusBiddingLimitListService extends IService<BusBiddingLimitList>{
/**
* 查询成本-投标
*
* @param id 主键
* @return 成本-投标
*/
BusBiddingLimitListVo queryById(Long id);
/**
* 分页查询成本-投标列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 成本-投标分页列表
*/
TableDataInfo<BusBiddingLimitListVo> queryPageList(BusBiddingLimitListBo bo, PageQuery pageQuery);
/**
* 查询符合条件的成本-投标列表
*
* @param bo 查询条件
* @return 成本-投标列表
*/
List<BusBiddingLimitListVo> queryList(BusBiddingLimitListBo bo);
/**
* 新增成本-投标
*
* @param bo 成本-投标
* @return 是否新增成功
*/
Boolean insertByBo(BusBiddingLimitListBo bo);
/**
* 修改成本-投标
*
* @param bo 成本-投标
* @return 是否修改成功
*/
Boolean updateByBo(BusBiddingLimitListBo bo);
/**
* 校验并批量删除成本-投标信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.bidding.service;
import org.dromara.bidding.domain.vo.BusBiddingUserVo;
import org.dromara.bidding.domain.bo.BusBiddingUserBo;
import org.dromara.bidding.domain.BusBiddingUser;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 招投标人员Service接口
*
* @author Lion Li
* @date 2025-08-20
*/
public interface IBusBiddingUserService extends IService<BusBiddingUser>{
/**
* 查询招投标人员
*
* @param id 主键
* @return 招投标人员
*/
BusBiddingUserVo queryById(Long id);
/**
* 分页查询招投标人员列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 招投标人员分页列表
*/
TableDataInfo<BusBiddingUserVo> queryPageList(BusBiddingUserBo bo, PageQuery pageQuery);
/**
* 查询符合条件的招投标人员列表
*
* @param bo 查询条件
* @return 招投标人员列表
*/
List<BusBiddingUserVo> queryList(BusBiddingUserBo bo);
/**
* 新增招投标人员
*
* @param bo 招投标人员
* @return 是否新增成功
*/
Boolean insertByBo(BusBiddingUserBo bo);
/**
* 修改招投标人员
*
* @param bo 招投标人员
* @return 是否修改成功
*/
Boolean updateByBo(BusBiddingUserBo bo);
/**
* 校验并批量删除招投标人员信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.bidding.service;
import org.dromara.bidding.domain.vo.BusListOfWinningBidsVo;
import org.dromara.bidding.domain.bo.BusListOfWinningBidsBo;
import org.dromara.bidding.domain.BusListOfWinningBids;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 中标项目一览Service接口
*
* @author Lion Li
* @date 2025-08-20
*/
public interface IBusListOfWinningBidsService extends IService<BusListOfWinningBids>{
/**
* 查询中标项目一览
*
* @param id 主键
* @return 中标项目一览
*/
BusListOfWinningBidsVo queryById(Long id);
/**
* 分页查询中标项目一览列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 中标项目一览分页列表
*/
TableDataInfo<BusListOfWinningBidsVo> queryPageList(BusListOfWinningBidsBo bo, PageQuery pageQuery);
/**
* 查询符合条件的中标项目一览列表
*
* @param bo 查询条件
* @return 中标项目一览列表
*/
List<BusListOfWinningBidsVo> queryList(BusListOfWinningBidsBo bo);
/**
* 新增中标项目一览
*
* @param bo 中标项目一览
* @return 是否新增成功
*/
Boolean insertByBo(BusListOfWinningBidsBo bo);
/**
* 修改中标项目一览
*
* @param bo 中标项目一览
* @return 是否修改成功
*/
Boolean updateByBo(BusListOfWinningBidsBo bo);
/**
* 校验并批量删除中标项目一览信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,141 @@
package org.dromara.bidding.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.bidding.domain.bo.BusBiddingLimitListBo;
import org.dromara.bidding.domain.vo.BusBiddingLimitListVo;
import org.dromara.bidding.domain.BusBiddingLimitList;
import org.dromara.bidding.mapper.BusBiddingLimitListMapper;
import org.dromara.bidding.service.IBusBiddingLimitListService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 成本-投标Service业务层处理
*
* @author Lion Li
* @date 2025-08-20
*/
@RequiredArgsConstructor
@Service
public class BusBiddingLimitListServiceImpl extends ServiceImpl<BusBiddingLimitListMapper, BusBiddingLimitList> implements IBusBiddingLimitListService {
private final BusBiddingLimitListMapper baseMapper;
/**
* 查询成本-投标
*
* @param id 主键
* @return 成本-投标
*/
@Override
public BusBiddingLimitListVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询成本-投标列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 成本-投标分页列表
*/
@Override
public TableDataInfo<BusBiddingLimitListVo> queryPageList(BusBiddingLimitListBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<BusBiddingLimitList> lqw = buildQueryWrapper(bo);
Page<BusBiddingLimitListVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的成本-投标列表
*
* @param bo 查询条件
* @return 成本-投标列表
*/
@Override
public List<BusBiddingLimitListVo> queryList(BusBiddingLimitListBo bo) {
LambdaQueryWrapper<BusBiddingLimitList> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<BusBiddingLimitList> buildQueryWrapper(BusBiddingLimitListBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BusBiddingLimitList> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(BusBiddingLimitList::getId);
lqw.eq(bo.getProjectId() != null, BusBiddingLimitList::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getVersions()), BusBiddingLimitList::getVersions, bo.getVersions());
lqw.eq(StringUtils.isNotBlank(bo.getSheet()), BusBiddingLimitList::getSheet, bo.getSheet());
lqw.eq(StringUtils.isNotBlank(bo.getSid()), BusBiddingLimitList::getSid, bo.getSid());
lqw.eq(StringUtils.isNotBlank(bo.getPid()), BusBiddingLimitList::getPid, bo.getPid());
lqw.eq(StringUtils.isNotBlank(bo.getNum()), BusBiddingLimitList::getNum, bo.getNum());
lqw.like(StringUtils.isNotBlank(bo.getName()), BusBiddingLimitList::getName, bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getSpecification()), BusBiddingLimitList::getSpecification, bo.getSpecification());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), BusBiddingLimitList::getUnit, bo.getUnit());
lqw.eq(bo.getQuantity() != null, BusBiddingLimitList::getQuantity, bo.getQuantity());
lqw.eq(bo.getUnitPrice() != null, BusBiddingLimitList::getUnitPrice, bo.getUnitPrice());
return lqw;
}
/**
* 新增成本-投标
*
* @param bo 成本-投标
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(BusBiddingLimitListBo bo) {
BusBiddingLimitList add = MapstructUtils.convert(bo, BusBiddingLimitList.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改成本-投标
*
* @param bo 成本-投标
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusBiddingLimitListBo bo) {
BusBiddingLimitList update = MapstructUtils.convert(bo, BusBiddingLimitList.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusBiddingLimitList entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除成本-投标信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,133 @@
package org.dromara.bidding.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.bidding.domain.bo.BusBiddingUserBo;
import org.dromara.bidding.domain.vo.BusBiddingUserVo;
import org.dromara.bidding.domain.BusBiddingUser;
import org.dromara.bidding.mapper.BusBiddingUserMapper;
import org.dromara.bidding.service.IBusBiddingUserService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 招投标人员Service业务层处理
*
* @author Lion Li
* @date 2025-08-20
*/
@RequiredArgsConstructor
@Service
public class BusBiddingUserServiceImpl extends ServiceImpl<BusBiddingUserMapper, BusBiddingUser> implements IBusBiddingUserService {
private final BusBiddingUserMapper baseMapper;
/**
* 查询招投标人员
*
* @param id 主键
* @return 招投标人员
*/
@Override
public BusBiddingUserVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询招投标人员列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 招投标人员分页列表
*/
@Override
public TableDataInfo<BusBiddingUserVo> queryPageList(BusBiddingUserBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<BusBiddingUser> lqw = buildQueryWrapper(bo);
Page<BusBiddingUserVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的招投标人员列表
*
* @param bo 查询条件
* @return 招投标人员列表
*/
@Override
public List<BusBiddingUserVo> queryList(BusBiddingUserBo bo) {
LambdaQueryWrapper<BusBiddingUser> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<BusBiddingUser> buildQueryWrapper(BusBiddingUserBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BusBiddingUser> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(BusBiddingUser::getId);
lqw.eq(bo.getProjectId() != null, BusBiddingUser::getProjectId, bo.getProjectId());
lqw.eq(bo.getUserId() != null, BusBiddingUser::getUserId, bo.getUserId());
lqw.like(StringUtils.isNotBlank(bo.getUserName()), BusBiddingUser::getUserName, bo.getUserName());
return lqw;
}
/**
* 新增招投标人员
*
* @param bo 招投标人员
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(BusBiddingUserBo bo) {
BusBiddingUser add = MapstructUtils.convert(bo, BusBiddingUser.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改招投标人员
*
* @param bo 招投标人员
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusBiddingUserBo bo) {
BusBiddingUser update = MapstructUtils.convert(bo, BusBiddingUser.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusBiddingUser entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除招投标人员信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,148 @@
package org.dromara.bidding.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.bidding.domain.bo.BusListOfWinningBidsBo;
import org.dromara.bidding.domain.vo.BusListOfWinningBidsVo;
import org.dromara.bidding.domain.BusListOfWinningBids;
import org.dromara.bidding.mapper.BusListOfWinningBidsMapper;
import org.dromara.bidding.service.IBusListOfWinningBidsService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 中标项目一览Service业务层处理
*
* @author Lion Li
* @date 2025-08-20
*/
@RequiredArgsConstructor
@Service
public class BusListOfWinningBidsServiceImpl extends ServiceImpl<BusListOfWinningBidsMapper, BusListOfWinningBids> implements IBusListOfWinningBidsService {
private final BusListOfWinningBidsMapper baseMapper;
/**
* 查询中标项目一览
*
* @param id 主键
* @return 中标项目一览
*/
@Override
public BusListOfWinningBidsVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询中标项目一览列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 中标项目一览分页列表
*/
@Override
public TableDataInfo<BusListOfWinningBidsVo> queryPageList(BusListOfWinningBidsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<BusListOfWinningBids> lqw = buildQueryWrapper(bo);
Page<BusListOfWinningBidsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的中标项目一览列表
*
* @param bo 查询条件
* @return 中标项目一览列表
*/
@Override
public List<BusListOfWinningBidsVo> queryList(BusListOfWinningBidsBo bo) {
LambdaQueryWrapper<BusListOfWinningBids> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<BusListOfWinningBids> buildQueryWrapper(BusListOfWinningBidsBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BusListOfWinningBids> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(BusListOfWinningBids::getId);
lqw.eq(bo.getProjectId() != null, BusListOfWinningBids::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getProjectStatus()), BusListOfWinningBids::getProjectStatus, bo.getProjectStatus());
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), BusListOfWinningBids::getProjectName, bo.getProjectName());
lqw.eq(bo.getWinningBidOriginal() != null, BusListOfWinningBids::getWinningBidOriginal, bo.getWinningBidOriginal());
lqw.eq(bo.getExchangeRate() != null, BusListOfWinningBids::getExchangeRate, bo.getExchangeRate());
lqw.eq(StringUtils.isNotBlank(bo.getCurrency()), BusListOfWinningBids::getCurrency, bo.getCurrency());
lqw.eq(StringUtils.isNotBlank(bo.getSubject()), BusListOfWinningBids::getSubject, bo.getSubject());
lqw.eq(bo.getWinningBid() != null, BusListOfWinningBids::getWinningBid, bo.getWinningBid());
lqw.eq(bo.getBidWinningDate() != null, BusListOfWinningBids::getBidWinningDate, bo.getBidWinningDate());
lqw.eq(bo.getBidDeposit() != null, BusListOfWinningBids::getBidDeposit, bo.getBidDeposit());
lqw.eq(StringUtils.isNotBlank(bo.getWhetherSendBack()), BusListOfWinningBids::getWhetherSendBack, bo.getWhetherSendBack());
lqw.eq(StringUtils.isNotBlank(bo.getConstruction()), BusListOfWinningBids::getConstruction, bo.getConstruction());
lqw.eq(bo.getTotalCost() != null, BusListOfWinningBids::getTotalCost, bo.getTotalCost());
lqw.eq(StringUtils.isNotBlank(bo.getProjectApplicant()), BusListOfWinningBids::getProjectApplicant, bo.getProjectApplicant());
lqw.eq(StringUtils.isNotBlank(bo.getProjectApplicantDept()), BusListOfWinningBids::getProjectApplicantDept, bo.getProjectApplicantDept());
lqw.eq(bo.getProjectApplicantTime() != null, BusListOfWinningBids::getProjectApplicantTime, bo.getProjectApplicantTime());
lqw.eq(StringUtils.isNotBlank(bo.getProcessStatus()), BusListOfWinningBids::getProcessStatus, bo.getProcessStatus());
lqw.eq(StringUtils.isNotBlank(bo.getProjectNumbering()), BusListOfWinningBids::getProjectNumbering, bo.getProjectNumbering());
return lqw;
}
/**
* 新增中标项目一览
*
* @param bo 中标项目一览
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(BusListOfWinningBidsBo bo) {
BusListOfWinningBids add = MapstructUtils.convert(bo, BusListOfWinningBids.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改中标项目一览
*
* @param bo 中标项目一览
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusListOfWinningBidsBo bo) {
BusListOfWinningBids update = MapstructUtils.convert(bo, BusListOfWinningBids.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusListOfWinningBids entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除中标项目一览信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.design.domain.bo.ImportExcelFileReq;
import org.dromara.design.domain.bo.ObtainAllVersionNumbersReq;
import org.dromara.design.domain.bo.SheetListReq;
import org.dromara.design.domain.vo.BusBillofquantitiesVersionsVo;
@ -24,6 +25,7 @@ import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo;
import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo;
import org.dromara.tender.service.IBusBillofquantitiesLimitListService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* 限价一览
@ -85,6 +87,17 @@ public class BusBillofquantitiesLimitListController extends BaseController {
ExcelUtil.exportExcel(list, "限价一览", BusBillofquantitiesLimitListVo.class, response);
}
/**
* 导入excel
*/
@SaCheckPermission("design:billofquantitiesLimitList:importExcelFile")
@Log(title = "导入excel", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/importExcelFile")
public R<Void> importExcelFile(Long projectId, @RequestParam("file") MultipartFile file) throws Exception {
return toAjax(busBillofquantitiesLimitListService.importExcelFile(projectId, file));
}
/**
* 获取限价一览详细信息
*

View File

@ -46,8 +46,8 @@ public class BusSegmentedIndicatorPlanningController extends BaseController {
if (bo.getProjectId() == null) {
throw new ServiceException("项目id不能为空");
}
if (bo.getDictId() == null) {
throw new ServiceException("分包类型id不能为空");
if (bo.getDictName() == null) {
throw new ServiceException("分包类型不能为空");
}
return busSegmentedIndicatorPlanningService.queryPageList(bo, pageQuery);
}

View File

@ -36,10 +36,6 @@ public class BusSegmentedIndicatorPlanning extends BaseEntity {
*/
private Long projectId;
/**
* 分包类型id
*/
private Long dictId;
/**
* 分包类型名称

View File

@ -39,15 +39,12 @@ public class BusSegmentedIndicatorPlanningBo extends BaseEntity {
@NotNull(message = "项目Id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 分包类型id
*/
@NotNull(message = "分包类型id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long dictId;
/**
* 分包类型名称
*/
@NotBlank(message = "分包类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String dictName;
/**

View File

@ -44,11 +44,6 @@ public class BusSegmentedIndicatorPlanningVo implements Serializable {
@ExcelProperty(value = "项目Id")
private Long projectId;
/**
* 分包类型id
*/
@ExcelProperty(value = "分包类型id")
private Long dictId;
/**
* 分包类型名称

View File

@ -8,6 +8,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
import java.util.List;
@ -84,4 +86,12 @@ public interface IBusBillofquantitiesLimitListService extends IService<BusBillof
* 获取指定版本的sheet
*/
List<String> sheetList(BusBillofquantitiesLimitListBo bo);
/**
* 导入excel
* @param id
* @param file
* @return
*/
Boolean importExcelFile(Long id, MultipartFile file) throws Exception;
}

View File

@ -1,21 +1,26 @@
package org.dromara.tender.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.excel.coryUtils.ExcelReader;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.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 lombok.RequiredArgsConstructor;
import org.dromara.common.utils.excel.ExcelDynamicReader;
import org.dromara.design.domain.BusBillofquantities;
import org.dromara.design.domain.dto.MaterialsAndEquipmentExcelDto;
import org.springframework.stereotype.Service;
import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo;
import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo;
import org.dromara.tender.domain.BusBillofquantitiesLimitList;
import org.dromara.tender.mapper.BusBillofquantitiesLimitListMapper;
import org.dromara.tender.service.IBusBillofquantitiesLimitListService;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.math.RoundingMode;
@ -150,6 +155,7 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
//获取所有数据
List<BusBillofquantitiesLimitListVo> listVoList = queryList(bo);
listVoList.stream().filter(vo -> vo.getUnitPrice() !=null && vo.getUnitPrice().compareTo(BigDecimal.ZERO) != 0)
.filter(vo ->vo.getQuantity() !=null && vo.getQuantity().compareTo(BigDecimal.ZERO) != 0)
.forEach(item -> {
item.setPrice(item.getUnitPrice().multiply(item.getQuantity()).setScale(2, RoundingMode.HALF_UP));
});
@ -190,6 +196,47 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
.collect(Collectors.toList());
}
@Override
public Boolean importExcelFile(Long id, MultipartFile file) throws Exception{
// 跳过1行表头读取0到6列共7列映射到ExcelData实体类
List<BusBillofquantitiesLimitListBo> dataList = ExcelDynamicReader.readExcel(
file, // 上传的文件
1, // 跳过1行表头
0, // 从第0列开始
12, // 到第5列结束
BusBillofquantitiesLimitListBo.class // 目标实体类
);
List<BusBillofquantitiesLimitList> busBillofquantities = new ArrayList<BusBillofquantitiesLimitList>();
dataList.stream()
.filter(Objects::nonNull) // 过滤掉 null 对象
.filter(data-> data.getUnitPrice() !=null && data.getUnitPrice().compareTo(BigDecimal.ZERO) != 0)
.filter(data ->data.getQuantity() !=null && data.getQuantity().compareTo(BigDecimal.ZERO) != 0)
.forEach(item -> {
BusBillofquantitiesLimitList limitList = new BusBillofquantitiesLimitList();
limitList.setId(item.getId());
limitList.setProjectId(item.getProjectId());
limitList.setUnitPrice(item.getUnitPrice());
busBillofquantities.add(limitList);
});
// //1、获取到解析数据
// ExcelReader.ExcelData excelData = ExcelReader.readExcelFromMultipartFile(file);
// // 2. 解析所有工作表转换为带父子关系的ExcelMaterial列表 解析所有Sheet数据按规则生成sid和pid
// List<BusBillofquantitiesLimitList> allMaterials = new ArrayList<>();
// for (ExcelReader.SheetData sheetData : excelData.getSheetDataList()) {
//// String sheetName = sheetData.getSheetName();
// List<List<String>> rowDataList = sheetData.getData();
//
// //获取字段为id和单价
// List<BusBillofquantitiesLimitList> limitListArrayList = new ArrayList<>();
//
// }
return baseMapper.updateBatchById(busBillofquantities);
}
/**
* 递归构建树形结构
* @param parentId 父节点ID顶级节点为0

View File

@ -90,7 +90,7 @@ public class BusSegmentedIndicatorPlanningServiceImpl extends ServiceImpl<BusSeg
LambdaQueryWrapper<BusSegmentedIndicatorPlanning> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(BusSegmentedIndicatorPlanning::getPlannedBiddingTime);
lqw.eq(bo.getProjectId() != null, BusSegmentedIndicatorPlanning::getProjectId, bo.getProjectId());
lqw.eq(bo.getDictId() != null, BusSegmentedIndicatorPlanning::getDictId, bo.getDictId());
lqw.eq(StringUtils.isNotBlank(bo.getDictName()), BusSegmentedIndicatorPlanning::getDictName, bo.getDictName());
lqw.like(StringUtils.isNotBlank(bo.getName()), BusSegmentedIndicatorPlanning::getName, bo.getName());
lqw.like(StringUtils.isNotBlank(bo.getContent()), BusSegmentedIndicatorPlanning::getContent, bo.getContent());
lqw.eq(bo.getPlannedBiddingTime() != null, BusSegmentedIndicatorPlanning::getPlannedBiddingTime, bo.getPlannedBiddingTime());

View File

@ -0,0 +1,7 @@
<?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="org.dromara.bidding.mapper.BusBiddingLimitListMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?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="org.dromara.bidding.mapper.BusBiddingUserMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?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="org.dromara.bidding.mapper.BusListOfWinningBidsMapper">
</mapper>