projSuppRelVOList;
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/ProjSuppRelVO.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/ProjSuppRelVO.java
new file mode 100644
index 0000000..1abcce4
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/ProjSuppRelVO.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2020, SDCNCSI. All rights reserved.
+ */
+package com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * proj_supp_rel 供应商实体
+ *
+ *
+ * @author wmm
+ * @date 2020-11-13
+ * @version: V1.0
+ * @update [序号][日期YYYY-MM-DD] [更改人姓名][变更描述]
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value="ProjSuppRel对象", description="proj_supp_rel")
+public class ProjSuppRelVO{
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "id")
+ @JsonFormat(shape = JsonFormat.Shape.STRING)
+ @TableId(value = "id")
+ private Long id;
+
+ @ApiModelProperty(value = "采购方案id")
+ private Long projId;
+
+ @ApiModelProperty(value = "供应商编号")
+ private String suppNo;
+
+ @ApiModelProperty(value = "供应商来源")
+ private String suppSource;
+
+ @ApiModelProperty(value = "推荐理由")
+ private String recommendReason;
+
+ @ApiModelProperty(value = "供应商名称")
+ private String suppName;
+
+ @ApiModelProperty(value = "供应商id")
+ private Long suppId;
+
+ @ApiModelProperty(value = "终止环节ID")
+ private Long disuseStageId;
+
+ @ApiModelProperty(value = "供应商别名")
+ private String suppRename;
+
+ @ApiModelProperty(value = "终止时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime disuseTime;
+
+ @ApiModelProperty(value = "供应商状态")
+ private String suppStatus;
+
+ @ApiModelProperty(value = "终止理由")
+ private String disuseReason;
+
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+ @ApiModelProperty(value = "供应商联系人id")
+ private Long suppLinkManId;
+
+ @ApiModelProperty(value = "供应商联系人姓名")
+ private String suppLinkManName;
+
+ @ApiModelProperty(value = "供应商联系人email")
+ private String suppLinkManEmail;
+
+ @ApiModelProperty(value = "供应商描述")
+ private String suppDesc;
+
+ @ApiModelProperty(value = "是否有代理公司")
+ private String isSurrogate;
+
+ @ApiModelProperty(value = "代理公司名称")
+ private String surrogateName;
+
+ @ApiModelProperty(value = "系统团体编码")
+ private String sysPartyCode;
+
+ @ApiModelProperty(value = "是否推荐")
+ private String isRecommend;
+
+ @ApiModelProperty(value = "是否中标")
+ private String isWin;
+
+ @ApiModelProperty(value = "账户")
+ private String account;
+
+ @ApiModelProperty(value = "租户标识")
+ private String tenantId;
+
+ @ApiModelProperty(value = "租户名称")
+ private String tenantName;
+
+ @ApiModelProperty(value = "最后更新时间戳")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime lastUpdateTime;
+
+ @ApiModelProperty(value = "备用字段1")
+ private String attribute1;
+
+ @ApiModelProperty(value = "备用字段2")
+ private String attribute2;
+
+ @ApiModelProperty(value = "备用字段3")
+ private String attribute3;
+
+ @ApiModelProperty(value = "备用字段4")
+ private String attribute4;
+
+ @ApiModelProperty(value = "备用字段5")
+ private String attribute5;
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpBaseInfoVO.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpBaseInfoVO.java
new file mode 100644
index 0000000..bb6f034
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpBaseInfoVO.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2020, SDCNCSI. All rights reserved.
+ */
+package com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 采购建项
+ *
+ *
+ * @author liuyx
+ * @date 2020-10-06
+ * @version V1.0
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value="PurpBaseInfo对象", description="采购建项")
+public class PurpBaseInfoVO {
+
+ @ApiModelProperty(value = "采购建项主键")
+ @TableId(value = "id")
+ private String id;
+
+ @ApiModelProperty(value = "父项目id")
+ private String purpSuperId;
+
+ @ApiModelProperty(value = "父项目编号")
+ private String purpSuperNo;
+
+ @ApiModelProperty(value = "父项目名称")
+ private String purpSuperName;
+
+ @ApiModelProperty(value = "业务类型")
+ private String businessType;
+
+ @ApiModelProperty(value = "拍卖类型")
+ private String auctionType;
+
+ @ApiModelProperty(value = "竞价平台")
+ private String biddingPlatform;
+
+ @ApiModelProperty(value = "采购项目编号")
+ private String purpNo;
+
+ @ApiModelProperty(value = "采购项目名称")
+ private String purpName;
+
+ @ApiModelProperty(value = "编制人编码")
+ private String makerCode;
+
+ @ApiModelProperty(value = "编制人姓名")
+ private String maker;
+
+ @ApiModelProperty(value = "产品经理编码")
+ private String undertakerCode;
+
+ @ApiModelProperty(value = "产品经理姓名")
+ private String undertaker;
+
+ @ApiModelProperty(value = "采购实施部门编码")
+ private String procImplDeptCode;
+
+ @ApiModelProperty(value = "采购实施部门")
+ private String procImplDept;
+
+ @ApiModelProperty(value = "需求归属部门编码")
+ private String requAscriptionDeptCode;
+
+ @ApiModelProperty(value = "需求归属部门")
+ private String requAscriptionDept;
+
+ @ApiModelProperty(value = "采购预算(不含税)")
+ private BigDecimal budgetAmount;
+
+ @ApiModelProperty(value = "项目级别")
+ private String projectLevel;
+
+ @ApiModelProperty(value = "专业线")
+ private String professionalLine;
+
+ @ApiModelProperty(value = "业务流程类型")
+ private String businessProcessType;
+
+ @ApiModelProperty(value = "项目是否需求公示")
+ private String isPublicity;
+
+ @ApiModelProperty(value = "当前状态")
+ private String currentStatus;
+
+ @ApiModelProperty(value = "项目状态")
+ private String purpStatus;
+
+ @ApiModelProperty(value = "处置类型")
+ private String disposalType;
+
+ @ApiModelProperty(value = "资金性质")
+ private String fundsType;
+
+ @ApiModelProperty(value = "公式期间是否收到质疑")
+ private String isQuestion;
+
+ @ApiModelProperty(value = "质疑是否成立")
+ private String isEstablished;
+
+ @ApiModelProperty(value = "公示结论")
+ private String noticeCompletion;
+
+ @ApiModelProperty(value = "项目完结状态")
+ private String purpEndStatus;
+
+ @ApiModelProperty(value = "是否编制方案")
+ private String isProj;
+
+ @ApiModelProperty(value = "租户标识")
+ private String tenantId;
+
+ @ApiModelProperty(value = "租户名称")
+ private String tenantName;
+
+ @ApiModelProperty(value = "最后更新时间戳")
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date lastUpdateTime;
+
+ @ApiModelProperty(value = "备用字段1")
+ private String attribute1;
+
+ @ApiModelProperty(value = "备用字段2")
+ private String attribute2;
+
+ @ApiModelProperty(value = "备用字段3")
+ private String attribute3;
+
+ @ApiModelProperty(value = "备用字段4")
+ private String attribute4;
+
+ @ApiModelProperty(value = "备用字段5")
+ private String attribute5;
+
+ @ApiModelProperty(value = "父项目代理公司")
+ private String agencyComp;
+
+ @ApiModelProperty(value = "父项目组织形式")
+ private String organizationalForm;
+
+ @ApiModelProperty(value = "联系电话")
+ private String telNo;
+
+ @ApiModelProperty(value = "采购建项时间")
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date createDate;
+
+ @ApiModelProperty(value = "批复时间")
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date auditDate;
+
+ @ApiModelProperty(value = "采购内容")
+ private List purpMaterialVOList;
+
+ @ApiModelProperty(value = "当前所在阶段")
+ private String purpStageName;
+
+ @ApiModelProperty(value = "方案实体")
+ private ProjBaseInfoVO projBaseInfoVO;
+
+ @ApiModelProperty(value = "机构名称")
+ private String organName;
+
+ @ApiModelProperty(value = "所属省分")
+ private String suborProvince;
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpImplementSendVO.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpImplementSendVO.java
new file mode 100644
index 0000000..d6d800e
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpImplementSendVO.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2020, SDCNCSI. All rights reserved.
+ */
+package com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 实施项目表
+ *
+ *
+ * @author liuyx
+ * @date 2020-10-06
+ * @version V1.0
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value="PurpImplement对象", description="实施项目表")
+public class PurpImplementSendVO{
+
+ @ApiModelProperty(value = "实施项目id")
+ @TableId(value = "id")
+ private String id;
+
+ @ApiModelProperty(value = "实施项目编号")
+ private String purpImplementNo;
+
+ @ApiModelProperty(value = "实施项目名称")
+ private String purpImplementName;
+
+ @ApiModelProperty(value = "采购建项id")
+ private String purpId;
+
+ @ApiModelProperty(value = "采购实施子项目数量")
+ private BigDecimal purpImplementDetailNum;
+
+ @ApiModelProperty(value = "编制人编码")
+ private String makerCode;
+
+ @ApiModelProperty(value = "编制人")
+ private String maker;
+
+ @ApiModelProperty(value = "发送状态")
+ private String sendStatus;
+
+ @ApiModelProperty(value = "发送完成日期")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date sendCompleteTime;
+
+ @ApiModelProperty(value = "租户标识")
+ private String tenantId;
+
+ @ApiModelProperty(value = "租户名称")
+ private String tenantName;
+
+ @ApiModelProperty(value = "最后更新时间戳")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime lastUpdateTime;
+
+ @ApiModelProperty(value = "备用字段1")
+ private String attribute1;
+
+ @ApiModelProperty(value = "备用字段2")
+ private String attribute2;
+
+ @ApiModelProperty(value = "备用字段3")
+ private String attribute3;
+
+ @ApiModelProperty(value = "备用字段4")
+ private String attribute4;
+
+ @ApiModelProperty(value = "备用字段5")
+ private String attribute5;
+
+ @ApiModelProperty(value = "子项目实体集合")
+ private List purpBaseInfoVoList;
+
+ @ApiModelProperty(value = "父项目实体信息")
+ private PurpSuperVO purpSuperVo;
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpMaterialVO.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpMaterialVO.java
new file mode 100644
index 0000000..da124f0
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpMaterialVO.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2020, SDCNCSI. All rights reserved.
+ */
+package com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ *
+ * 项目物料表
+ *
+ *
+ * @author liuyx
+ * @date 2020-10-06
+ * @version V1.0
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value="PurpMaterial对象", description="项目物料表")
+public class PurpMaterialVO{
+
+
+ @ApiModelProperty(value = "采购处置内容主键")
+ @TableId(value = "id")
+ private String id;
+
+ @ApiModelProperty(value = "项目id")
+ private String purpId;
+
+ @ApiModelProperty(value = "项目编号")
+ private String purpNo;
+
+ @ApiModelProperty(value = "项目名称")
+ private String purpName;
+
+ @ApiModelProperty(value = "需求单id")
+ private String requId;
+
+ @ApiModelProperty(value = "需求单编号")
+ private String requNo;
+
+ @ApiModelProperty(value = "需求单名称")
+ private String requName;
+
+ @ApiModelProperty(value = "需求部门编号")
+ private String deptCode;
+
+ @ApiModelProperty(value = "需求部门名称")
+ private String deptName;
+
+ @ApiModelProperty(value = "pms项目编号")
+ private String pmsProjNo;
+
+ @ApiModelProperty(value = "pms项目名称")
+ private String pmsProjName;
+
+ @ApiModelProperty(value = "批复文号")
+ private String pmsPassNo;
+
+ @ApiModelProperty(value = "ou组织名")
+ private String orgName;
+
+ @ApiModelProperty(value = "库存地址")
+ private String reservePlace;
+
+ @ApiModelProperty(value = "物料编码")
+ private String materialCode;
+
+ @ApiModelProperty(value = "物料行id")
+ private String materialId;
+
+ @ApiModelProperty(value = "物料说明")
+ private String materialDesc;
+
+ @ApiModelProperty(value = "物料厂家")
+ private String materialManufacturer;
+
+ @ApiModelProperty(value = "物料类别编码")
+ private String materialCategoryCode;
+
+ @ApiModelProperty(value = "物料类别名称")
+ private String materialCategoryName;
+
+ @ApiModelProperty(value = "规格型号")
+ private String specModel;
+
+ @ApiModelProperty(value = "库存id")
+ private String inventId;
+
+ @ApiModelProperty(value = "商品SKU")
+ private String goodsSKU;
+
+ @ApiModelProperty(value = "库龄")
+ private String libraryAge;
+
+ @ApiModelProperty(value = "评估价")
+ private BigDecimal estimatedAmt;
+
+ @ApiModelProperty(value = "原值")
+ private BigDecimal originalVal;
+
+ @ApiModelProperty(value = "净值")
+ private BigDecimal netVal;
+
+ @ApiModelProperty(value = "本次采购数量")
+ private BigDecimal num;
+
+ @ApiModelProperty(value = "需求数量")
+ private BigDecimal requNum;
+
+ @ApiModelProperty(value = "单位")
+ private String unit;
+
+ @ApiModelProperty(value = "单价")
+ private BigDecimal unitAmt;
+
+ @ApiModelProperty(value = "采购预算(不含税)")
+ private BigDecimal budgetAmt;
+
+ @ApiModelProperty(value = "起拍单价")
+ private BigDecimal clapUnitPrice;
+
+ @ApiModelProperty(value = "起拍总价")
+ private BigDecimal totalStartAmt;
+
+ @ApiModelProperty(value = "统一目录名称")
+ private String uniftCatalogName;
+
+ @ApiModelProperty(value = "统一目录编码")
+ private String uniftCatalogCode;
+
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+ @ApiModelProperty(value = "最后更新时间戳")
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date lastUpdateTime;
+
+ @ApiModelProperty(value = "备用字段1")
+ private String attribute1;
+
+ @ApiModelProperty(value = "备用字段2")
+ private String attribute2;
+
+ @ApiModelProperty(value = "备用字段3")
+ private String attribute3;
+
+ @ApiModelProperty(value = "备用字段4")
+ private String attribute4;
+
+ @ApiModelProperty(value = "备用字段5")
+ private String attribute5;
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpSuperVO.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpSuperVO.java
new file mode 100644
index 0000000..e494cfd
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/entity/ebpentity/PurpSuperVO.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2020, SDCNCSI. All rights reserved.
+ */
+package com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 采购父项目 父项目实体
+ *
+ *
+ * @author liuyx
+ * @date 2020-10-06
+ * @version V1.0
+ */
+@Data
+@Accessors(chain = true)
+@TableName("purp_super")
+@ApiModel(value="Super对象", description="采购父项目")
+public class PurpSuperVO{
+
+ @ApiModelProperty(value = "父项目主键")
+ @TableId(value = "id")
+ private String id;
+
+ @ApiModelProperty(value = "父项目编号")
+ private String purpSuperNo;
+
+ @ApiModelProperty(value = "父项目名称")
+ private String purpSuperName;
+
+ @ApiModelProperty(value = "业务类型")
+ private String businessType;
+
+ @ApiModelProperty(value = "编制人编码")
+ private String makerCode;
+
+ @ApiModelProperty(value = "编制人姓名")
+ private String maker;
+
+ @ApiModelProperty(value = "采购实施部门编码")
+ private String procImplDeptCode;
+
+ @ApiModelProperty(value = "采购实施部门名称")
+ private String procImplDept;
+
+ @ApiModelProperty(value = "组织形式")
+ private String organizationalForm;
+
+ @ApiModelProperty(value = "代理公司编码")
+ private String agencyCompCode;
+
+ @ApiModelProperty(value = "代理公司")
+ private String agencyComp;
+
+ @ApiModelProperty(value = "拍卖类型")
+ private String auctionType;
+
+ @ApiModelProperty(value = "竞价平台")
+ private String biddingPlatform;
+
+ @ApiModelProperty(value = "当前状态")
+ private String currentStatus;
+
+ @ApiModelProperty(value = "租户标识")
+ private String tenantId;
+
+ @ApiModelProperty(value = "租户名称")
+ private String tenantName;
+
+ @ApiModelProperty(value = "最后更新时间戳")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime lastUpdateTime;
+
+ @ApiModelProperty("创建人")
+ private Long createBy;
+
+ @ApiModelProperty("创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createDate;
+
+ @ApiModelProperty("编辑人")
+ private Long updateBy;
+
+ @ApiModelProperty("编辑时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateDate;
+
+ @ApiModelProperty(value = "备用字段1")
+ private String attribute1;
+
+ @ApiModelProperty(value = "备用字段2")
+ private String attribute2;
+
+ @ApiModelProperty(value = "备用字段3")
+ private String attribute3;
+
+ @ApiModelProperty(value = "备用字段4")
+ private String attribute4;
+
+ @ApiModelProperty(value = "备用字段5")
+ private String attribute5;
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/IProjectEntrustExpandService.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/IProjectEntrustExpandService.java
new file mode 100644
index 0000000..163903a
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/IProjectEntrustExpandService.java
@@ -0,0 +1,16 @@
+package com.chinaunicom.mall.ebtp.project.projectentrust.service;
+
+
+import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrustExpand;
+
+/**
+ * 对数据表 biz_project_entrust_expand 操作的 service
+ * @author Auto create
+ *
+ */
+public interface IProjectEntrustExpandService extends IBaseService{
+
+
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/IProjectEntrustService.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/IProjectEntrustService.java
new file mode 100644
index 0000000..3804c36
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/IProjectEntrustService.java
@@ -0,0 +1,85 @@
+package com.chinaunicom.mall.ebtp.project.projectentrust.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrust;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrustVO;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.PurpImplementSendVO;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 对数据表 biz_project_entrust 操作的 service
+ * @author daixc
+ * @date 2020/10/27
+ *
+ */
+public interface IProjectEntrustService extends IBaseService{
+
+ /**
+ * 委托单分页信息
+ * @param projectEntrust 委托单查询信息
+ * @return 返回结果
+ */
+ IPage getPage(ProjectEntrustVO projectEntrust);
+
+ /**
+ * 分派项目经理
+ * @param projectEntrust 委托单信息
+ * @return 返回结果
+ */
+ boolean dispatch(ProjectEntrustVO projectEntrust);
+
+ /**
+ * 取消分派项目经理
+ * @param id 委托单ID
+ * @return 返回结果
+ */
+ boolean retractDispatch(Long id);
+
+ /**
+ * 委托机构拒绝
+ * @param id 委托单ID
+ * @param remarks 决绝说明
+ * @return 返回结果
+ */
+ boolean agencyCompanyDispatch(Long id, String remarks);
+
+ /**
+ * 项目经理同意
+ * @param id 委托单ID
+ * @return 返回结果
+ */
+ boolean projectManagerAgree(Long id);
+
+ /**
+ * 项目经理拒绝
+ * @param id 委托单ID
+ * @return 返回结果
+ */
+ boolean projectManagerRefuse(Long id);
+
+ /**
+ * 获取项目相关所有信息
+ * @param id 委托单ID
+ * @return 返回结果
+ */
+ ProjectEntrustVO getProjectAll(Long id);
+
+ /**
+ * 委托项目信息出始化
+ *
+ * @param ebpProjectId 实施项目ID
+ * @return 返回结果
+ */
+ boolean initProjectEntrust(Long ebpProjectId);
+
+ /**
+ * 接口测试
+ * @param purpImplementSendVO
+ * @return
+ */
+ boolean testProjectEntrust(PurpImplementSendVO purpImplementSendVO);
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/impl/ProjectEntrustExpandServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/impl/ProjectEntrustExpandServiceImpl.java
new file mode 100644
index 0000000..a9ea03b
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/impl/ProjectEntrustExpandServiceImpl.java
@@ -0,0 +1,18 @@
+package com.chinaunicom.mall.ebtp.project.projectentrust.service.impl;
+
+
+import com.chinaunicom.mall.ebtp.project.projectentrust.dao.ProjectEntrustExpandMapper;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrustExpand;
+import com.chinaunicom.mall.ebtp.project.projectentrust.service.IProjectEntrustExpandService;
+import org.springframework.stereotype.Service;
+import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
+/**
+ * 对数据表 biz_project_entrust_expand 操作的 serviceImpl
+ * @author Auto create
+ *
+ */
+@Service
+public class ProjectEntrustExpandServiceImpl extends BaseServiceImpl implements IProjectEntrustExpandService {
+
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/impl/ProjectEntrustServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/impl/ProjectEntrustServiceImpl.java
new file mode 100644
index 0000000..34128f8
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectentrust/service/impl/ProjectEntrustServiceImpl.java
@@ -0,0 +1,543 @@
+package com.chinaunicom.mall.ebtp.project.projectentrust.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
+import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
+import com.chinaunicom.mall.ebtp.common.base.enums.ResponseEnum;
+import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService;
+import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
+import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum;
+import com.chinaunicom.mall.ebtp.common.util.JsonUtils;
+import com.chinaunicom.mall.ebtp.common.util.PropertyUtils;
+import com.chinaunicom.mall.ebtp.project.baseoperlog.service.IBaseOperLogService;
+import com.chinaunicom.mall.ebtp.project.common.EbpProjectCommonUtil;
+import com.chinaunicom.mall.ebtp.project.common.ProjectCommonUtil;
+import com.chinaunicom.mall.ebtp.project.common.ProjectExceptionEnum;
+import com.chinaunicom.mall.ebtp.project.feign.MallPurpApi;
+import com.chinaunicom.mall.ebtp.project.projectauction.service.IProjectAuctionService;
+import com.chinaunicom.mall.ebtp.project.projectentrust.dao.ProjectEntrustMapper;
+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;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.ProjBaseInfoVO;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.PurpBaseInfoVO;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.PurpImplementSendVO;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.PurpSuperVO;
+import com.chinaunicom.mall.ebtp.project.projectentrust.service.IProjectEntrustExpandService;
+import com.chinaunicom.mall.ebtp.project.projectentrust.service.IProjectEntrustService;
+import com.chinaunicom.mall.ebtp.project.projectrecord.service.IProjectRecordService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 对数据表 biz_project_entrust 操作的 serviceImpl
+ * @author daixc
+ * @date 2020/10/27
+ *
+ */
+@Service
+public class ProjectEntrustServiceImpl extends BaseServiceImpl implements IProjectEntrustService {
+
+ @Resource
+ private IProjectRecordService projectRecordService;
+
+ @Resource
+ private IProjectEntrustExpandService entrustExpandService;
+
+ @Resource
+ private IBaseOperLogService baseOperLogService;
+
+ @Resource
+ private IBaseCacheUserService cacheUserService;
+
+ @Resource
+ private IProjectAuctionService auctionService;
+
+ @Resource
+ private MallPurpApi mallPurpApi;
+
+ private static final String METHOD = "initProjectEntrust";
+
+ private static final String DESCRIPTION = "项目委托查询采购数据";
+
+
+
+ /**
+ * 获取查询条件
+ * @param projectEntrust 查询条件
+ * @return 返回查询条件
+ */
+ private QueryWrapper getProjectEntrustQueryWrapper(ProjectEntrustVO projectEntrust) {
+ QueryWrapper query = new QueryWrapper<>();
+ //项目名称
+ if(StringUtils.isNotBlank(projectEntrust.getProjectName())){
+ query.like("project_name", projectEntrust.getProjectName());
+ }
+
+ //项目经理
+ if(StringUtils.isNotBlank(projectEntrust.getProjectManager())){
+ query.eq("project_manager", projectEntrust.getProjectManager());
+ }
+
+ //代理机构
+ if(StringUtils.isNotBlank(projectEntrust.getAgencyCompany())){
+ query.eq("agency_company", projectEntrust.getAgencyCompany());
+ }
+
+ //采购方式
+ if(StringUtils.isNotBlank(projectEntrust.getProcurementMode())){
+ query.eq("procurement_mode", projectEntrust.getProcurementMode());
+ }
+
+ //状态
+ if(null != projectEntrust.getStatus()){
+ query.eq("status", projectEntrust.getStatus());
+ }
+
+ //项目编号
+ if(StringUtils.isNotBlank(projectEntrust.getProjectNumber())){
+ query.eq("project_number", projectEntrust.getProjectNumber());
+ }
+
+ return query;
+ }
+
+ @Override
+ public IPage getPage(ProjectEntrustVO projectEntrust) {
+
+ QueryWrapper query = getProjectEntrustQueryWrapper(projectEntrust);
+
+ query.orderByDesc("id");
+
+ if(null == projectEntrust.getBasePageRequest()){
+ projectEntrust.setBasePageRequest(new BasePageRequest());
+ }
+
+ //查询
+ IPage p = new Page<>(projectEntrust.getBasePageRequest().getPageNo(), projectEntrust.getBasePageRequest().getPageSize());
+ IPage result = this.page(p, query);
+
+ IPage voPage = result.convert(c -> BeanUtil.toBean(c,ProjectEntrustVO.class));
+ voPage.setRecords(JsonUtils.jsonToList(result.getRecords(),ProjectEntrustVO.class));
+
+ return voPage;
+ }
+
+ @Override
+ public boolean dispatch(ProjectEntrustVO projectEntrustVO) {
+ projectEntrustVO.setStatus(ProjectCommonUtil.ENTRUS_STATUS_1);
+ boolean result = updateStatus(projectEntrustVO,ProjectCommonUtil.ENTRUS_STATUS_2);
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_UPDATE.customValid(!result);
+ return result;
+ }
+
+ @Override
+ public boolean retractDispatch(Long id) {
+ ProjectEntrust projectEntrust = this.getById(id);
+ projectEntrust.setId(id);
+ projectEntrust.setStatus(ProjectCommonUtil.ENTRUS_STATUS_2);
+ boolean result = updateStatus(projectEntrust,ProjectCommonUtil.ENTRUS_STATUS_1);
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_UPDATE.customValid(!result);
+ return result;
+ }
+
+ @Override
+ public boolean agencyCompanyDispatch(Long id,String remarks) {
+ ProjectEntrust projectEntrust = this.getById(id);
+ projectEntrust.setId(id);
+ projectEntrust.setStatus(ProjectCommonUtil.ENTRUS_STATUS_1);
+ projectEntrust.setRemarks(remarks);
+ boolean result = updateStatus(projectEntrust,ProjectCommonUtil.ENTRUS_STATUS_9);
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_UPDATE.customValid(!result);
+ //调用采购系统退回通知接口 1期不进行实现
+ return result;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean projectManagerAgree(Long id) {
+
+ boolean result = false;
+ ProjectEntrust projectEntrust = this.getById(id);
+
+ //判断项目经理同意项目状态是否正确
+ if(null != projectEntrust && null != projectEntrust.getStatus() && projectEntrust.getStatus().equals(ProjectCommonUtil.ENTRUS_STATUS_2)){
+ result = updateStatus(projectEntrust,ProjectCommonUtil.ENTRUS_STATUS_3);
+
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_UPDATE.customValid(!result);
+ //修改项目信息
+ result = projectRecordService.assent(id);
+ }else{
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_FIND.customValid(null == projectEntrust);
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_STATE.throwException();
+ }
+ return result;
+ }
+
+ @Override
+ public boolean projectManagerRefuse(Long id) {
+
+ boolean result = false;
+ ProjectEntrust projectEntrust = this.getById(id);
+
+ //判断项目经理拒绝时状态是否正确
+ if(null != projectEntrust && null != projectEntrust.getStatus() && projectEntrust.getStatus().equals(ProjectCommonUtil.ENTRUS_STATUS_2)){
+ result = updateStatus(projectEntrust,ProjectCommonUtil.ENTRUS_STATUS_1);
+ }else{
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_FIND.customValid(null == projectEntrust);
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_STATE.throwException();
+ }
+ return result;
+ }
+
+ /**
+ * 查询所有信息
+ * @param id 委托单ID
+ * @return 返回结果
+ */
+ @Override
+ public ProjectEntrustVO getProjectAll(Long id) {
+
+ ProjectEntrustVO vo = BeanUtil.toBean(this.getById(id),ProjectEntrustVO.class);
+
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_FIND.customValid(null == vo);
+
+ ProjectEntrustExpand expand = entrustExpandService.getOne(new QueryWrapper().eq("entrust_id",id));
+
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_FIND.customValid(null == expand);
+
+ if(null != vo){
+ vo.setProjectEntrustExpand(expand);
+ }
+
+ return vo;
+ }
+
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean initProjectEntrust(Long ebpProjectId){
+
+ boolean result = false;
+
+ ProjectEntrust projectEntrust = this.getOne(new QueryWrapper().eq("procurement_plan_id",ebpProjectId));
+
+ //是否需要请求接口
+ boolean isRequestClient = false;
+
+ //是否调用修改
+ boolean isUpdate =false;
+ //判断如果为空 或者之前拒绝 重新插入
+ if(null == projectEntrust || projectEntrust.getStatus().equals(ProjectCommonUtil.ENTRUS_STATUS_9)){
+ isRequestClient = true;
+ }else{
+ //如果为分派或者未同意 可以进行修改
+ if(projectEntrust.getStatus().equals(ProjectCommonUtil.ENTRUS_STATUS_1) ||
+ projectEntrust.getStatus().equals(ProjectCommonUtil.ENTRUS_STATUS_2)){
+ isRequestClient = true;
+ isUpdate = true;
+ }else{
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_ERROR_STATE.throwException();
+ }
+ }
+
+ if(isRequestClient){
+
+ BaseResponse baseResponse = mallPurpApi.findDataByPurpImplmentId(ebpProjectId);
+
+ //调用接口 拼装数据
+ baseOperLogService.addLog(METHOD,JsonUtils.objectToJson(baseResponse),DESCRIPTION,cacheUserService.getCacheUser(),"",true);
+
+ if(!baseResponse.isSuccess()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_FIND_PUR_ERROR.throwException();
+ }
+
+ PurpImplementSendVO purpImplementSendVO = baseResponse.getData();
+
+ if(null == purpImplementSendVO || null == purpImplementSendVO.getPurpSuperVo()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_PURP_SUPER_VO_EMPTY.throwException();
+ }
+
+ //竞拍
+ if(StringUtils.equals(purpImplementSendVO.getPurpSuperVo().getBusinessType(),EbpProjectCommonUtil.BUSINESS_TYPE_003)){
+ //直接调用竞拍
+ result = auctionService.initProjectAuction(ebpProjectId,purpImplementSendVO);
+ }else{
+
+ //校验数据
+ checkPurpImplementSendVO(purpImplementSendVO);
+ //初始化委托单信息
+ ProjectEntrustVO projectEntrustVO = assembleProjectEntrust(purpImplementSendVO);
+ if(isUpdate){
+ result = updateProject(projectEntrustVO);
+ }else{
+ result = saveProject(projectEntrustVO);
+ }
+ }
+ }
+ return result;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean testProjectEntrust(PurpImplementSendVO purpImplementSendVO) {
+
+ baseOperLogService.addLog(METHOD,JsonUtils.objectToJson(purpImplementSendVO),DESCRIPTION,cacheUserService.getCacheUser(),"",true);
+
+ boolean result;
+
+ if(null == purpImplementSendVO || null == purpImplementSendVO.getPurpSuperVo()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_PURP_SUPER_VO_EMPTY.throwException();
+ }
+
+ //竞拍
+ if(StringUtils.equals(purpImplementSendVO.getPurpSuperVo().getBusinessType(),EbpProjectCommonUtil.BUSINESS_TYPE_003)){
+ //直接调用竞拍
+ result = auctionService.initProjectAuction(purpImplementSendVO);
+ }else{
+
+ //校验数据
+ checkPurpImplementSendVO(purpImplementSendVO);
+ //初始化委托单信息
+ ProjectEntrustVO projectEntrust = assembleProjectEntrust(purpImplementSendVO);
+ //插入数据
+ result = saveProject(projectEntrust);
+ }
+ return result;
+ }
+
+
+ private ProjectEntrustVO assembleProjectEntrust(PurpImplementSendVO purpImplementSendVO){
+
+ PurpBaseInfoVO purpBaseInfoVO = purpImplementSendVO.getPurpBaseInfoVoList().get(0);
+
+ ProjectEntrustVO result = new ProjectEntrustVO();
+ //编号
+ result.setId(PropertyUtils.getSnowflakeId());
+ //状态
+ result.setStatus(ProjectCommonUtil.ENTRUS_STATUS_1);
+ //项目名称
+ result.setProjectName(purpImplementSendVO.getPurpImplementName());
+ //实施项目编号
+ result.setProjectNumber(purpImplementSendVO.getPurpImplementNo());
+ //对应采购平台的采购方案id(项目实施ID)
+ result.setProcurementPlanId(purpImplementSendVO.getId());
+ //起草人
+ result.setDraftUser(purpImplementSendVO.getMakerCode());
+ //起草时间
+ result.setDraftTime(purpImplementSendVO.getLastUpdateTime());
+ //采购人
+ result.setPurchaser(purpBaseInfoVO.getOrganName());
+ //委托部门
+ result.setEntrustDepartment(purpBaseInfoVO.getProcImplDeptCode());
+ //委托部门名称
+ result.setEntrustDepartmentName(purpBaseInfoVO.getProcImplDept());
+ //代理公司
+ result.setAgencyCompany(purpImplementSendVO.getPurpSuperVo().getAgencyCompCode());
+ //代理公司名称
+ result.setAgencyCompanyName(purpImplementSendVO.getPurpSuperVo().getAgencyComp());
+ //采购类型
+ result.setProcurementType(EbpProjectCommonUtil.PROCUREMENT_TYPE_MAP.get(purpBaseInfoVO.getProjBaseInfoVO().getPurcMode()));
+ //组织方式
+ result.setOrganization(EbpProjectCommonUtil.ORGANIZATIONAL_MAP.get(purpImplementSendVO.getPurpSuperVo().getOrganizationalForm()));
+ //采购方式
+ result.setProcurementMode(getProcurementMode(purpBaseInfoVO.getProjBaseInfoVO()));
+ //采购经理
+ result.setPurchasingManager(purpBaseInfoVO.getUndertakerCode());
+ result.setPurchasingManagerName(purpBaseInfoVO.getUndertaker());
+ result.setPurchasingManagerPhone(purpBaseInfoVO.getTelNo());
+
+ if(StringUtils.equals(ProjectCommonUtil.ORGANIZATION_2,result.getOrganization())){
+ result.setProjectManager(purpBaseInfoVO.getUndertakerCode());
+ result.setProjectManagerName(purpBaseInfoVO.getUndertaker());
+ result.setProjectManagerPhone(purpBaseInfoVO.getTelNo());
+ }
+
+ ProjectEntrustExpand expand = new ProjectEntrustExpand();
+ expand.setEntrustId(result.getId());
+ expand.setPurpImplementSendVO(purpImplementSendVO);
+ result.setProjectEntrustExpand(expand);
+ return result;
+
+ }
+
+ /**
+ * 初始化项目相关信息
+ * @param projectEntrustVO 项目所有信息
+ * @return 返回结果
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public boolean saveProject(ProjectEntrustVO projectEntrustVO){
+
+ boolean result = this.save(BeanUtil.toBean(projectEntrustVO,ProjectEntrust.class));
+
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_SAVE.customValid(!result);
+
+ result = assistInitProject(projectEntrustVO);
+
+ if(StringUtils.equals(projectEntrustVO.getOrganization(),ProjectCommonUtil.ORGANIZATION_2)){
+
+ projectRecordService.initProjectByIndependentProcurement(projectEntrustVO);
+ }
+
+ return result;
+ }
+
+ /**
+ * 初始化项目相关信息
+ * @param projectEntrustVO 项目所有信息
+ * @return 返回结果
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public boolean updateProject(ProjectEntrustVO projectEntrustVO){
+
+ boolean result = this.updateById(projectEntrustVO);
+
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_UPDATE.customValid(!result);
+
+ entrustExpandService.remove(new QueryWrapper().eq("entrust_id",projectEntrustVO.getId()));
+
+ result = assistInitProject(projectEntrustVO);
+
+ return result;
+ }
+
+ /**
+ * 出始化项目辅助相关信息
+ * @param projectEntrustVO 插入信息
+ * @return 返回结果
+ */
+ private boolean assistInitProject(ProjectEntrustVO projectEntrustVO) {
+ boolean result;
+ if(null == projectEntrustVO.getProjectEntrustExpand()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_RECORD_NOT_FIND.throwException();
+ }
+
+ result = entrustExpandService.save(projectEntrustVO.getProjectEntrustExpand());
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_RECORD_NOT_SAVE.customValid(!result);
+
+ return result;
+ }
+
+ /**
+ * 修改相应信息(分派、撤回分派、同意、拒绝、退回)
+ * @param projectEntrust 查询
+ * @param newStatus 修改成新的状态
+ * @return 返回结果
+ */
+ private boolean updateStatus(ProjectEntrust projectEntrust,Integer newStatus){
+ UpdateWrapper entrustUpdateWrapper = new UpdateWrapper<>();
+ entrustUpdateWrapper.eq("id",projectEntrust.getId());
+ entrustUpdateWrapper.eq("status", projectEntrust.getStatus());
+
+ entrustUpdateWrapper.set("status",newStatus);
+ entrustUpdateWrapper.set("project_manager",projectEntrust.getProjectManager());
+ entrustUpdateWrapper.set("project_manager_name",projectEntrust.getProjectManagerName());
+ entrustUpdateWrapper.set("project_manager_phone",projectEntrust.getProjectManagerPhone());
+
+ boolean result = this.update(entrustUpdateWrapper);
+
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_UPDATE.customValid(!result);
+
+ return result;
+ }
+
+ /**
+ * 转换采购方式
+ * @param projBaseInfoVO 采购方案信息
+ * @return 返回结果
+ */
+ private String getProcurementMode(ProjBaseInfoVO projBaseInfoVO){
+
+ String procurementMode;
+
+ if(StringUtils.equals(EbpProjectCommonUtil.BUSINESS_TYPE_002,projBaseInfoVO.getBusinessType())){
+ procurementMode = ProjectCommonUtil.PROCUREMENT_MODE_4;
+ }else if(StringUtils.equals(EbpProjectCommonUtil.BUSINESS_TYPE_003,projBaseInfoVO.getBusinessType())){
+ procurementMode = ProjectCommonUtil.PROCUREMENT_MODE_8;
+ }else{
+ procurementMode = EbpProjectCommonUtil.PROCUREMENT_MODE_MAP.get(projBaseInfoVO.getPurcMode());
+ }
+
+ return procurementMode;
+ }
+
+ /**
+ * 校验推送信息是否符合
+ * @param implementSendVO 采购委托推送数据
+ */
+ private void checkPurpImplementSendVO(PurpImplementSendVO implementSendVO){
+
+ //实施项目
+ if (StringUtils.isEmpty(implementSendVO.getPurpImplementName())){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_PURP_IMPLEMENT_NAME_EMPTY.throwException();
+ }
+
+ //实施项目ID
+ if(StringUtils.isEmpty(implementSendVO.getId())){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_PURP_IMPLEMENT_ID_EMPTY.throwException();
+ }
+
+
+ PurpSuperVO purpSuperVo = implementSendVO.getPurpSuperVo();
+ if(null == purpSuperVo){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_PURP_SUPER_VO_EMPTY.throwException();
+ }
+
+ //业务类型
+ if(StringUtils.isEmpty(purpSuperVo.getBusinessType())){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_BUSINESS_TYPE_EMPTY.throwException();
+ }
+
+ //组织形式
+ if(StringUtils.isEmpty(purpSuperVo.getOrganizationalForm())){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_ORGANIZATIONAL_FORM_EMPTY.throwException();
+ }
+
+ List purpBaseInfoVOList = implementSendVO.getPurpBaseInfoVoList();
+ if(null == purpBaseInfoVOList || purpBaseInfoVOList.size() <= 0){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_PURP_BASE_INFO_VO_EMPTY.throwException();
+ }
+
+ PurpBaseInfoVO purpBaseInfo = purpBaseInfoVOList.get(0);
+
+ //机构名称
+ if(StringUtils.isEmpty(purpBaseInfo.getOrganName())){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_ORGAN_NAME_EMPTY.throwException();
+ }
+ //所属省分
+ if(StringUtils.isEmpty((purpBaseInfo.getSuborProvince()))){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_SUBOR_PROVINCE_EMPTY.throwException();
+ }
+
+ //资金来源 寻源业务
+ if(StringUtils.equals(EbpProjectCommonUtil.BUSINESS_TYPE_001,purpSuperVo.getBusinessType())&&
+ StringUtils.isEmpty((purpBaseInfo.getProjBaseInfoVO().getFundOrign()))){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_FUND_ORIGN_EMPTY.throwException();
+ }
+
+ //标的类型
+ if(StringUtils.isEmpty(purpBaseInfo.getProjBaseInfoVO().getTargetType())){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_TARGET_TYPE_EMPTY.throwException();
+ }
+
+ //采购方式 寻源业务
+ if(StringUtils.equals(EbpProjectCommonUtil.BUSINESS_TYPE_001,purpSuperVo.getBusinessType())&&
+ StringUtils.isEmpty((purpBaseInfo.getProjBaseInfoVO().getPurcMode()))){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_TARGET_TYPE_EMPTY.throwException();
+ }
+
+ }
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/controller/ProjectExceptionController.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/controller/ProjectExceptionController.java
new file mode 100644
index 0000000..1df2076
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/controller/ProjectExceptionController.java
@@ -0,0 +1,121 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
+import com.chinaunicom.mall.ebtp.common.util.PropertyUtils;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectException;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectExceptionVO;
+import com.chinaunicom.mall.ebtp.project.projectexception.service.IProjectExceptionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+/**
+ * 项目异常处理信息
+ * @author daixc
+ * @date 2020/11/05
+ */
+@RestController
+@Api(tags = "项目异常处理信息")
+@RequestMapping("/v1/projectException")
+public class ProjectExceptionController{
+
+ @Resource
+ private IProjectExceptionService projectExceptionService;
+
+ /**
+ * 插入新数据
+ *
+ * @param projectExceptionVO 异常信息
+ *
+ * @return
+ */
+ @ApiOperation("插入新数据")
+ @PostMapping("")
+ public BaseResponse insert(@ApiParam(value = "对象数据", required = true) @RequestBody @Valid ProjectExceptionVO projectExceptionVO){
+
+ boolean save = projectExceptionService.insert(projectExceptionVO);
+
+ return BaseResponse.success(save);
+ }
+
+ /**
+ * 修改数据
+ *
+ * @param projectException 异常信息
+ *
+ * @return
+ */
+ @ApiOperation("修改数据")
+ @PutMapping("")
+ public BaseResponse update(@ApiParam(value = "对象数据", required = true) @RequestBody ProjectException projectException){
+
+
+ return BaseResponse.success(projectExceptionService.updateById(projectException));
+ }
+
+ /**
+ * 查询数据
+ *
+ * @param id 异常信息ID
+ *
+ * @return
+ */
+ @ApiOperation("查询数据")
+ @GetMapping("/{id}")
+ public BaseResponse get(@ApiParam(value = "主键id", required = true) @PathVariable String id){
+
+ ProjectException projectException = projectExceptionService.getById(id);
+
+ return BaseResponse.success(projectException);
+ }
+
+ /**
+ * 查询分页数据
+ *
+ * @param projectExceptionVO 分页信息
+ *
+ * @return 返回结果
+ */
+ @ApiOperation("查询分页数据")
+ @PostMapping("/getPage")
+ public BaseResponse> getPage(@ApiParam(value = "对象数据", required = true) @RequestBody ProjectExceptionVO projectExceptionVO){
+
+ return BaseResponse.success(projectExceptionService.getPage(projectExceptionVO));
+ }
+
+ /**
+ * 移除异常信息
+ *
+ * @param id 异常信息ID
+ *
+ * @return
+ */
+ @ApiOperation("移除异常信息")
+ @DeleteMapping("/{id}")
+ public BaseResponse delete(@ApiParam(value = "主键id", required = true) @PathVariable Long id){
+
+ return BaseResponse.success(projectExceptionService.delete(id));
+ }
+
+ /**
+ * 项目异常生效
+ *
+ * @param id 异常信息ID
+ *
+ * @return
+ */
+ @ApiOperation("项目异常生效")
+ @PutMapping("/{id}")
+ public BaseResponse updateState(@ApiParam(value = "主键id", required = true) @PathVariable Long id){
+
+ return BaseResponse.success(projectExceptionService.updateState(id));
+ }
+
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/controller/ProjectSectionExceptionController.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/controller/ProjectSectionExceptionController.java
new file mode 100644
index 0000000..ed44d78
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/controller/ProjectSectionExceptionController.java
@@ -0,0 +1,69 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.controller;
+
+
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectSectionException;
+import com.chinaunicom.mall.ebtp.project.projectexception.service.IProjectSectionExceptionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+@RestController
+@Api(tags = "项目标段异常信息")
+@RequestMapping("/v1/projectsectionException")
+public class ProjectSectionExceptionController{
+
+ @Resource
+ private IProjectSectionExceptionService projectSectionExceptionService;
+
+ /**
+ * 插入新数据
+ *
+ * @param projectSectionException
+ *
+ * @return
+ */
+ @ApiOperation("插入新数据")
+ @PostMapping("")
+ public BaseResponse insert(@ApiParam(value = "对象数据", required = true) @RequestBody @Valid ProjectSectionException projectSectionException){
+
+ boolean save = projectSectionExceptionService.save(projectSectionException);
+
+ return BaseResponse.success(save);
+ }
+
+ /**
+ * 修改数据
+ *
+ * @param projectSectionException
+ *
+ * @return
+ */
+ @ApiOperation("修改数据")
+ @PutMapping("")
+ public BaseResponse update(@ApiParam(value = "对象数据", required = true) @RequestBody ProjectSectionException projectSectionException){
+
+ return BaseResponse.success(projectSectionExceptionService.updateById(projectSectionException));
+ }
+
+ /**
+ * 查询数据
+ *
+ * @param id
+ *
+ * @return
+ */
+ @ApiOperation("查询数据")
+ @GetMapping("/{id}")
+ public BaseResponse get(@ApiParam(value = "主键id", required = true) @PathVariable String id){
+
+ ProjectSectionException projectSectionException = projectSectionExceptionService.getById(id);
+
+ return BaseResponse.success(projectSectionException);
+ }
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/ProjectExceptionMapper.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/ProjectExceptionMapper.java
new file mode 100644
index 0000000..770fd73
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/ProjectExceptionMapper.java
@@ -0,0 +1,32 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.dao;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chinaunicom.mall.ebtp.common.base.dao.IBaseMapper;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectException;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectExceptionVO;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 项目异常mapper
+ * @author daixc
+ * @date 2020/11/06
+ */
+public interface ProjectExceptionMapper extends IBaseMapper {
+
+ /**
+ * 项目异常分页
+ * @param page 分页信息
+ * @param projectExceptionVO 异常查询条件
+ * @return 返回结果
+ */
+ Page getProjectExceptionPage(IPage page, @Param("vo") ProjectExceptionVO projectExceptionVO);
+
+ /**
+ * 物理删除信息
+ * @param id 项目异常信息ID
+ * @return
+ */
+ boolean deletePhysical(@Param(value = "id") Long id);
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/ProjectSectionExceptionMapper.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/ProjectSectionExceptionMapper.java
new file mode 100644
index 0000000..92c2d4b
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/ProjectSectionExceptionMapper.java
@@ -0,0 +1,17 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.dao;
+
+
+import com.chinaunicom.mall.ebtp.common.base.dao.IBaseMapper;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectSectionException;
+import org.apache.ibatis.annotations.Param;
+
+public interface ProjectSectionExceptionMapper extends IBaseMapper {
+
+
+ /**
+ * 物理删除信息
+ * @param exceptionId 异常信息ID
+ * @return 返回结果
+ */
+ int deleteByExceptionId(@Param(value = "exceptionId") Long exceptionId);
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/mapper/ProjectExceptionMapper.xml b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/mapper/ProjectExceptionMapper.xml
new file mode 100644
index 0000000..75526f3
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/mapper/ProjectExceptionMapper.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ update biz_project_exception
+ set
+ delete_flag="deleted"
+ where ID=#{id}
+
+
+
+
+
+
+ delete from biz_project_exception where id = #{id}
+
+
\ No newline at end of file
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/mapper/ProjectSectionExceptionMapper.xml b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/mapper/ProjectSectionExceptionMapper.xml
new file mode 100644
index 0000000..700e5ce
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/dao/mapper/ProjectSectionExceptionMapper.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ update biz_project_section_exception
+ set
+ delete_flag="deleted"
+ where ID=#{id}
+
+
+
+
+ delete from biz_project_section_exception where exception_id = #{exceptionId}
+
+
\ No newline at end of file
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectException.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectException.java
new file mode 100644
index 0000000..dbde6a0
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectException.java
@@ -0,0 +1,98 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity;
+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;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 实体类 BizProjectException
+ *
+ * @author daixc
+ * @date 2020/11/05
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("项目标段异常处理")
+@TableName(value = "biz_project_exception", autoResultMap = true)
+public class ProjectException extends BaseEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @ApiModelProperty(value = "编号")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @NotNull(message = "项目ID不能为空")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long projectId;
+
+ /**
+ * 标段ID
+ */
+ @ApiModelProperty(value = "标段ID")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long sectionId;
+
+ /**
+ * 项目异常类别
+ */
+ @ApiModelProperty(value = "项目异常类别")
+ private String exceptionType;
+
+ /**
+ * 项目失败描述
+ */
+ @ApiModelProperty(value = "项目失败描述")
+ private String exceptionDesc;
+
+ /**
+ * 处理意见(1 项目终止 2 再次发起采购)
+ */
+ @ApiModelProperty(value = "处理意见(1 项目终止 2 再次发起采购)")
+ @NotEmpty(message = "处理意见不能为空")
+ private String handleType;
+
+ /**
+ * 处理情况说明
+ */
+ @ApiModelProperty(value = "处理情况说明")
+ @Length(max = 500, message = "处理情况说明长度不能大于500字符")
+ private String exceptionComments;
+
+ /**
+ * 附件ID
+ */
+ @ApiModelProperty(value = "附件ID")
+ private String fileId;
+
+ /**
+ * 状态 0:草稿;1:已生效;2:已删除
+ */
+ @ApiModelProperty(value = "状态 0:草稿;1:已生效;2:已删除")
+ private Integer status;
+
+ /**
+ * 是否发送公告 0 是 1 否
+ */
+ @ApiModelProperty(value = "是否发送公告 0 是 1 否")
+ private Integer isSendMessage;
+
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectExceptionVO.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectExceptionVO.java
new file mode 100644
index 0000000..79c3064
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectExceptionVO.java
@@ -0,0 +1,46 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 项目异常信息VO
+ * @author daixc
+ * @date 2020/11/05
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("项目异常信息VO")
+@TableName(autoResultMap = true)
+public class ProjectExceptionVO extends ProjectException implements Serializable {
+
+
+ /**
+ * 分页数据
+ */
+ @ApiModelProperty(value = "分页对象信息")
+ private BasePageRequest basePageRequest;
+
+
+ /**
+ * 采购包名称
+ */
+ @ApiModelProperty(value = "采购包名称")
+ private String sectionName;
+
+ /**
+ * 采购包ID数组
+ */
+ @ApiModelProperty(value = "采购包ID数组")
+ private String[] sectionArray;
+
+ @ApiModelProperty(value = "异常失败公告状态 0 未编辑 1 已编辑 2 已提交 3 已审批 4 已拒绝 5 已发布 6 发布失败 7 无需发送公告 9 异常")
+ private Integer sendMessageStatus;
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectSectionException.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectSectionException.java
new file mode 100644
index 0000000..5df7d66
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/entity/ProjectSectionException.java
@@ -0,0 +1,51 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity;
+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;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+
+/**
+ * 实体类 BizProjectSectionException
+ *
+ * @author daixc
+ * @date 2020/11/06
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel
+@TableName(value = "biz_project_section_exception", autoResultMap = true)
+public class ProjectSectionException extends BaseEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @ApiModelProperty(value = "编号")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 标段ID
+ */
+ @ApiModelProperty(value = "标段ID")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long sectionId;
+
+ /**
+ * 异常处理ID
+ */
+ @ApiModelProperty(value = "异常处理ID")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long exceptionId;
+
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/IProjectExceptionService.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/IProjectExceptionService.java
new file mode 100644
index 0000000..75f2be0
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/IProjectExceptionService.java
@@ -0,0 +1,51 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectException;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectExceptionVO;
+
+/**
+ * 对数据表 biz_project_exception 操作的 service
+ * @author daixc
+ * @date 2020/11/06
+ */
+public interface IProjectExceptionService extends IBaseService{
+
+ /**
+ * 分页信息查询
+ * @param projectExceptionVO 项目分页信息
+ * @return 返回结果
+ */
+ IPage getPage(ProjectExceptionVO projectExceptionVO);
+
+ /**
+ * 新增信息
+ * @param projectExceptionVO 项目异常信息
+ * @return 返回结果
+ */
+ boolean insert(ProjectExceptionVO projectExceptionVO);
+
+ /**
+ * 修改项目异常信息
+ * @param projectExceptionVO 项目异常信息
+ * @return 返回结果
+ */
+ boolean update(ProjectExceptionVO projectExceptionVO);
+
+ /**
+ * 移除异常信息
+ * @param id 异常ID
+ * @return 返回结果
+ */
+ boolean delete(Long id);
+
+
+ /**
+ * 项目异常信息生效
+ * @param id 异常ID
+ * @return 返回结果
+ */
+ boolean updateState(Long id);
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/IProjectSectionExceptionService.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/IProjectSectionExceptionService.java
new file mode 100644
index 0000000..9ad03dd
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/IProjectSectionExceptionService.java
@@ -0,0 +1,21 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.service;
+
+
+import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectSectionException;
+
+/**
+ * 对数据表 biz_project_section_exception 操作的 service
+ * @author Auto create
+ *
+ */
+public interface IProjectSectionExceptionService extends IBaseService{
+
+
+ /**
+ * 物理删除信息
+ * @param exceptionId 异常信息ID
+ * @return
+ */
+ boolean deleteByExceptionId(Long exceptionId);
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/impl/ProjectExceptionServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/impl/ProjectExceptionServiceImpl.java
new file mode 100644
index 0000000..af3942c
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/impl/ProjectExceptionServiceImpl.java
@@ -0,0 +1,484 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
+import com.chinaunicom.mall.ebtp.common.base.enums.ResponseEnum;
+import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
+import com.chinaunicom.mall.ebtp.common.constant.CommonConstants;
+import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum;
+import com.chinaunicom.mall.ebtp.common.util.JsonUtils;
+import com.chinaunicom.mall.ebtp.common.util.PropertyUtils;
+import com.chinaunicom.mall.ebtp.project.common.ProjectCommonUtil;
+import com.chinaunicom.mall.ebtp.project.common.ProjectExceptionEnum;
+import com.chinaunicom.mall.ebtp.project.dict.entity.DictProject;
+import com.chinaunicom.mall.ebtp.project.dict.service.IDictProjectService;
+import com.chinaunicom.mall.ebtp.project.feign.EbtpMallBidApi;
+import com.chinaunicom.mall.ebtp.project.feign.MallPurpApi;
+import com.chinaunicom.mall.ebtp.project.feign.entity.AnnoVO;
+import com.chinaunicom.mall.ebtp.project.projectexception.dao.ProjectExceptionMapper;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectException;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectExceptionVO;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectSectionException;
+import com.chinaunicom.mall.ebtp.project.projectexception.service.IProjectExceptionService;
+import com.chinaunicom.mall.ebtp.project.projectexception.service.IProjectSectionExceptionService;
+import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecord;
+import com.chinaunicom.mall.ebtp.project.projectrecord.service.IProjectRecordService;
+import com.chinaunicom.mall.ebtp.project.projectsection.entity.ProjectSection;
+import com.chinaunicom.mall.ebtp.project.projectsection.entity.ProjectSectionVO;
+import com.chinaunicom.mall.ebtp.project.projectsection.service.IProjectSectionService;
+import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterial;
+import com.chinaunicom.mall.ebtp.project.sectionmaterial.service.ISectionMaterialService;
+import com.chinaunicom.mall.ebtp.project.sectionsupplier.entity.SectionSupplier;
+import com.chinaunicom.mall.ebtp.project.sectionsupplier.entity.SectionSupplierVO;
+import com.chinaunicom.mall.ebtp.project.sectionsupplier.service.ISectionSupplierService;
+import io.seata.spring.annotation.GlobalTransactional;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 对数据表 biz_project_exception 操作的 serviceImpl
+ * 项目异常信息service实现层
+ * @author daixc
+ * @date 2020/11/06
+ *
+ */
+@Service
+public class ProjectExceptionServiceImpl extends BaseServiceImpl implements IProjectExceptionService {
+
+ @Resource
+ private ProjectExceptionMapper exceptionMapper;
+
+ @Resource
+ private IProjectRecordService projectRecordService;
+
+ @Resource
+ private IProjectSectionService projectSectionService;
+
+ @Resource
+ private ISectionSupplierService sectionSupplierService;
+
+ @Resource
+ private ISectionMaterialService sectionMaterialService;
+
+ @Resource
+ private IProjectSectionExceptionService sectionExceptionService;
+
+ @Resource
+ private EbtpMallBidApi ebtpMallBidApi;
+
+ @Resource
+ private MallPurpApi mallPurpApi;
+
+ @Resource
+ private IDictProjectService projectService;
+
+
+ @Override
+ public IPage getPage(ProjectExceptionVO projectExceptionVO) {
+
+ if(null == projectExceptionVO.getBasePageRequest()){
+ projectExceptionVO.setBasePageRequest(new BasePageRequest());
+ }
+
+ IPage page = new Page<>(projectExceptionVO.getBasePageRequest().getPageNo(), projectExceptionVO.getBasePageRequest().getPageSize());
+
+ page = exceptionMapper.getProjectExceptionPage(page,projectExceptionVO);
+
+ page.setRecords(getSendMessageStatus(page.getRecords()));
+
+ return page;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean insert(ProjectExceptionVO projectExceptionVO) {
+
+ projectExceptionVO.setId(PropertyUtils.getSnowflakeId());
+ projectExceptionVO.setStatus(ProjectCommonUtil.SECTION_EXCEPTION_STATE_0);
+
+ boolean result = this.save(projectExceptionVO);
+
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_SAVE.customValid(!result);
+
+ result = saveSectionList(projectExceptionVO);
+
+ return result;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean update(ProjectExceptionVO projectExceptionVO){
+
+ //修改校验
+ updateCheck(this.getById(projectExceptionVO.getId()));
+
+ boolean result = this.updateById(projectExceptionVO);
+
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_UPDATE.customValid(!result);
+
+ sectionExceptionService.deleteByExceptionId(projectExceptionVO.getId());
+
+ saveSectionList(projectExceptionVO);
+
+ return result;
+ }
+
+ /**
+ * 移除异常信息
+ * @param id 异常ID
+ * @return 返回结果
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean delete(Long id) {
+
+ boolean result = this.remove(new QueryWrapper().eq("id",id).eq("status",ProjectCommonUtil.SECTION_EXCEPTION_STATE_0));
+
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_DELETE.customValid(!result);
+
+ result = sectionExceptionService.remove(new QueryWrapper().eq("exception_id",id));
+
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_EXCEPTION_DELETE.customValid(!result);
+
+ return result;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ @GlobalTransactional
+ public boolean updateState(Long id) {
+ ProjectException projectException = this.getById(id);
+
+ /*检验信息*/
+ updateCheck(projectException);
+
+ //提交校验失败公告状态信息
+ submitCheckSendMessageStatus(projectException);
+
+ /*查询异常标段信息*/
+ QueryWrapper sectionExceptionQueryWrapper = new QueryWrapper()
+ .eq("exception_id", projectException.getId());
+
+ List sectionExceptionList = sectionExceptionService.list(sectionExceptionQueryWrapper);
+
+ //异常标段信息为空报异常
+ if(sectionExceptionList.size() <= 0){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_UPDATE_ERROR.throwException();
+ }
+
+ /*查询标段信息*/
+ ProjectSectionVO projectSectionVO = new ProjectSectionVO();
+ projectSectionVO.setProjectId(projectException.getProjectId());
+ List sectionList = projectSectionService.getList(projectSectionVO);
+
+
+ //修改项目异常信息状态
+ ProjectException updateProjectException = new ProjectException();
+ updateProjectException.setId(projectException.getId());
+ updateProjectException.setStatus(ProjectCommonUtil.SECTION_EXCEPTION_STATE_1);
+ boolean result = this.updateById(updateProjectException);
+
+
+ //修改标段信息状态
+ List sectionExceptionIds = sectionExceptionList.stream().map(ProjectSectionException::getSectionId).collect(Collectors.toList());
+ UpdateWrapper sectionUpdateWrapper = new UpdateWrapper<>();
+ sectionUpdateWrapper.in("id",sectionExceptionIds);
+ sectionUpdateWrapper.set("status",ProjectCommonUtil.SECTION_STATUS_9);
+ projectSectionService.update(sectionUpdateWrapper);
+
+ /*是否全部废止状态*/
+ int isAllAbolish = sectionList.stream().filter(n -> n.getStatus() != ProjectCommonUtil.SECTION_STATUS_9).collect(Collectors.toList()).size();
+
+ /*如果项目标段全部废止 修改项目建档信息为废止*/
+ if(isAllAbolish <= 0){
+ ProjectRecord projectRecord = new ProjectRecord();
+ projectRecord.setStatus(ProjectCommonUtil.PROJECT_STATUS_9);
+ projectRecord.setId(projectException.getProjectId());
+ projectRecordService.updateById(projectRecord);
+ }
+ sectionList = sectionList.stream().filter(n -> sectionExceptionIds.contains(n.getId())).collect(Collectors.toList());
+ /*项目终止 通知采购平台接 */
+ if(StringUtils.equals(ProjectCommonUtil.SECTION_EXCEPTION_HANDLE_TYPE_1,projectException.getHandleType())){
+ //发送接口
+ projInvitationFail(projectException,sectionList);
+ }else{ //项目再次购买
+ launchAgainProject(projectException.getProjectId(), sectionList);
+ }
+ //通知招标服务停止
+ abnormal(sectionExceptionIds);
+
+ return result;
+ }
+
+
+ /**
+ * 再次发起项目
+ * @param projectId 项目ID
+ * @param sectionList 项目标段
+ */
+ private void launchAgainProject(Long projectId,List sectionList) {
+
+ //查询项目信息
+ ProjectRecord projectRecord = projectRecordService.getById(projectId);
+
+ //重新给项目赋值
+ //新项目copy项目ID
+ projectRecord.setParentProjectId(projectRecord.getId());
+ //项目主键
+ projectRecord.setId(PropertyUtils.getSnowflakeId());
+ //项目流水号
+ projectRecord.setProjectBizNum(PropertyUtils.getSnowflakeId().toString());
+ //项目状态
+ projectRecord.setStatus(ProjectCommonUtil.PROJECT_STATUS_2);
+
+ //转换标包ID方便物资和供应商查询
+ List sectionIds = sectionList.stream().map(ProjectSection::getId).collect(Collectors.toList());
+
+ //查询供应商信息
+ QueryWrapper supplierQueryWrapper = new QueryWrapper<>();
+ supplierQueryWrapper.in("section_id",sectionIds);
+ List sectionSupplierList = sectionSupplierService.list(supplierQueryWrapper);
+ //转换成map形式方便处理数据
+ Map> sectionSupplierMap = sectionSupplierList.stream().collect(Collectors.groupingBy(SectionSupplier::getSectionId));
+
+ //查询物资信息
+ QueryWrapper meMaterialQueryWrapper = new QueryWrapper<>();
+ meMaterialQueryWrapper.in("section_id",sectionIds);
+ List sectionMaterialList = sectionMaterialService.list(meMaterialQueryWrapper);
+ //转换成map形式方便处理数据
+ Map> sectionMaterialMap = sectionMaterialList.stream().collect(Collectors.groupingBy(SectionMaterial::getSectionId));
+
+ //最终要插入的数据结果
+ List sectionSupplierAddList = new ArrayList<>();
+ List materialAddList = new ArrayList<>();
+
+ //是否资审预审项目
+ boolean isReviewMethod = projectRecordService.isReviewMethod(projectRecord);
+
+ int sectionOrderNumber = 1;
+ //处理标段和供应商、物资信息
+ for(ProjectSection section : sectionList){
+ section.setParentSectionId(section.getId());
+ section.setId(PropertyUtils.getSnowflakeId());
+ //顺序号
+ section.setBidSectCode(String.valueOf(sectionOrderNumber++));
+ //标段流水号
+ section.setBidSectBizNum(projectRecord.getProjectBizNum()+"/"+section.getBidSectCode());
+ section.setBusinessModule(isReviewMethod ? ProjectCommonUtil.BUSINESS_MODULE_2:ProjectCommonUtil.BUSINESS_MODULE_7);
+ section.setStatus(ProjectCommonUtil.SECTION_STATUS_2);
+
+ //重新赋值新的项目ID和物资ID
+ List supplierList = sectionSupplierMap.get(section.getId());
+ if (null != supplierList && supplierList.size() > 0) {
+ for (SectionSupplier supplier : supplierList) {
+ supplier.setSectionId(section.getId());
+ supplier.setProjectId(projectRecord.getId());
+ }
+ sectionSupplierAddList.addAll(supplierList);
+ }
+
+ //重新赋值新的项目ID和物资ID
+ List materialList = sectionMaterialMap.get(section.getId());
+ if (null != materialList && materialList.size() > 0) {
+ for (SectionMaterial material : materialList) {
+ material.setSectionId(section.getId());
+ material.setProjectId(projectRecord.getId());
+ }
+ materialAddList.addAll(sectionMaterialList);
+ }
+ }
+
+ //插入项目信息
+ projectRecordService.save(projectRecord);
+ //插入标段信息
+ projectSectionService.saveBatch(sectionList);
+
+ //插入供应商信息
+ if (sectionSupplierAddList.size() > 0) {
+ sectionSupplierService.saveBatch(sectionSupplierAddList);
+ }
+
+ //插入物资信息
+ if (materialAddList.size() > 0) {
+ sectionMaterialService.saveBatch(materialAddList);
+ }
+ //通知招标服务邀请函信息
+ callEbtpMallBidApi(projectRecord, sectionSupplierList);
+
+ //出始化标段评审室信息
+ callInitialize(projectId, isReviewMethod);
+ }
+
+
+ /**
+ * 项目异常信息 通知采购系统项目失败
+ * @param projectException 失败信息
+ * @param sectionList 标段信息
+ */
+ private void projInvitationFail(ProjectException projectException,List sectionList){
+
+ //查询项目信息 获取项目实施ID
+ ProjectRecord projectRecord = projectRecordService.getById(projectException.getProjectId());
+ //获取项目方案ID
+ List projIds = sectionList.stream().map(ProjectSection::getProjectPlanId).collect(Collectors.toList());
+ //获取异常原因对应字典的名称解释
+ DictProject dictProject = projectService.getDict(projectException.getExceptionDesc(),ProjectCommonUtil.EXCEPTION_DESC,ProjectCommonUtil.EXCEPTION);
+ //调用接口
+ boolean isSuccess = mallPurpApi.projInvitationFail(projectRecord.getEbpProjectId(),
+ projIds,projectException.getExceptionDesc(),dictProject.getDicName()).isSuccess();
+
+ if(!isSuccess){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_INVITATION_FAIL_ERROR.throwException();
+ }
+ }
+
+ /**
+ * 调用通知服务
+ * 1 异常标段不可以报名 2 如果邀请发送初始化数据
+ * @param projectRecord 项目信息
+ * @param sectionSupplierList 供应商信息
+ */
+ private void callEbtpMallBidApi(ProjectRecord projectRecord,List sectionSupplierList) {
+
+ //是否发邀请函 如果流程发送邀请函 调用招标接口 发送供应商信息
+ boolean isInvitation= projectRecordService.isInvitation(projectRecord);
+
+ if(isInvitation){
+ Integer code = ebtpMallBidApi.entrustInsert(JsonUtils.jsonToList(sectionSupplierList,SectionSupplierVO.class)).getCode();
+ if(code != ResponseEnum.SUCCESS.getCode()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_INIT_SUPPLIER_ERROR.throwException();
+ }
+ }
+ }
+
+ /**
+ * 项目异常调用招标 通知进行修改状态
+ * @param projectSectionIds 标段ID
+ */
+ private void abnormal(List projectSectionIds) {
+ Integer resultCode = ebtpMallBidApi.abnormal(projectSectionIds).getCode();
+
+ if(resultCode != ResponseEnum.SUCCESS.getCode()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_NOT_SECTION.throwException();
+ }
+ }
+
+ /**
+ * 调用流程初始化信息
+ * @param projectId 项目ID
+ * @param isReviewMethod 是否资审预审项目
+ */
+ private void callInitialize(Long projectId, boolean isReviewMethod) {
+ Map sectionMaps = projectSectionService.getFlowList(projectId);
+ projectRecordService.initialize(projectId,isReviewMethod,sectionMaps);
+ }
+
+ /**
+ * 生效或移除之前进行判断项目异常信息以及状态
+ * @param projectException 项目异常信息
+ */
+ private void updateCheck(ProjectException projectException) {
+
+ /*
+ * 如果异常状态为空 返回错误信息
+ */
+ if(null == projectException){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_NOT_FIND.throwException();
+ }else{
+ /*
+ * 项目异常状态为空 或者不为草稿状态 返回错误信息
+ */
+ if(null == projectException.getStatus() ||
+ ProjectCommonUtil.SECTION_EXCEPTION_STATE_0 != projectException.getStatus()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_NOT_STATE.throwException();
+ }
+ }
+ }
+
+ /**
+ * 批量插入异常标段信息
+ * @param projectExceptionVO 异常信息
+ * @return 返回结果
+ */
+ private boolean saveSectionList(ProjectExceptionVO projectExceptionVO) {
+
+ List sectionExceptionList = new ArrayList<>();
+ for (int i = 0; i < projectExceptionVO.getSectionArray().length; i++) {
+
+ ProjectSectionException sectionException = new ProjectSectionException();
+ sectionException.setId(PropertyUtils.getSnowflakeId());
+ sectionException.setExceptionId(projectExceptionVO.getId());
+ sectionException.setSectionId(Long.parseLong(projectExceptionVO.getSectionArray()[i]));
+
+ sectionExceptionList.add(sectionException);
+ }
+
+ return sectionExceptionService.saveBatch(sectionExceptionList);
+ }
+
+ /**
+ * 获取失败公告信息
+ * @param voList 获取失败公告的集合信息
+ * @return 返回结果
+ */
+ private List getSendMessageStatus(List voList) {
+
+ List exceptionIds = voList.stream().filter(n -> ProjectCommonUtil.IS_SEND_MESSAGE_0 == n.getIsSendMessage())
+ .map(ProjectExceptionVO::getId).map(n -> String.valueOf(n)).collect(Collectors.toList());
+
+ BaseResponse> bidResponse = ebtpMallBidApi.getAnnoStatus(exceptionIds);
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_NOT_SECTION.customValidName(bidResponse.getMessage(), !bidResponse.isSuccess());
+
+ Map> resultMap = bidResponse.getData().stream().collect(Collectors.groupingBy(AnnoVO::getCsAnnoId));
+
+ for(ProjectExceptionVO vo : voList){
+
+ if(ProjectCommonUtil.IS_SEND_MESSAGE_0 == vo.getIsSendMessage()){
+ List annoVOList = resultMap.get(vo.getId().toString());
+ if(null != annoVOList && annoVOList.size() > 0){
+ vo.setSendMessageStatus(annoVOList.get(0).getStatus());
+ }else{
+ vo.setSendMessageStatus(ProjectCommonUtil.SEND_MESSAGE_STATUS_0);
+ }
+ }else{
+ vo.setSendMessageStatus(ProjectCommonUtil.SEND_MESSAGE_STATUS_7);
+ }
+ }
+
+ return voList;
+ }
+
+ /**
+ * 提交校验失败公告状态信息
+ * @param projectException 需要校验的异常信息
+ */
+ private void submitCheckSendMessageStatus(ProjectException projectException){
+
+ if(ProjectCommonUtil.IS_SEND_MESSAGE_0 == projectException.getIsSendMessage()){
+ List exceptionIds = new ArrayList<>();
+ exceptionIds.add(String.valueOf(projectException.getId()));
+ BaseResponse> bidResponse = ebtpMallBidApi.getAnnoStatus(exceptionIds);
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_NOT_SECTION.customValidName(bidResponse.getMessage(), !bidResponse.isSuccess());
+ List annoVOList = bidResponse.getData();
+ if(null != annoVOList && annoVOList.size() > 0){
+ if(ProjectCommonUtil.SEND_MESSAGE_STATUS_5 == annoVOList.get(0).getStatus()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_STATUS_ERROR.throwException();
+ }
+ }else{
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_EXCEPTION_STATUS_ERROR.throwException();
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/impl/ProjectSectionExceptionServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/impl/ProjectSectionExceptionServiceImpl.java
new file mode 100644
index 0000000..8ac3883
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectexception/service/impl/ProjectSectionExceptionServiceImpl.java
@@ -0,0 +1,27 @@
+package com.chinaunicom.mall.ebtp.project.projectexception.service.impl;
+
+
+import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
+import com.chinaunicom.mall.ebtp.project.projectexception.dao.ProjectSectionExceptionMapper;
+import com.chinaunicom.mall.ebtp.project.projectexception.entity.ProjectSectionException;
+import com.chinaunicom.mall.ebtp.project.projectexception.service.IProjectSectionExceptionService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 对数据表 biz_project_section_exception 操作的 serviceImpl
+ * @author Auto create
+ *
+ */
+@Service
+public class ProjectSectionExceptionServiceImpl extends BaseServiceImpl implements IProjectSectionExceptionService {
+
+ @Resource
+ private ProjectSectionExceptionMapper exceptionMapper;
+
+ @Override
+ public boolean deleteByExceptionId(Long exceptionId) {
+ return exceptionMapper.deleteByExceptionId(exceptionId) > 0;
+ }
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/controller/ProjectRecordController.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/controller/ProjectRecordController.java
new file mode 100644
index 0000000..d74b4e4
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/controller/ProjectRecordController.java
@@ -0,0 +1,166 @@
+package com.chinaunicom.mall.ebtp.project.projectrecord.controller;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
+import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecord;
+import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecordVO;
+import com.chinaunicom.mall.ebtp.project.projectrecord.service.IProjectRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 项目建档信息 controller
+ * 项目建档信息操作控制层
+ *
+ * @author daixc
+ * @date 2020/10/26
+ */
+@RestController
+@Api(tags = "项目建档信息")
+@RequestMapping("/v1/projectRecord")
+public class ProjectRecordController{
+
+ @Resource
+ private IProjectRecordService projectRecordService;
+
+ /**
+ * 插入新数据
+ *
+ * @param projectRecord 项目建档信息
+ *
+ * @return
+ */
+ @ApiOperation("插入新数据")
+ @PostMapping("")
+ public BaseResponse insert(@ApiParam(value = "对象数据", required = true) @RequestBody @Valid ProjectRecordVO projectRecord){
+
+ boolean save = projectRecordService.save(projectRecord);
+
+ return BaseResponse.success(save);
+ }
+
+ /**
+ * 修改数据
+ *
+ * @param projectRecord 项目建档信息
+ *
+ * @return
+ */
+ @ApiOperation("修改数据")
+ @PutMapping("")
+ public BaseResponse update(
+ @ApiParam(value = "对象数据", required = true) @RequestBody ProjectRecordVO projectRecord){
+
+ return BaseResponse.success(projectRecordService.updateProject(projectRecord));
+ }
+
+ /**
+ * 查询数据
+ *
+ * @param id 项目ID
+ *
+ * @return
+ */
+ @ApiOperation("查询数据")
+ @GetMapping("/{id}")
+ public BaseResponse get(@ApiParam(value = "主键id", required = true) @PathVariable Long id){
+
+ ProjectRecord projectRecord = projectRecordService.getById(id);
+
+ return BaseResponse.success(BeanUtil.toBean(projectRecord,ProjectRecordVO.class));
+ }
+
+ /**
+ * 查询分页数据
+ *
+ * @param projectRecord 分页信息
+ *
+ * @return
+ */
+ @ApiOperation("查询分页数据")
+ @PostMapping("/getPage")
+ public BaseResponse> getPage(@ApiParam(value = "对象数据", required = true) @RequestBody ProjectRecordVO projectRecord){
+
+ return BaseResponse.success(projectRecordService.getPage(projectRecord));
+ }
+
+ /**
+ * 更换项目经理
+ *
+ * @param projectRecord 项目经理信息
+ *
+ * @return 返回结果
+ */
+ @ApiOperation("更换项目经理")
+ @PutMapping("/updateAppManager")
+ public BaseResponse updateAppManager(@ApiParam(value = "对象数据", required = true) @RequestBody ProjectRecordVO projectRecord){
+
+ return BaseResponse.success(projectRecordService.updateAppManager(projectRecord));
+ }
+
+ /**
+ * 获取项目信息集合
+ *
+ * @param projectRecordVO 项目查询条件
+ *
+ * @return
+ */
+ @ApiOperation("查询集合数据")
+ @PostMapping("/getList")
+ public BaseResponse> getList(@ApiParam(value = "对象数据", required = true) @RequestBody ProjectRecordVO projectRecordVO){
+
+ return BaseResponse.success(projectRecordService.getList(projectRecordVO));
+ }
+
+ /**
+ * 提交整体信息
+ *
+ * @param id 项目ID
+ *
+ * @return 返回结果
+ */
+ @ApiOperation("提交整体信息")
+ @PostMapping("/submitProject/{id}")
+ public BaseResponse submitProject(@ApiParam(value = "主键id", required = true) @PathVariable Long id){
+
+ return BaseResponse.success(projectRecordService.submitProject(id));
+ }
+
+ /**
+ * 查询询价项目数据
+ *
+ * @param id 项目ID
+ *
+ * @return 返回结果
+ */
+ @ApiOperation("查询询价项目数据")
+ @GetMapping("/getInquiryProjectRecord/{id}")
+ public BaseResponse getInquiryProjectRecord(@ApiParam(value = "主键id", required = true) @PathVariable Long id){
+
+ return BaseResponse.success(projectRecordService.getInquiryProjectRecord(id));
+ }
+
+
+ /**
+ * 项目是否可以修改信息
+ *
+ * @param id 项目ID
+ *
+ * @return 返回结果
+ */
+ @ApiOperation("项目是否可以修改信息")
+ @PostMapping("/getProjectIsUpdate/{id}")
+ public BaseResponse getProjectIsUpdate(@ApiParam(value = "主键id", required = true) @PathVariable Long id){
+
+ return BaseResponse.success(projectRecordService.getProjectIsUpdate(id));
+ }
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/dao/ProjectRecordMapper.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/dao/ProjectRecordMapper.java
new file mode 100644
index 0000000..167dc17
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/dao/ProjectRecordMapper.java
@@ -0,0 +1,29 @@
+package com.chinaunicom.mall.ebtp.project.projectrecord.dao;
+
+
+import com.chinaunicom.mall.ebtp.common.base.dao.IBaseMapper;
+import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecord;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 项目建档mapper
+ * @author daixc
+ * @date 2020/10/25
+ *
+ */
+public interface ProjectRecordMapper extends IBaseMapper {
+
+ /**
+ * 项目经理修改信息补全项目建档信息
+ * @param projectRecord 项目建档信息
+ * @return 返回数据
+ */
+ int updateProject(ProjectRecord projectRecord);
+
+ /**
+ * 物理删除
+ * @param id 项目ID
+ * @return 返回结果
+ */
+ int deletePhysical(@Param(value = "id") Long id);
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/dao/mapper/ProjectRecordMapper.xml b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/dao/mapper/ProjectRecordMapper.xml
new file mode 100644
index 0000000..58b6f31
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/dao/mapper/ProjectRecordMapper.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ update biz_project_record
+ set
+ delete_flag="deleted"
+ where ID=#{id}
+
+
+
+ update biz_project_record set
+
+ agency_company_project_num = #{agencyCompanyProjectNum},
+
+
+ is_ipass_decode = #{isIPassDecode},
+
+
+ eval_method = #{evalMethod},
+
+
+ tendering_content = #{tenderingContent},
+
+
+ bidding_sign_dict = #{biddingSignDict},
+
+
+ region_dict_id = #{regionDictId},
+
+
+ province = #{province},
+
+
+ tenderee_id = #{tendereeId},
+
+ update_by = #{updateBy},
+ update_date= #{updateDate}
+ where ID=#{id}
+
+
+
+
+ delete from biz_project_record where id = #{id}
+
+
\ No newline at end of file
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/entity/ProjectRecord.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/entity/ProjectRecord.java
new file mode 100644
index 0000000..99ec171
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/entity/ProjectRecord.java
@@ -0,0 +1,347 @@
+package com.chinaunicom.mall.ebtp.project.projectrecord.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 项目建档实体类 BizProjectRecord
+ *
+ * @author daixc
+ * @date 2020/10/26
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("项目建档信息")
+@TableName(value = "biz_project_record", autoResultMap = true)
+public class ProjectRecord extends BaseEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "主键")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 委托单ID
+ */
+ @ApiModelProperty(value = "委托单ID")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long entrustId;
+
+ /**
+ * 父项目序号
+ */
+ @ApiModelProperty(value = "父项目序号")
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long parentProjectId;
+
+ /**
+ * 项目流水号
+ */
+ @ApiModelProperty(value = "项目流水号")
+ private String projectBizNum;
+
+ /**
+ * 招标项目名称
+ */
+ @ApiModelProperty(value = "招标项目名称")
+ private String projectName;
+
+
+ /**
+ * 采购类型,1-货物,2-工程,3-服务,4-其他
+ */
+ @ApiModelProperty(value = "采购类型,1-货物,2-工程,3-服务,4-其他")
+ private String procurementType;
+
+ /**
+ * 项目所在行政区域字典编号
+ */
+ @ApiModelProperty(value = "项目所在行政区域字典编号")
+ private String regionDictId;
+
+ /**
+ * 项目所在行政区域(dict_region表)
+ */
+ @ApiModelProperty(value = "项目所在行政区域(dict_region表)")
+ private String regionDictName;
+
+ /**
+ * 资金来源字典编号
+ */
+ @ApiModelProperty(value = "资金来源字典编号")
+ private String fundsProviderDict;
+
+ /**
+ * 预算金额(数值取自委托-预算金额,自动填入,可修改)
+ */
+ @ApiModelProperty(value = "预算金额(数值取自委托-预算金额,自动填入,可修改)")
+ private BigDecimal budgetAmount;
+
+ /**
+ * 组织形式(自主|委托)
+ */
+ @ApiModelProperty(value = "组织形式字典编号(自主|委托)")
+ private String bidOrgDict;
+
+ /**
+ * 招标方式字典编号(采购方式)
+ */
+ @ApiModelProperty(value = "招标方式字典编号")
+ private String bidMethodDict;
+
+ /**
+ * 业务类型字典编号
+ */
+ @ApiModelProperty(value = "业务类型字典编号")
+ private String bidMethodSubDict;
+
+ /**
+ * 招标内容与范围(手工输入)
+ */
+ @ApiModelProperty(value = "招标内容与范围(手工输入)")
+ @Length(max = 2000,message = "招标内容与范围最长为2000字符")
+ private String tenderingContent;
+
+ /**
+ * 所属省分
+ */
+ @ApiModelProperty(value = "所属省分")
+ private String province;
+
+ /**
+ * 招标项目责任人(代理机构项目经理)id
+ */
+ @ApiModelProperty(value = "招标项目责任人(代理机构项目经理)id")
+ private String appManagerId;
+
+ /**
+ * 招标项目责任人(代理机构项目经理,根据当前账号对应人员联系方式自动填入,可修改)
+ */
+ @ApiModelProperty(value = "招标项目责任人(代理机构项目经理,根据当前账号对应人员联系方式自动填入,可修改)")
+ private String appManagerName;
+
+ /**
+ * 招标项目责任人联系方式(代理机构项目经理联系方式,根据当前账号对应人员联系方式自动填入,可修改)
+ */
+ @ApiModelProperty(value = "招标项目责任人联系方式(代理机构项目经理联系方式,根据当前账号对应人员联系方式自动填入,可修改)")
+ private String appManagerTel;
+
+ /**
+ * 采购经理id
+ */
+ @ApiModelProperty(value = "采购经理id")
+ private String ownerContactId;
+
+ /**
+ * 采购经理名称
+ */
+ @ApiModelProperty(value = "采购经理名称")
+ private String ownerContactName;
+
+ /**
+ * 采购经理联系方式
+ */
+ @ApiModelProperty(value = "采购经理联系方式")
+ private String ownerContactTel;
+
+ /**
+ * 采购部门ID
+ */
+ @ApiModelProperty(value = "采购部门ID")
+ private String tendereeId;
+
+ /**
+ * 采购部门名称
+ */
+ @ApiModelProperty(value = "采购部门名称")
+ private String tendereeName;
+
+
+ /**
+ * 采购组织机构id
+ */
+ @ApiModelProperty(value = "招标人组织机构id")
+ private String tendereeOrgId;
+
+ /**
+ * 采购组织机构名称
+ */
+ @ApiModelProperty(value = "采购组织机构名称")
+ private String tendereeOrgName;
+
+ /**
+ * 招标代理机构id
+ */
+ @ApiModelProperty(value = "招标代理机构id")
+ private String tenderAgencyId;
+
+ /**
+ * 招标代理机构名称
+ */
+ @ApiModelProperty(value = "招标代理机构名称")
+ private String tenderAgencyName;
+
+ /**
+ * 监督部门id
+ */
+ @ApiModelProperty(value = "监督部门id")
+ private String supervisoryAuthId;
+
+ /**
+ * 监督部门名称
+ */
+ @ApiModelProperty(value = "监督部门名称")
+ private String supervisoryAuthName;
+
+ /**
+ * 审核部门id
+ */
+ @ApiModelProperty(value = "审核部门id")
+ private String reviewAuthId;
+
+ /**
+ * 审核部门名称
+ */
+ @ApiModelProperty(value = "审核部门名称")
+ private String reviewAuthName;
+
+ /**
+ * 项目批复文件集id(上传pdf格式文件,只能上传一个。文件可删除重新上传)
+ */
+ @ApiModelProperty(value = "项目批复文件集id(上传pdf格式文件,只能上传一个。文件可删除重新上传)")
+ private String projResponseDocId;
+
+ /**
+ * 其他附件集id(上传pdf格式文件,可上传多个附件。文件可删除重新上传。)
+ */
+ @ApiModelProperty(value = "其他附件集id(上传pdf格式文件,可上传多个附件。文件可删除重新上传。)")
+ private String otherDocId;
+
+ /**
+ * 单一来源简化流程附件
+ */
+ @ApiModelProperty(value = "单一来源简化流程附件")
+ private String approvalDocId;
+
+ @ApiModelProperty(value = "业务状态")
+ private Integer status;
+
+ /**
+ * 系统标识:0-采购 1-工作台 2-工作台合并
+ */
+ @ApiModelProperty(value = "系统标识:0-采购 1-工作台 2-工作台合并")
+ private String systemLogo;
+
+ /**
+ * 推送工信部项目创建人账号
+ */
+ @ApiModelProperty(value = "推送工信部项目创建人账号")
+ @Length(max = 32, message = "推送工信部项目创建人账号最长为32个字符")
+ private String miitUserId;
+
+ /**
+ * 推送工信部项目部门信息
+ */
+ @ApiModelProperty(value = "推送工信部项目部门信息")
+ @Length(max = 32, message = "推送工信部项目部门信息最长为32个字符")
+ private String miitDeptId;
+
+ /**
+ * 比选方式
+ */
+ @ApiModelProperty(value = "比选方式")
+ private String biddingSignDict;
+
+ /**
+ * 资格审查方式|招募方式(评审次数)|竞争性谈判(参与方式)
+ */
+ @ApiModelProperty(value = "资格审查方式|招募方式(评审次数)|竞争性谈判(参与方式)")
+ private String examinationMethodDict;
+
+ /**
+ * 项目编号(采购系统推送项目ID 项目实施编号)
+ */
+ @ApiModelProperty(value = "项目编号(采购系统推送项目ID 项目实施编号)")
+ private String ebpProjectNumber;
+
+ /**
+ * 项目实施ID
+ */
+ @ApiModelProperty(value = "项目实施ID")
+ private String ebpProjectId;
+
+ /**
+ * 父项目编号
+ */
+ @ApiModelProperty(value = "采购系统父项目编号")
+ private String ebpParentProjectNumber;
+
+ /**
+ * 父项目ID
+ */
+ @ApiModelProperty(value = "采购系统父项目ID")
+ private String ebpParentProjectId;
+
+ /**
+ * 代理机构项目编号(委托采购专用字段)
+ */
+ @ApiModelProperty(value = "代理机构项目编号(委托采购专用字段)")
+ @Length(max = 50,message = "代理机构项目编号最长为50个字符")
+ private String agencyCompanyProjectNum;
+
+ /**
+ * 是否使用客户端工具制作应答文件
+ */
+ @ApiModelProperty(value = "是否使用客户端工具制作应答文件 0 是 1 否")
+ private String isClientFile;
+
+ /**
+ * 是否使用IPass制作应答文件
+ */
+ @ApiModelProperty(value = "是否使用IPass制作应答文件 0 是 1 否")
+ private String isIPassFile;
+
+ /**
+ * 是否开标使用IPass进行解密
+ */
+ @ApiModelProperty(value = "是否开标使用IPass进行解密 0 是 1 否")
+ private String isIPassDecode;
+
+ @ApiModelProperty(value = "招募开始时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime recruitStartTime;
+
+ @ApiModelProperty(value = "招募结束时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime recruitEndTime;
+
+ /**
+ * 是否使用简化流程
+ */
+ @ApiModelProperty(value = "是否使用简化流程 0 是 1 否")
+ private String isApproval;
+
+
+ @ApiModelProperty(value = "邀请方式(作废 和 参与方式重复)")
+ private String invitationMethod;
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/entity/ProjectRecordVO.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/entity/ProjectRecordVO.java
new file mode 100644
index 0000000..75f9474
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/entity/ProjectRecordVO.java
@@ -0,0 +1,63 @@
+package com.chinaunicom.mall.ebtp.project.projectrecord.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
+import com.chinaunicom.mall.ebtp.common.config.CustomLocalDateTimeTypeHandler;
+import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterial;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 项目建档VO实体类
+ *
+ * @author daixc
+ * @date 2020/10/26
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("项目建档信息VO类")
+@TableName(autoResultMap = true)
+public class ProjectRecordVO extends ProjectRecord implements Serializable {
+
+ /**
+ * 分页数据
+ */
+ @ApiModelProperty(value = "分页对象信息")
+ private BasePageRequest basePageRequest;
+
+ /**
+ * 立项开始时间
+ */
+ @ApiModelProperty(value = "立项开始时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @TableField(typeHandler = CustomLocalDateTimeTypeHandler.class)
+ private LocalDateTime startApprovalTime;
+
+ /**
+ * 立项结束时间
+ */
+ @ApiModelProperty(value = "立项结束时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @TableField(typeHandler = CustomLocalDateTimeTypeHandler.class)
+ private LocalDateTime endApprovalTime;
+
+ @ApiModelProperty(value = "商品信息")
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private List materialList;
+
+ @ApiModelProperty(value = "项目ID集合")
+ private List selectIds;
+
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/IProjectRecordService.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/IProjectRecordService.java
new file mode 100644
index 0000000..ebf0665
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/IProjectRecordService.java
@@ -0,0 +1,115 @@
+package com.chinaunicom.mall.ebtp.project.projectrecord.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrustVO;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.ProjBaseInfoVO;
+import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecord;
+import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecordVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 对数据表 biz_project_record 操作的 service
+ * @author daixc
+ * @date 2020/10/27
+ *
+ */
+public interface IProjectRecordService extends IBaseService{
+
+
+ /**
+ * 分页信息
+ * @param projectRecord 查询条件
+ * @return 返回结果
+ */
+ IPage getPage(ProjectRecordVO projectRecord);
+
+ /**
+ * 获取所有项目信息
+ * @param projectRecordVO 项目建档信息
+ * @return 返回结果
+ */
+ List getList(ProjectRecordVO projectRecordVO);
+
+ /**
+ * 项目经理修改信息补全项目建档信息
+ * @param projectRecord 项目建档信息
+ * @return 返回数据
+ */
+ boolean updateProject(ProjectRecord projectRecord);
+
+ /**
+ * 项目经理同意修改项目信息
+ * @param entrustId 委托单ID
+ * @return 返回结果
+ */
+ boolean assent(Long entrustId);
+
+ /**
+ * 删除项目建档信息
+ * @param id 项目建档ID
+ * @return 返回结果
+ */
+ boolean deletePhysical(Long id);
+
+
+ /**
+ * 修改项目经理
+ * @param projectRecordVO 项目信息
+ * @return 返回结果
+ */
+ boolean updateAppManager(ProjectRecordVO projectRecordVO);
+
+ /**
+ * 提交项目信息
+ * @param id 项目ID
+ * @return 返回结果
+ */
+ boolean submitProject(Long id);
+
+ /**
+ * 判断项目是否是资审项目
+ * @param projectRecord 项目信息
+ * @return 返回结果
+ */
+ boolean isReviewMethod(ProjectRecord projectRecord);
+
+ /**
+ * 初始化标段评审流程
+ * @param id 项目ID
+ * @param isReviewMethod 是否资审项目
+ * @param sectionMaps 流程ID集合
+ */
+ void initialize(Long id, boolean isReviewMethod, Map sectionMaps);
+
+ /**
+ * 获取询价项目信息
+ * @param id 项目ID
+ * @return 返回结果
+ */
+ ProjectRecordVO getInquiryProjectRecord(Long id);
+
+ /**
+ * 获取项目是否可以修改
+ * @param id 项目ID
+ * @return
+ */
+ boolean getProjectIsUpdate(Long id);
+
+ /**
+ * 自主采购直接初始化信息
+ * @param projectEntrustVO 自主采购信息
+ * @return
+ */
+ boolean initProjectByIndependentProcurement(ProjectEntrustVO projectEntrustVO);
+
+ /**
+ * 项目是否是邀请函
+ * @param projectRecord 项目信息
+ * @return 返回结果
+ */
+ boolean isInvitation(ProjectRecord projectRecord);
+}
diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/impl/ProjectRecordServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/impl/ProjectRecordServiceImpl.java
new file mode 100644
index 0000000..e34bbe5
--- /dev/null
+++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/impl/ProjectRecordServiceImpl.java
@@ -0,0 +1,694 @@
+package com.chinaunicom.mall.ebtp.project.projectrecord.service.impl;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
+import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
+import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
+import com.chinaunicom.mall.ebtp.common.base.enums.ResponseEnum;
+import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService;
+import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
+import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum;
+import com.chinaunicom.mall.ebtp.common.util.JsonUtils;
+import com.chinaunicom.mall.ebtp.common.util.PropertyUtils;
+import com.chinaunicom.mall.ebtp.project.common.EbpProjectCommonUtil;
+import com.chinaunicom.mall.ebtp.project.common.ProjectCommonUtil;
+import com.chinaunicom.mall.ebtp.project.common.ProjectExceptionEnum;
+import com.chinaunicom.mall.ebtp.project.feign.EbtpMallBidApi;
+import com.chinaunicom.mall.ebtp.project.feign.EbtpMallProcessApi;
+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;
+import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ebpentity.*;
+import com.chinaunicom.mall.ebtp.project.projectentrust.service.IProjectEntrustExpandService;
+import com.chinaunicom.mall.ebtp.project.projectentrust.service.IProjectEntrustService;
+import com.chinaunicom.mall.ebtp.project.projectrecord.dao.ProjectRecordMapper;
+import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecord;
+import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecordVO;
+import com.chinaunicom.mall.ebtp.project.projectrecord.service.IProjectRecordService;
+import com.chinaunicom.mall.ebtp.project.projectsection.entity.ProjectSection;
+import com.chinaunicom.mall.ebtp.project.projectsection.service.IProjectSectionFlowService;
+import com.chinaunicom.mall.ebtp.project.projectsection.service.IProjectSectionService;
+import com.chinaunicom.mall.ebtp.project.projectupdatefield.entity.ProjectUpdateField;
+import com.chinaunicom.mall.ebtp.project.projectupdatefield.service.IProjectUpdateFieldService;
+import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterial;
+import com.chinaunicom.mall.ebtp.project.sectionmaterial.entity.SectionMaterialVO;
+import com.chinaunicom.mall.ebtp.project.sectionmaterial.service.ISectionMaterialService;
+import com.chinaunicom.mall.ebtp.project.sectionsupplier.entity.SectionSupplier;
+import com.chinaunicom.mall.ebtp.project.sectionsupplier.entity.SectionSupplierVO;
+import com.chinaunicom.mall.ebtp.project.sectionsupplier.service.ISectionSupplierService;
+import io.seata.spring.annotation.GlobalTransactional;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 对数据表 biz_project_record 操作的 serviceImpl
+ * @author daixc
+ * @date 2020/10/26
+ *
+ */
+@Service
+public class ProjectRecordServiceImpl extends BaseServiceImpl implements IProjectRecordService {
+
+
+ @Resource
+ private ProjectRecordMapper projectRecordMapper;
+
+ @Resource
+ private IProjectSectionService projectSectionService;
+
+ @Resource
+ private IProjectUpdateFieldService projectUpdateFieldService;
+
+ @Resource
+ private ISectionMaterialService sectionMaterialService;
+
+ @Resource
+ private EbtpMallProcessApi ebtpMallProcessApi;
+
+ @Resource
+ private EbtpMallBidApi ebtpMallBidApi;
+
+ @Resource
+ private ISectionSupplierService sectionSupplierService;
+
+ @Resource
+ private IProjectEntrustExpandService entrustExpandService;
+
+ @Resource
+ private IProjectEntrustService entrustService;
+
+ @Resource
+ private IProjectSectionFlowService sectionFlowService;
+
+ @Resource
+ private IBaseCacheUserService cacheUserService;
+
+
+ /**
+ * 查询条件拼接
+ * @param projectRecordVO 项目建档信息
+ * @return 返回查询条件
+ */
+ private QueryWrapper getProjectRecordQueryWrapper(ProjectRecordVO projectRecordVO) {
+ QueryWrapper query = new QueryWrapper<>();
+ if(StringUtils.isNotBlank(projectRecordVO.getProjectName())){
+ query.like("project_name", projectRecordVO.getProjectName());
+ }
+ if(null != projectRecordVO.getStartApprovalTime()){
+ query.ge("approval_time", projectRecordVO.getStartApprovalTime());
+ }
+
+ if(null != projectRecordVO.getEndApprovalTime()){
+ query.le("approval_time", projectRecordVO.getEndApprovalTime());
+ }
+
+ if(StringUtils.isNotBlank(projectRecordVO.getProjectBizNum())){
+ query.eq("project_biz_num", projectRecordVO.getProjectBizNum());
+ }
+
+ if(StringUtils.isNotBlank(projectRecordVO.getProcurementType())){
+ query.eq("procurement_type", projectRecordVO.getProcurementType());
+ }
+
+ if(StringUtils.isNotBlank(projectRecordVO.getBidMethodDict())){
+ query.eq("bid_method_dict", projectRecordVO.getBidMethodDict());
+ }
+
+ if(null != projectRecordVO.getStatus()){
+ query.eq("status", projectRecordVO.getStatus());
+ }
+
+ if(null != projectRecordVO.getSelectIds() && projectRecordVO.getSelectIds().size() > 0){
+ query.in("id",projectRecordVO.getSelectIds());
+ }
+
+ if(StringUtils.isNotBlank(projectRecordVO.getEbpProjectId())){
+ query.eq("ebp_project_id", projectRecordVO.getEbpProjectId());
+ }
+
+ return query;
+ }
+
+ @Override
+ public IPage getPage(ProjectRecordVO projectRecordVO) {
+
+ QueryWrapper query = getProjectRecordQueryWrapper(projectRecordVO);
+
+ if(null == projectRecordVO.getBasePageRequest()){
+ projectRecordVO.setBasePageRequest(new BasePageRequest());
+ }
+
+ BaseCacheUser cacheUser = cacheUserService.getCacheUser();
+ if(null != cacheUser){
+ query.eq("app_manager_id", cacheUser.getUserId());
+ }
+ query.orderByDesc("create_date");
+ //查询
+ IPage p = new Page<>(projectRecordVO.getBasePageRequest().getPageNo(), projectRecordVO.getBasePageRequest().getPageSize());
+ IPage result = this.page(p, query);
+
+ IPage voPage = result.convert(c -> BeanUtil.toBean(c,ProjectRecordVO.class));
+ voPage.setRecords(JsonUtils.jsonToList(result.getRecords(),ProjectRecordVO.class));
+
+ return voPage;
+ }
+
+ @Override
+ public List getList(ProjectRecordVO projectRecordVO){
+
+ return JsonUtils.jsonToList(this.list(getProjectRecordQueryWrapper(projectRecordVO)),ProjectRecordVO.class);
+ }
+
+
+ @Override
+ public boolean updateProject(ProjectRecord projectRecord) {
+
+ if(ProjectCommonUtil.PROJECT_STATUS_0 == projectRecord.getStatus()){
+ projectRecord.setStatus(ProjectCommonUtil.PROJECT_STATUS_1);
+ }
+
+ return this.updateById(projectRecord);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ @GlobalTransactional
+ public boolean submitProject(Long id){
+
+ checkSubmitProject(id);
+
+ ProjectRecord projectRecord = this.getById(id);
+ boolean isReviewMethod = isReviewMethod(projectRecord);
+
+ //修改项目信息
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("status", ProjectCommonUtil.PROJECT_STATUS_1);
+ updateWrapper.eq("id",id);
+ updateWrapper.set("status",ProjectCommonUtil.PROJECT_STATUS_2);
+
+
+ boolean result = this.update(updateWrapper);
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_UPDATE.customValid(!result);
+
+ int businessModule = isReviewMethod ? ProjectCommonUtil.BUSINESS_MODULE_2:ProjectCommonUtil.BUSINESS_MODULE_7;
+ //修改标段信息
+ UpdateWrapper sectionUpdateWrapper = new UpdateWrapper<>();
+ sectionUpdateWrapper.eq("project_id", id);
+ sectionUpdateWrapper.set("status", ProjectCommonUtil.SECTION_STATUS_2)
+ //资审项目招标为2 正常招标7
+ .set("business_module", businessModule);
+
+ result = projectSectionService.update(sectionUpdateWrapper);
+
+ CommonExceptionEnum.FRAME_EXCEPTION_COMMON_NOT_UPDATE.customValid(!result);
+
+ Map sectionMaps = projectSectionService.getFlowList(id);
+
+ initialize(id, isReviewMethod, sectionMaps);
+
+ List sectionIds = new ArrayList<>();
+
+ //插入标段变更记录
+ sectionMaps.forEach((key,value) -> sectionIds.add(key));
+ sectionFlowService.saveSectionList(sectionIds,ProjectCommonUtil.BUSINESS_MODULE_1,businessModule);
+
+ if(null != projectRecord){
+ initInvitation(projectRecord);
+ }
+
+ return result;
+
+ }
+
+ /**
+ * 判断项目是否是资审项目
+ * @param projectRecord 项目信息
+ * @return 返回结果
+ */
+ @Override
+ public boolean isReviewMethod(ProjectRecord projectRecord) {
+ //是否资审预审项目
+ boolean isReviewMethod = false;
+
+ if(null != projectRecord){
+ if (StringUtils.equals(projectRecord.getExaminationMethodDict(), ProjectCommonUtil.EXAMINATION_METHOD_1) ||
+ StringUtils.equals(projectRecord.getExaminationMethodDict(), ProjectCommonUtil.EXAMINATION_METHOD_3)
+ ) {
+ isReviewMethod = true;
+ }
+ }
+ return isReviewMethod;
+ }
+
+ /**
+ * 初始化邀请调用
+ * @param projectRecord 项目信息
+ */
+ private void initInvitation(ProjectRecord projectRecord) {
+
+ //是否发邀请函 如果流程发送邀请函 调用招标接口 发送供应商信息
+ boolean isInvitation= isInvitation(projectRecord);
+
+ if(isInvitation){
+ SectionSupplierVO supplierVO = new SectionSupplierVO();
+ supplierVO.setProjectId(projectRecord.getId());
+ List resultList = sectionSupplierService.getList(supplierVO);
+
+ Integer code = ebtpMallBidApi.entrustInsert(JsonUtils.jsonToList(resultList,SectionSupplierVO.class)).getCode();
+
+ if(code != ResponseEnum.SUCCESS.getCode()){
+ ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_INIT_SUPPLIER_ERROR.throwException();
+ }
+ }
+
+ }
+
+ /**
+ * 初始化标段评审流程
+ * @param id 项目ID
+ * @param isReviewMethod 是否资审项目
+ * @param sectionMaps 流程ID集合
+ */
+ @Override
+ public void initialize(Long id, boolean isReviewMethod, Map sectionMaps) {
+
+ BaseResponse