Merge branch 'master-联动报价'

This commit is contained in:
yss
2024-08-09 20:29:13 +08:00
20 changed files with 577 additions and 32 deletions

View File

@ -26,6 +26,7 @@ public interface MallPurpApi {
* @return 返回结果
*/
@PostMapping("/api/mall-purp/v1/purpImplement/projInvitationFail")
@OperationLogDetail(businessModule = EbtpLogBusinessModule.OTHER,operationType = EbtpLogType.UPDATE,detail = "方案招标失败接口")
BaseResponse projInvitationFail(@RequestBody ProjInvitationFailRequest failRequest);
@ -35,7 +36,7 @@ public interface MallPurpApi {
* @return 返回结果
*/
@PostMapping("/api/mall-purp/v1/purpBaseInfo/findDataByPurpImplmentId")
@OperationLogDetail(businessModule = EbtpLogBusinessModule.PROJECT_ENTRUST_INIT,operationType = EbtpLogType.INSERT,detail = "委托项目信息出始化-委托信息")
@OperationLogDetail(businessModule = EbtpLogBusinessModule.PROJECT_ENTRUST_INIT,operationType = EbtpLogType.SELECT,detail = "委托项目信息出始化-委托信息")
BaseResponse<PurpImplementSendVO> findDataByPurpImplmentId(@RequestParam("purpImplmentId") Long purpImplmentId);

View File

@ -0,0 +1,48 @@
package com.chinaunicom.mall.ebtp.project.modelmaterial.controller;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.ProjStructureQuoteModelVO;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.chinaunicom.mall.ebtp.project.modelmaterial.entity.QuoteModelMaterial;
import com.chinaunicom.mall.ebtp.project.modelmaterial.service.IQuoteModelMaterialService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
@RestController
@Api(tags = "")
@RequestMapping("/v1/quotemodelmaterial")
public class QuoteModelMaterialController{
@Resource
private IQuoteModelMaterialService iquoteModelMaterialService;
/**
* 查询数据
*
* @param id 目前主键同包id
*
* @return
*/
@ApiOperation("查询数据")
@PostMapping("/findQuoteModelMaterial/{id}")
public BaseResponse<List<ProjStructureQuoteModelVO>> findQuoteModelMaterial(@PathVariable String id){
QuoteModelMaterial quoteModelMaterial = iquoteModelMaterialService.getById(id);
if(quoteModelMaterial!=null){
return BaseResponse.success(quoteModelMaterial.getModelMaterial());
}
return BaseResponse.success(null);
}
}

View File

@ -0,0 +1,15 @@
package com.chinaunicom.mall.ebtp.project.modelmaterial.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import com.chinaunicom.mall.ebtp.project.modelmaterial.entity.QuoteModelMaterial;
/**
* @auto.generated
*/
@Repository
public interface QuoteModelMaterialMapper extends BaseMapper<QuoteModelMaterial> {
}

View File

@ -0,0 +1,35 @@
<?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.chinaunicom.mall.ebtp.project.modelmaterial.dao.QuoteModelMaterialMapper">
<resultMap id="BaseResultMap"
type="com.chinaunicom.mall.ebtp.project.modelmaterial.entity.QuoteModelMaterial">
<result column="id" jdbcType="VARCHAR" property="id"/>
<result column="project_id" jdbcType="VARCHAR" property="projectId"/>
<result column="section_id" jdbcType="VARCHAR" property="sectionId"/>
<result column="model_material" property="modelMaterial" typeHandler="com.chinaunicom.mall.ebtp.common.config.CustomJacksonTypeHandler"/>
<result column="project_plan_id" jdbcType="VARCHAR" property="projectPlanId"/>
<result column="create_by" jdbcType="VARCHAR" property="createBy"/>
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/>
<result column="update_by" jdbcType="VARCHAR" property="updateBy"/>
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/>
</resultMap>
<sql id="Base_Column_List">
a.id id,
a.project_id projectId,
a.section_id sectionId,
a.model_material modelMaterial,
a.project_plan_id projectPlanId,
a.create_by createBy,
a.create_date createDate,
a.update_by updateBy,
a.update_date updateDate,
</sql>
<!--逻辑删除方法 此方法为代码生成器生成 不允许修改 如有特殊需求 请自行新建SQL语句-->
<update id="deleteOff" parameterType="java.lang.Long">
update biz_proj_quote_model_material
set
delete_flag="deleted"
where ID=#{id,jdbcType=BIGINT}
</update>
</mapper>

View File

@ -0,0 +1,64 @@
package com.chinaunicom.mall.ebtp.project.modelmaterial.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chinaunicom.mall.ebtp.common.config.CustomJacksonTypeHandler;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.ProjStructureQuoteModelVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.List;
import com.chinaunicom.mall.ebtp.common.config.CustomLocalDateTimeTypeHandler;
/**
* 实体类 QuoteModelMaterial
*
* @auto.generated
*/
@Data
@Accessors(chain = true)
@ApiModel
@EqualsAndHashCode(callSuper = false)
@TableName(value = "biz_proj_quote_model_material", autoResultMap = true)
public class QuoteModelMaterial implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ApiModelProperty(value = "主键")
private String id;
/**
* 项目ID
*/
@ApiModelProperty(value = "项目ID")
private String projectId;
/**
* 分包标段id
*/
@ApiModelProperty(value = "分包标段id")
private String sectionId;
/**
* 模型及模型物资
*/
@ApiModelProperty("方案报价模型关联关系")
@TableField(typeHandler = CustomJacksonTypeHandler.class)
private List<ProjStructureQuoteModelVO> modelMaterial;
/**
* 方案ID采购平台推送数据
*/
@ApiModelProperty(value = "方案ID采购平台推送数据")
private String projectPlanId;
}

View File

@ -0,0 +1,16 @@
package com.chinaunicom.mall.ebtp.project.modelmaterial.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chinaunicom.mall.ebtp.project.modelmaterial.entity.QuoteModelMaterial;
/**
* 对数据表 biz_proj_quote_model_material 操作的 service
* @author Auto create
*
*/
public interface IQuoteModelMaterialService extends IService<QuoteModelMaterial>{
}

View File

@ -0,0 +1,17 @@
package com.chinaunicom.mall.ebtp.project.modelmaterial.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chinaunicom.mall.ebtp.project.modelmaterial.dao.QuoteModelMaterialMapper;
import com.chinaunicom.mall.ebtp.project.modelmaterial.entity.QuoteModelMaterial;
import com.chinaunicom.mall.ebtp.project.modelmaterial.service.IQuoteModelMaterialService;
import org.springframework.stereotype.Service;
/**
* 对数据表 biz_proj_quote_model_material 操作的 serviceImpl
* @auto.generated
*
*/
@Service
public class QuoteModelMaterialServiceImpl extends ServiceImpl<QuoteModelMaterialMapper,QuoteModelMaterial> implements IQuoteModelMaterialService {
}

View File

@ -368,10 +368,10 @@ public class ProjBaseInfoVO{
@ApiModelProperty(value = "是否启用结构化报价 0否1是")
private String isStructureQuote;
@ApiModelProperty(value = "结构化报价模型 001普通报价模型")
@ApiModelProperty(value = "结构化报价模型 001普通报价模型002联动报价模型003定额折扣报价模型;004非定额折扣报价模型 ")
private String structureQuoteModel;
@ApiModelProperty(value = "结构化报价限价类型 001总价限制002单价+总价限制")
@ApiModelProperty(value = "结构化报价限价类型 001总价限制002单价+总价限制003总价+基准单价限制")
private String structureQuoteLimitType;
@ApiModelProperty(value = "中标/中选人数量是否明确 0否1是")
@ -389,9 +389,15 @@ public class ProjBaseInfoVO{
@ApiModelProperty("资格条件项列表")
private List<BizQualifyConditionItem> templateItemList;
@ApiModelProperty("方案报价模型关联关系")
private List<ProjStructureQuoteModelVO> quoteModelVOList;
@ApiModelProperty(value = "中标/中选数量-from")
private String winFrom;
@ApiModelProperty(value = "中标/中选数量-to")
private String winTo;
@ApiModelProperty(value = "基准价单价限制")
private BigDecimal basePriceUnitLimit;
}

View File

@ -0,0 +1,107 @@
package com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* @description: caiqq
* @author: caiqq
* @create: 2024-05-10 10:45
**/
@Getter
@Setter
@Accessors(chain = true)
@ApiModel(value = "ProjQuoteModelMaterialRelVO对象", description = "报价模型物料关联表")
public class ProjQuoteModelMaterialRelVO {
@ApiModelProperty("id")
private String id;
@ApiModelProperty("方案id")
private String projId;
@ApiModelProperty("报价模型id")
private String quoteModelId;
@ApiModelProperty("建项物料行id")
private String purpMaterialId;
@ApiModelProperty(value = "需求单id")
private String requId;
@ApiModelProperty(value = "需求单物料行id")
private String materialId;
@ApiModelProperty(value = "建项物料是否已删除0否1是")
private String purpMaterialIsDeleted;
@ApiModelProperty(value = "统一目录名称")
private String unifDirecName;
@ApiModelProperty(value = "统一目录编码")
private String unifDirecCode;
@ApiModelProperty(value = "物料编码")
private String materialCode;
@ApiModelProperty(value = "物资说明")
private String materialDesc;
@ApiModelProperty(value = "规格型号")
private String specModel;
@ApiModelProperty(value = "需求数量")
private BigDecimal inRequNum;
@ApiModelProperty(value = "计量单位")
private String unit;
@ApiModelProperty(value = "单项不含税最高限价")
private BigDecimal singlePriceCeiling;
@ApiModelProperty(value = "基准价单价限制")
private BigDecimal basePriceUnitLimit;
@ApiModelProperty(value = "单位联动系数类型001固定联动002区间联动")
private String linkageCoefficientType;
@ApiModelProperty(value = "单位联动系数")
private String linkageCoefficient;
@ApiModelProperty(value = "折扣系数最高限制")
private BigDecimal maxDiscountFactorLimit;
@ApiModelProperty(value = "是否基准价项1是0否")
private String basePriceItemFlag;
@ApiModelProperty(value = "税率")
private BigDecimal taxRate;
@ApiModelProperty(value = "权重")
private BigDecimal featureWeight;
@ApiModelProperty("切割状态 0:切割数据 1新数据")
private Integer cutoverStatus;
@ApiModelProperty("租户名称")
private String tenantName;
@ApiModelProperty("备用字段1")
private String attribute1;
@ApiModelProperty("备用字段2")
private String attribute2;
@ApiModelProperty("备用字段3")
private String attribute3;
@ApiModelProperty("备用字段4")
private String attribute4;
@ApiModelProperty("备用字段5")
private String attribute5;
}

View File

@ -0,0 +1,68 @@
package com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @description: caiqq
* @author: caiqq
* @create: 2024-05-10 10:42
**/
@Getter
@Setter
@Accessors(chain = true)
@ApiModel(value = "ProjStructureQuoteModelVO", description = "方案报价模型关联表")
public class ProjStructureQuoteModelVO {
@ApiModelProperty("id")
private String id;
@ApiModelProperty("方案id")
private String projId;
@ApiModelProperty("报价模型 001普通报价模型;002联动报价模型;003定额折扣报价模型;004非定额折扣报价模型")
private String structureQuoteModel;
@ApiModelProperty("模型名称")
private String structureQuoteModelName;
@ApiModelProperty("税率是否可偏离项:1是0否")
private String taxDeviationFlag;
@ApiModelProperty("规格型号是否可偏离项:1是0否")
private String specModelFlexibilityFlag;
@ApiModelProperty("报价小数位数限制")
private Integer decimalScaleLimit;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("切割状态 0:切割数据 1新数据")
private Integer cutoverStatus;
@ApiModelProperty("租户名称")
private String tenantName;
@ApiModelProperty("备用字段1")
private String attribute1;
@ApiModelProperty("备用字段2")
private String attribute2;
@ApiModelProperty("备用字段3")
private String attribute3;
@ApiModelProperty("备用字段4")
private String attribute4;
@ApiModelProperty("备用字段5")
private String attribute5;
@ApiModelProperty("报价模型物料关联关系")
private List<ProjQuoteModelMaterialRelVO> modelMaterialRelVOList;
}

View File

@ -5,6 +5,9 @@ package com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -20,13 +23,13 @@ import java.time.LocalDateTime;
* </p>
*
* @author liuyx
* @version V1.0
* @date 2020-10-06
* @version V1.0
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "PurpMaterial对象", description = "项目物料表")
public class PurpMaterialVO {
@ApiModel(value="PurpMaterial对象", description="项目物料表")
public class PurpMaterialVO {
@ApiModelProperty(value = "采购处置内容主键")
@ -51,16 +54,19 @@ public class PurpMaterialVO {
@ApiModelProperty(value = "需求单名称")
private String requName;
@ApiModelProperty(value = "需求单是否启用结构化报价 0否1是")
private String isStructureQuote;
@ApiModelProperty(value = "需求部门编号")
private String deptCode;
@ApiModelProperty(value = "需求部门名称")
private String deptName;
@ApiModelProperty(value = "pms项目编号")
@ApiModelProperty(value = "PMS项目编号")
private String pmsProjNo;
@ApiModelProperty(value = "pms项目名称")
@ApiModelProperty(value = "PMS项目名称")
private String pmsProjName;
@ApiModelProperty(value = "批复文号")
@ -72,13 +78,13 @@ public class PurpMaterialVO {
@ApiModelProperty(value = "库存地址")
private String reservePlace;
@ApiModelProperty(value = "编码")
@ApiModelProperty(value = "编码")
private String materialCode;
@ApiModelProperty(value = "物料行id")
private String materialId;
@ApiModelProperty(value = "说明")
@ApiModelProperty(value = "说明")
private String materialDesc;
@ApiModelProperty(value = "物料厂家")
@ -120,12 +126,15 @@ public class PurpMaterialVO {
@ApiModelProperty(value = "需求数量")
private BigDecimal requNum;
@ApiModelProperty(value = "单位")
@ApiModelProperty(value = "计量单位")
private String unit;
@ApiModelProperty(value = "单价")
@ApiModelProperty(value = "不含税单价")
private BigDecimal unitAmt;
@ApiModelProperty(value = "含税单价")
private BigDecimal unitPerAmt;
@ApiModelProperty(value = "采购预算(不含税)")
private BigDecimal budgetAmt;
@ -156,12 +165,33 @@ public class PurpMaterialVO {
@ApiModelProperty(value = "单项不含税最高限价")
private BigDecimal singlePriceCeiling;
@ApiModelProperty(value = "基准价单价限制")
private BigDecimal basePriceUnitLimit;
@ApiModelProperty(value = "单位联动系数类型001固定联动002区间联动")
private String linkageCoefficientType;
@ApiModelProperty(value = "单位联动系数")
private String linkageCoefficient;
@ApiModelProperty(value = "折扣系数最高限制")
private BigDecimal maxDiscountFactorLimit;
@ApiModelProperty(value = "是否基准价项1是0否")
private String basePriceItemFlag;
@ApiModelProperty(value = "税率")
private BigDecimal taxRate;
@ApiModelProperty(value = "权重")
private BigDecimal featureWeight;
@ApiModelProperty(value = "采购方式")
private String purcMode;
@ApiModelProperty(value = "最后更新时间戳")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime lastUpdateTime;
@ApiModelProperty(value = "备用字段1")
@ -201,16 +231,16 @@ public class PurpMaterialVO {
@ApiModelProperty(value = "剩余数量")
private BigDecimal unDealNum;
@ApiModelProperty(value = "剩余金额")
@ApiModelProperty(value = "剩余预算金额(不含税)元")
private BigDecimal unBudgetAmt;
@ApiModelProperty(value = "引用金额")
@ApiModelProperty(value = "引用预算金额(不含税)元")
private BigDecimal inBudgetAmt;
@ApiModelProperty(value = "剩余预计预算金额(含税)元")
private BigDecimal supplyBudgetAmt;
@ApiModelProperty(value = "引用预计预算金额(含税)")
@ApiModelProperty(value = "引用预算金额(含税")
private BigDecimal inBudgetAmtTax;
@ApiModelProperty(value = "库存名称")
@ -234,12 +264,27 @@ public class PurpMaterialVO {
@ApiModelProperty(value = "冻结数量")
private BigDecimal frozenNum;
@ApiModelProperty(value = "库存产品id")
private String stockProductsId;
@ApiModelProperty(value = "处置价格")
private BigDecimal decimalPrice;
@ApiModelProperty(value = "处置单价")
private BigDecimal decimalUnitPrice;
@ApiModelProperty(value = "供应商编号")
private String supplierNo;
@ApiModelProperty(value = "供应商")
private String supplier;
@ApiModelProperty(value = "闲置物资可使用数量")
private BigDecimal labelAvailabelNum;
@ApiModelProperty(value = "是否省份 0不是1")
private String isProvince;
@ApiModelProperty(value = "被选中的子需求")
private String rowId;
}

View File

@ -32,6 +32,8 @@ import com.chinaunicom.mall.ebtp.project.feign.MallPurpApi;
import com.chinaunicom.mall.ebtp.project.feign.entity.AnnoVO;
import com.chinaunicom.mall.ebtp.project.feign.entity.BizAssessRoom;
import com.chinaunicom.mall.ebtp.project.feign.entity.ProjInvitationFailRequest;
import com.chinaunicom.mall.ebtp.project.modelmaterial.entity.QuoteModelMaterial;
import com.chinaunicom.mall.ebtp.project.modelmaterial.service.IQuoteModelMaterialService;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.inquiryentity.InquiryNoticeVO;
import com.chinaunicom.mall.ebtp.project.projectexception.dao.ProjectExceptionMapper;
import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectException;
@ -114,6 +116,8 @@ public class ProjectExceptionServiceImpl extends BaseServiceImpl<ProjectExceptio
@Resource
private EbtpEvaluationApi ebtpEvaluationApi;
@Resource
private IQuoteModelMaterialService quoteModelMaterialService;
@Override
public IPage<ProjectExceptionVO> getPage(ProjectExceptionVO projectExceptionVO) {
@ -135,6 +139,13 @@ public class ProjectExceptionServiceImpl extends BaseServiceImpl<ProjectExceptio
@Transactional(rollbackFor = Exception.class)
public boolean insert(ProjectExceptionVO projectExceptionVO) {
//查询项目信息 获取项目实施ID
ProjectRecord projectRecord = projectRecordService.getById(projectExceptionVO.getProjectId());
if(projectRecord!=null && projectRecord.getBidMethodDict()!=null && StringUtils.equals(projectRecord.getBidMethodDict(),ProjectCommonUtil.PROCUREMENT_MODE_9)
&& projectRecord.getIsApproval()!=null && StringUtils.equals(projectRecord.getIsApproval(),ProjectCommonUtil.IS_APPROVAL_1)){
//单一来源简化流程 没有异常处理功能
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("项目属于单一来源简化流程不能异常处理",true);
}
projectExceptionVO.setId(PropertyUtils.getSnowflakeId());
projectExceptionVO.setStatus(ProjectCommonUtil.SECTION_EXCEPTION_STATE_0);
@ -416,11 +427,18 @@ public class ProjectExceptionServiceImpl extends BaseServiceImpl<ProjectExceptio
List<BidRatio> bidRatioList = bidRatioService.list(bidRatioQueryWrapper);
//转换成map形式方便处理数据
Map<String,List<BidRatio>> bidRatioMap = bidRatioList.stream().collect(Collectors.groupingBy(BidRatio::getSectionId));
//查询结构化报价模型
QueryWrapper<QuoteModelMaterial> quoteModelMaterialWrapper = new QueryWrapper<>();
quoteModelMaterialWrapper.in("section_id",sectionIds);
List<QuoteModelMaterial> quoteModelMaterialList = quoteModelMaterialService.list(quoteModelMaterialWrapper);
//转换成map形式方便处理数据
Map<String,List<QuoteModelMaterial>> quoteModelMaterialMap = quoteModelMaterialList.stream().collect(Collectors.groupingBy(QuoteModelMaterial::getSectionId));
//最终要插入的数据结果
List<SectionSupplier> sectionSupplierAddList = new ArrayList<>();
List<SectionMaterial> materialAddList = new ArrayList<>();
List<BidRatio> bidRatioAddList = new ArrayList<>();
List<QuoteModelMaterial> quoteModelMaterialAddList = new ArrayList<>();
//是否资审预审项目
boolean isReviewMethod = projectRecordService.isReviewMethod(projectRecord);
@ -472,6 +490,16 @@ public class ProjectExceptionServiceImpl extends BaseServiceImpl<ProjectExceptio
}
bidRatioAddList.addAll(ratioList);
}
//重新赋值新的项目ID和报价结构化模型ID
List<QuoteModelMaterial> modelMaterialList = quoteModelMaterialMap.get(section.getParentSectionId());
if (null != modelMaterialList && !modelMaterialList.isEmpty()) {
for (QuoteModelMaterial modelMaterial : modelMaterialList) {
modelMaterial.setSectionId(section.getId());
modelMaterial.setProjectId(projectRecord.getId());
modelMaterial.setId(section.getId());
}
quoteModelMaterialAddList.addAll(modelMaterialList);
}
}
projectRecord.setCreateDate(null);
@ -494,6 +522,10 @@ public class ProjectExceptionServiceImpl extends BaseServiceImpl<ProjectExceptio
if (null != bidRatioAddList && !bidRatioAddList.isEmpty()) {
bidRatioService.saveBatch(bidRatioAddList);
}
//插入结构化报价模型及物资关系
if (null != quoteModelMaterialAddList && !quoteModelMaterialAddList.isEmpty()) {
quoteModelMaterialService.saveBatch(quoteModelMaterialAddList);
}
//通知招标服务邀请函信息
callEbtpMallBidApi(projectRecord, sectionSupplierList);

View File

@ -31,6 +31,8 @@ import com.chinaunicom.mall.ebtp.project.dict.service.IDictProvincesCodeService;
import com.chinaunicom.mall.ebtp.project.dictchooseprocess.entity.DictChooseProcess;
import com.chinaunicom.mall.ebtp.project.dictchooseprocess.service.IDictChooseProcessService;
import com.chinaunicom.mall.ebtp.project.feign.*;
import com.chinaunicom.mall.ebtp.project.modelmaterial.entity.QuoteModelMaterial;
import com.chinaunicom.mall.ebtp.project.modelmaterial.service.IQuoteModelMaterialService;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrust;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrustExpand;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrustVO;
@ -134,6 +136,8 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
private IBidRatioService bidRatioService;
@Resource
private IBizQualifyConditionItemService qualifyConditionItemService;
@Resource
private IQuoteModelMaterialService quoteModelMaterialService;
/**
* 查询条件拼接
@ -813,10 +817,12 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
section.setPriceCeilingExplain(projBaseInfoVO.getPriceCeilingExplain());
//是否启用结构化报价 0否1是
section.setIsStructureQuote(projBaseInfoVO.getIsStructureQuote());
//结构化报价模型 001普通报价模型
//结构化报价模型 001普通报价模型002联动报价模型
section.setStructureQuoteModel(projBaseInfoVO.getStructureQuoteModel());
//结构化报价限价类型 001总价限制002单价+总价限制
//结构化报价限价类型 001总价限制002单价+总价限制003总价+基准单价限制
section.setStructureQuoteLimitType(projBaseInfoVO.getStructureQuoteLimitType());
//结构化报价限价类型 :基准价单价限制
section.setBasePriceUnitLimit(projBaseInfoVO.getBasePriceUnitLimit());
//中标/中选人数量是否明确 0否1是
section.setBidNumberIsDefinite(projBaseInfoVO.getBidNumberIsDefinite());
//中标/中选人数量
@ -846,6 +852,24 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
section.setMaterialList(assembleMaterial(record.getId(),section.getId(),purpBaseInfoVo.getPurpMaterialVOList()));
materialList.addAll(section.getMaterialList());
//保存报价结构化模型及物资关系
if(projBaseInfoVO.getQuoteModelVOList()!=null && !projBaseInfoVO.getQuoteModelVOList().isEmpty()){
quoteModelMaterialService.saveOrUpdate(new QuoteModelMaterial().setId(section.getId()).setModelMaterial(projBaseInfoVO.getQuoteModelVOList())
.setProjectId(record.getId()).setSectionId(section.getId()).setProjectPlanId(section.getProjectPlanId()));
ProjStructureQuoteModelVO model=projBaseInfoVO.getQuoteModelVOList().get(0);
String quotationMethodDict=null;
if(StringUtils.isNotBlank(model.getStructureQuoteModel())){
if(model.getStructureQuoteModel().equals("001") || model.getStructureQuoteModel().equals("002")){
quotationMethodDict="quotation_method_1";
}else if(model.getStructureQuoteModel().equals("003") || model.getStructureQuoteModel().equals("004")){
quotationMethodDict="quotation_method_2";
}
}
if(quotationMethodDict!=null){
section.setQuotationMethodDict(quotationMethodDict);
}
}
if(projBaseInfoVO.getTemplateItemList()!=null){
//资格条件模板-资格条件项(页面手动新增或来自资格条件库引用)-结构化公告用
projBaseInfoVO.getTemplateItemList().forEach(v->{
@ -905,6 +929,7 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
for(PurpMaterialVO purpMaterialVO:purpMaterialVOList){
SectionMaterial material = new SectionMaterial();
material.setId(PropertyUtils.getSnowflakeId());
material.setPurpMaterialId(purpMaterialVO.getId());
material.setProjectId(projectId);
material.setSectionId(sectionId);
material.setDemandId(purpMaterialVO.getRequId());
@ -913,11 +938,12 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
material.setMaterialExplain(purpMaterialVO.getMaterialDesc());
material.setMaterialBrand(purpMaterialVO.getSpecModel());
material.setMaterialTypeName(purpMaterialVO.getMaterialCategoryName());
material.setProcurementCount(Optional.ofNullable(purpMaterialVO.getInRequNum()).orElseGet(purpMaterialVO::getRequNum));
material.setProcurementCount(Optional.ofNullable(purpMaterialVO.getNum()).orElseGet(purpMaterialVO::getInRequNum));
material.setMaterialUnit(purpMaterialVO.getUnit());
material.setBasePrice(purpMaterialVO.getUnitAmt());
material.setMaterialCode(purpMaterialVO.getMaterialCode());
material.setMaxPriceCeiling(purpMaterialVO.getSinglePriceCeiling());
material.setUnifDirecName(purpMaterialVO.getUnifDirecName());
resultList.add(material);
}
}

View File

@ -319,6 +319,10 @@ public class ProjectReEvaluationServiceImpl extends BaseServiceImpl<ProjectReEva
ProjectSection section = sectionService.getById(sectionId);
if(null != section){
if(section.getChooseProcess()!=null && section.getChooseProcess().equals("choose_process_59")){
//单一来源简化流程 没有重评
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("项目属于单一来源简化流程不能重评",true);
}
if(null != section.getBusinessModule() && section.getBusinessModule().equals(ProjectCommonUtil.BUSINESS_MODULE_11)){
result = true;
}

View File

@ -254,10 +254,10 @@ public class ProjectSection extends BaseEntity implements Serializable {
@ApiModelProperty(value = "是否启用结构化报价 0否1是")
private String isStructureQuote;
@ApiModelProperty(value = "结构化报价模型 001普通报价模型")
@ApiModelProperty(value = "结构化报价模型 001普通报价模型002联动报价模型003定额折扣报价模型;004非定额折扣报价模型 ")
private String structureQuoteModel;
@ApiModelProperty(value = "结构化报价限价类型 001总价限制002单价+总价限制")
@ApiModelProperty(value = "结构化报价限价类型 001总价限制002单价+总价限制003总价+基准单价限制")
private String structureQuoteLimitType;
@ApiModelProperty(value = "中标/中选人数量是否明确 0否1是")
@ -273,6 +273,9 @@ public class ProjectSection extends BaseEntity implements Serializable {
@ApiModelProperty(value = "中标中选分配比例原则:中标/中选人数量是否明确为否时必填")
private String structureNote;
@ApiModelProperty(value = "基准价单价限制")
private BigDecimal basePriceUnitLimit;
@TableField(exist = false)
@ApiModelProperty(value = "物料信息")
private List<SectionMaterial> materialList = new ArrayList<>();

View File

@ -3,6 +3,7 @@ package com.chinaunicom.mall.ebtp.project.sectionmaterial.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.chinaunicom.mall.ebtp.common.base.entity.BasePageResponse;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterial;
import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterialVO;
@ -90,4 +91,15 @@ public class SectionMaterialController{
query.in(SectionMaterial::getSectionId,sectionIds);
return BaseResponse.success(sectionMaterialService.list(query));
}
@ApiOperation("根据标段查询物资信息")
@PostMapping("/list")
public BaseResponse<List<SectionMaterial>> list(@ApiParam(value = "对象数据", required = true) @RequestBody SectionMaterialVO sectionMaterial){
return BaseResponse.success(sectionMaterialService.getList(sectionMaterial));
}
@ApiOperation("根据标段查询物资信息")
@PostMapping("/findPage")
public BasePageResponse<SectionMaterial> findPage(@ApiParam(value = "对象数据", required = true) @RequestBody SectionMaterialVO sectionMaterial){
return BasePageResponse.success(sectionMaterialService.findPage(sectionMaterial));
}
}

View File

@ -134,4 +134,10 @@ public class SectionMaterial extends BaseEntity implements Serializable {
@ApiModelProperty(value = "单项不含税最高限价")
private BigDecimal maxPriceCeiling;
@ApiModelProperty(value = "项目中心物料id")
private String purpMaterialId;
@ApiModelProperty(value = "统一目录名称")
private String unifDirecName;
}

View File

@ -2,10 +2,14 @@ package com.chinaunicom.mall.ebtp.project.sectionmaterial.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* 项目物资信息VO类 SectionMaterial
@ -18,4 +22,23 @@ import java.io.Serializable;
@ApiModel("项目物资信息VO类")
@TableName(autoResultMap = true)
public class SectionMaterialVO extends SectionMaterial implements Serializable {
private List<String> sectionIds;
@ApiModelProperty("当前页")
@NotNull
@Min(0)
private Integer pageNo;
@ApiModelProperty("每页显示条数")
@NotNull
@Min(0)
private Integer pageSize;
public Integer getPageNo() {
return null == pageNo ? 0 : pageNo;
}
public Integer getPageSize() {
return null == pageSize ? 10 : pageSize;
}
}

View File

@ -1,6 +1,7 @@
package com.chinaunicom.mall.ebtp.project.sectionmaterial.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterial;
import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterialVO;
@ -37,4 +38,5 @@ public interface ISectionMaterialService extends IBaseService<SectionMaterial>{
*/
List<SectionMaterial> getList(SectionMaterialVO sectionMaterialVO);
IPage<SectionMaterial> findPage(SectionMaterialVO sectionMaterialVO);
}

View File

@ -1,7 +1,13 @@
package com.chinaunicom.mall.ebtp.project.sectionmaterial.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
import com.chinaunicom.mall.ebtp.project.sectionmaterial.dao.SectionMaterialMapper;
import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterial;
@ -10,6 +16,7 @@ import com.chinaunicom.mall.ebtp.project.sectionmaterial.service.ISectionMateria
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
@ -35,20 +42,28 @@ public class SectionMaterialServiceImpl extends BaseServiceImpl<SectionMaterialM
@Override
public List<SectionMaterial> getList(SectionMaterialVO sectionMaterialVO) {
QueryWrapper<SectionMaterial> query = new QueryWrapper<>();
LambdaQueryWrapper<SectionMaterial> query = Wrappers.lambdaQuery();
//查询条件拼接
if(null != sectionMaterialVO.getSectionId()){
query.eq("section_id",sectionMaterialVO.getSectionId());
}
if(null != sectionMaterialVO.getProjectId()){
query.eq("project_id",sectionMaterialVO.getProjectId());
}
if(null != sectionMaterialVO.getSectionId()){
query.eq("section_id",sectionMaterialVO.getSectionId());
query.eq(StringUtils.isNotBlank(sectionMaterialVO.getSectionId()),SectionMaterial::getSectionId,sectionMaterialVO.getSectionId());
query.eq(StringUtils.isNotBlank(sectionMaterialVO.getProjectId()),SectionMaterial::getProjectId,sectionMaterialVO.getProjectId());
query.in(sectionMaterialVO.getSectionIds()!=null,SectionMaterial::getSectionId, sectionMaterialVO.getSectionIds());
query.like(StringUtils.isNotBlank(sectionMaterialVO.getMaterialExplain()),SectionMaterial::getMaterialExplain,sectionMaterialVO.getMaterialExplain());
query.like(StringUtils.isNotBlank(sectionMaterialVO.getMaterialCode()),SectionMaterial::getMaterialCode,sectionMaterialVO.getMaterialCode());
if(query.isEmptyOfWhere()){
return new ArrayList<>() ;
}
return sectionMaterialMapper.selectList(query);
}
@Override
public IPage<SectionMaterial> findPage(SectionMaterialVO sectionMaterialVO) {
LambdaQueryWrapper<SectionMaterial> query = Wrappers.lambdaQuery();
query.in(SectionMaterial::getSectionId, sectionMaterialVO.getSectionIds());
query.like(StringUtils.isNotBlank(sectionMaterialVO.getMaterialExplain()),SectionMaterial::getMaterialExplain,sectionMaterialVO.getMaterialExplain());
query.like(StringUtils.isNotBlank(sectionMaterialVO.getMaterialCode()),SectionMaterial::getMaterialCode,sectionMaterialVO.getMaterialCode());
IPage<SectionMaterial> convert= this.page(new Page<>(sectionMaterialVO.getPageNo(), sectionMaterialVO.getPageSize()),query);
return convert;
}
}