Kaynağa Gözat

modify:

1. 采购&合同信息备案合并;
tags/24080901
WendyYang 6 ay önce
ebeveyn
işleme
0bd7ca3ae9
10 değiştirilmiş dosya ile 93 ekleme ve 164 silme
  1. +2
    -13
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/TenderStateChangeAction.java
  2. +4
    -10
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TenderStateMachineBuilderImpl.java
  3. +2
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/event/TenderStateChangeEvent.java
  4. +0
    -9
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/ConstructionController.java
  5. +6
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java
  6. +2
    -52
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java
  7. +48
    -9
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java
  8. +28
    -9
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/SubmitPurchaseContractRecordReq.java
  9. +0
    -48
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/SubmitPurchaseRecordReq.java
  10. +1
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderStatus.java

+ 2
- 13
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/TenderStateChangeAction.java Dosyayı Görüntüle

@@ -30,23 +30,12 @@ public class TenderStateChangeAction {
}

/**
* 填写采购信息
*
* @param message \
*/
@OnTransition(source = "TO_BE_SUBMIT_PURCHASE_INFO", target = "TO_BE_SUBMIT_CONSTRUCTION_INFO")
public void SUBMIT_PURCHASE_INFO(Message<ProjectStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_CONSTRUCTION_INFO.getCode());
}

/**
* 填写合同信息
*
* @param message \
*/
@OnTransition(source = "TO_BE_SUBMIT_CONSTRUCTION_INFO", target = "TO_BE_SUBMIT_OPERATION_PLAN")
public void SUBMIT_CONSTRUCTION_INFO(Message<ProjectStateChangeEvent> message) {
@OnTransition(source = "TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO", target = "TO_BE_SUBMIT_OPERATION_PLAN")
public void SUBMIT_PURCHASE_CONSTRUCTION_INFO(Message<ProjectStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_OPERATION_PLAN.getCode());
}


+ 4
- 10
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TenderStateMachineBuilderImpl.java Dosyayı Görüntüle

@@ -65,21 +65,15 @@ public class TenderStateMachineBuilderImpl implements BaseStateMachineBuilder<Pu

builder.configureStates()
.withStates()
.initial(TenderStatus.TO_BE_SUBMIT_PURCHASE_INFO)
.initial(TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.states(EnumSet.allOf(TenderStatus.class));

builder.configureTransitions()
// 填写采购信息
// 填写采购&合同信息
.withExternal()
.source(TenderStatus.TO_BE_SUBMIT_PURCHASE_INFO)
.target(TenderStatus.TO_BE_SUBMIT_CONSTRUCTION_INFO)
.event(TenderStateChangeEvent.SUBMIT_PURCHASE_INFO)
.and()
// 填写合同信息
.withExternal()
.source(TenderStatus.TO_BE_SUBMIT_CONSTRUCTION_INFO)
.source(TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.target(TenderStatus.TO_BE_SUBMIT_OPERATION_PLAN)
.event(TenderStateChangeEvent.SUBMIT_CONSTRUCTION_INFO)
.event(TenderStateChangeEvent.SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.and()
// 填写实施计划
.withExternal()


+ 2
- 6
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/event/TenderStateChangeEvent.java Dosyayı Görüntüle

@@ -16,13 +16,9 @@ import lombok.Getter;
public enum TenderStateChangeEvent implements AbstractStateChangeEvent {

/**
* 填写采购信息
* 填写采购&合同信息
*/
SUBMIT_PURCHASE_INFO(101, null, null),
/**
* 填写合同信息
*/
SUBMIT_CONSTRUCTION_INFO(102, null, null),
SUBMIT_PURCHASE_CONSTRUCTION_INFO(101, null, null),
/**
* 填写实施计划
*/


+ 0
- 9
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/ConstructionController.java Dosyayı Görüntüle

@@ -4,8 +4,6 @@ import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.projectdeclared.manage.ConstructionManage;
import com.hz.pm.api.projectdeclared.model.dto.PaymentPlanSupplementDTO;
import com.hz.pm.api.projectdeclared.model.dto.PreInsSaveDTO;
import com.hz.pm.api.projectdeclared.model.dto.XcfhxApplySaveDTO;
import com.hz.pm.api.projectdeclared.model.req.SubmitConstructionReq;
import com.hz.pm.api.projectdeclared.model.req.XcfhxApplyReq;
import com.hz.pm.api.projectdeclared.model.vo.ContractVO;
import com.hz.pm.api.projectdeclared.model.vo.PreInsVO;
@@ -65,13 +63,6 @@ public class ConstructionController {
return constructionManage.detailContractByProjectId(projectId);
}

@ApiOperation(value = "填写合同信息")
@WebLog("填写合同信息")
@PostMapping("/submit-contract")
public String submitContract(@Validated @RequestBody SubmitConstructionReq req) {
return constructionManage.submitPurchaseContract(req);
}

@ApiOperation(value = "补充实际支付金额", notes = "补充实际支付金额")
@WebLog("补充实际支付金额")
@PostMapping("/supplement")


+ 6
- 6
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java Dosyayı Görüntüle

@@ -74,10 +74,10 @@ public class PurchaseController {
purchaseManage.submitPurchaseNotice(req);
}

@ApiOperation("采购信息备案")
@WebLog("采购信息备案")
@ApiOperation("采购&合同信息备案")
@WebLog("采购&合同信息备案")
@PostMapping("/record/submit")
public void submitPurchaseRecord(@RequestBody SubmitPurchaseRecordReq req) {
public void submitPurchaseRecord(@RequestBody SubmitPurchaseContractRecordReq req) {
purchaseManage.submitPurchaseRecord(req);
}

@@ -136,7 +136,7 @@ public class PurchaseController {
@WebLog("新增系统(信创审符合性查信息)")
@PostMapping("/add-system")
public Long addSystem(@Validated @RequestBody XcfhxApplySaveDTO dto) {
return purchaseManage.addSystem(dto);
return purchaseManage.addSystem(dto);
}

@ApiOperation("编辑信创审符合性查信息")
@@ -154,8 +154,8 @@ public class PurchaseController {

@GetMapping("/exportXcfhFile/{code}")
@ApiOperation("直接导出信创文件")
public void exportXcfhFile(@PathVariable String code,HttpServletResponse response) throws UnsupportedEncodingException {
purchaseManage.exportXcfhFile(code,response);
public void exportXcfhFile(@PathVariable String code, HttpServletResponse response) throws UnsupportedEncodingException {
purchaseManage.exportXcfhFile(code, response);
}

@GetMapping("/purchaseIntention/{unitId}")


+ 2
- 52
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java Dosyayı Görüntüle

@@ -14,7 +14,6 @@ import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.statemachine.util.ProjectStateMachineUtil;
import com.hz.pm.api.common.statemachine.util.TenderStateMachineUtil;
import com.hz.pm.api.common.statemachine.util.XcfhxStateMachineUtil;
import com.hz.pm.api.common.util.DecimalUtil;
import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.common.util.ExcelExportStyle;
import com.hz.pm.api.common.util.StrUtils;
@@ -22,9 +21,7 @@ import com.hz.pm.api.projectdeclared.helper.MhXchxFileHelper;
import com.hz.pm.api.projectdeclared.model.dto.DeclaredProjectExportDTO;
import com.hz.pm.api.projectdeclared.model.dto.PaymentPlanSupplementDTO;
import com.hz.pm.api.projectdeclared.model.dto.PreInsSaveDTO;
import com.hz.pm.api.projectdeclared.model.dto.XcfhxApplySaveDTO;
import com.hz.pm.api.projectdeclared.model.entity.*;
import com.hz.pm.api.projectdeclared.model.req.SubmitConstructionReq;
import com.hz.pm.api.projectdeclared.model.req.XcfhxApplyReq;
import com.hz.pm.api.projectdeclared.model.vo.ContractVO;
import com.hz.pm.api.projectdeclared.model.vo.PreInsAcceptancePersonVO;
@@ -289,53 +286,6 @@ public class ConstructionManage {
return BeanUtil.copyToList(contracts, ContractVO.class);
}

@Transactional(rollbackFor = Exception.class)
public synchronized String submitPurchaseContract(SubmitConstructionReq req) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
Long projectId = req.getProjectId();
Project project = projectService.getNewestNoNull(req.getProjectId());

//首先要判断 项目当前状态 是不是 采购结果备案
VUtils.isTrue(!ProjectStatus.ON_PURCHASING.getCode().equals(project.getStatus()) ||
!ProjectStatus.PROJECT_APPROVED.getCode().equals(project.getStage()))
.throwMessage("提交失败 该项目不是 建设中或者已立项阶段");

Purchase purchase = purchaseService.getById(req.getBidId());

if (!TenderStatus.TO_BE_SUBMIT_CONSTRUCTION_INFO.eq(purchase.getStatus())) {
throw BizException.wrap("该标段不支持填写合同信息");
}
tenderStateMachineUtil.pass(purchase);
purchaseService.updateById(purchase);
LocalDateTime now = LocalDateTime.now();
Contract contract = new Contract();
contract.setContractTime(req.getContractTime());
contract.setAttachment(req.getAttachment());
contract.setName(req.getName());
contract.setProjectId(projectId);
contract.setProjectCode(project.getProjectCode());
contract.setBidId(req.getBidId());
contract.setId(req.getConstructionId());
contract.setCreateBy(user.getUserIdStr());
contract.setUpdateBy(user.getUserIdStr());
contract.setCreateOn(now);
contract.setUpdateOn(now);
contract.setTotalAmount(req.getTotalAmount());
contract.setConstructionNo(req.getConstructionNo());
contract.setSupplierContact(req.getSupplierContact());
contract.setSupplierContactInfo(req.getSupplierContactInfo());
contractService.saveOrUpdate(contract);

LambdaQueryWrapper<Contract> query = Wrappers.lambdaQuery(Contract.class)
.eq(Contract::getProjectId, projectId);
List<Contract> allContracts = contractService.list(query);
BigDecimal totalAmount = DecimalUtil.sum(allContracts, Contract::getTotalAmount);
project.setUpdateOn(now);
project.setContractAmount(totalAmount);
projectService.updateById(project);
return "填写成功";
}

private static final List<TenderStatus> PRE_INSPECTED_PURCHASE_STATUS;

static {
@@ -600,7 +550,7 @@ public class ConstructionManage {
if (StrUtils.isBlank(purchase.getMhXcfhxReportFile()) ||
req.getMhXcfhxReportFile().equals(purchase.getMhXcfhxReportFile())) {
String fileName = purchase.getBidName() + "-信创符合性测评报告.";
purchase.setXcfhxReportFiles(mhXchxFileHelper.getXchxFile(req.getMhXcfhxReportFile(),fileName));
purchase.setXcfhxReportFiles(mhXchxFileHelper.getXchxFile(req.getMhXcfhxReportFile(), fileName));
}
purchase.setMhXcfhxReportRecordId(req.getMhXcfhxReportRecordId());
purchase.setMhXcfhxReportFile(req.getMhXcfhxReportFile());
@@ -621,7 +571,7 @@ public class ConstructionManage {
public synchronized String submitXcfhxApplyManual(Long id) {
Xinchuang xinhcuang = xinchuangService.getById(id);
VUtils.isTrue(Objects.isNull(xinhcuang)).throwMessage("信创符合性申请不存在");
if(StringUtils.isNotBlank(xinhcuang.getInstCode())){
if (StringUtils.isNotBlank(xinhcuang.getInstCode())) {
List<Task> tasks = taskService.createTaskQuery().active()
.processInstanceId(xinhcuang.getInstCode())
.list();


+ 48
- 9
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java Dosyayı Görüntüle

@@ -48,7 +48,7 @@ import com.hz.pm.api.projectlib.entity.PurchaseStatusChange;
import com.hz.pm.api.projectlib.helper.ProjectManageUtil;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectInst;
import com.hz.pm.api.projectlib.model.enumeration.*;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.model.enumeration.status.*;
import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO;
@@ -78,6 +78,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
@@ -338,7 +339,7 @@ public class PurchaseManage {
purchase.setSelfTestStatus(TenderSelfTestStatus.WITHOUT_SELF_TEST_INFO.getCode());
purchase.setTestValidStatus(TenderTestValidStatus.WITHOUT_TEST_VALID_INFO.getCode());
purchase.setAdaptStatus(TenderAdaptStatus.WITHOUT_ADAPT_INFO.getCode());
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_PURCHASE_INFO.getCode());
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO.getCode());
purchase.setXcfhxApplyStatus(TenderXcfhxApplyStatus.TO_BE_SUBMIT_XCFHX_APPLY.getCode());
if (Boolean.TRUE.equals(mhPurchaseNoticeOpen)) {
notices.add(buildPurchaseNotice(w, user));
@@ -398,11 +399,12 @@ public class PurchaseManage {
}

@Transactional(rollbackFor = Exception.class)
public synchronized void submitPurchaseRecord(SubmitPurchaseRecordReq req) {
public synchronized void submitPurchaseRecord(SubmitPurchaseContractRecordReq req) {
Purchase purchase = purchaseService.getById(req.getBidId());
if (!TenderStatus.TO_BE_SUBMIT_PURCHASE_INFO.eq(purchase.getStatus())) {
throw BizException.wrap("该标段无法进行采购信息备案");
if (!TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO.eq(purchase.getStatus())) {
throw BizException.wrap("该标段无法进行采购&合同信息备案");
}
// 保存采购信息
purchase.setId(req.getBidId());
purchase.setAcceptanceLetter(req.getAcceptanceLetter());
purchase.setBidBuildContent(req.getBidBuildContent());
@@ -412,6 +414,41 @@ public class PurchaseManage {
purchase.setBidType(req.getBidType());
tenderStateMachineUtil.pass(purchase);
purchaseService.saveOrUpdate(purchase);

UserInfoDetails user = LoginUserUtil.loginUserDetail();
Long projectId = req.getProjectId();
Project project = projectService.getNewestNoNull(projectId);
LocalDateTime now = LocalDateTime.now();

// 保存合同信息
Contract contract = contractService.getByBidId(req.getBidId());
if (contract == null) {
contract = new Contract();
contract.setCreateBy(user.getUserIdStr());
contract.setCreateOn(now);
}
contract.setContractTime(req.getContractTime());
contract.setAttachment(req.getAttachment());
contract.setName(req.getName());
contract.setProjectId(projectId);
contract.setProjectCode(project.getProjectCode());
contract.setBidId(req.getBidId());
contract.setId(req.getConstructionId());
contract.setUpdateBy(user.getUserIdStr());
contract.setUpdateOn(now);
contract.setTotalAmount(req.getTotalAmount());
contract.setConstructionNo(req.getConstructionNo());
contract.setSupplierContact(req.getSupplierContact());
contract.setSupplierContactInfo(req.getSupplierContactInfo());
contractService.saveOrUpdate(contract);
// 修改项目合同金额
Wrapper<Contract> query = Wrappers.lambdaQuery(Contract.class)
.eq(Contract::getProjectId, projectId);
List<Contract> allContracts = contractService.list(query);
BigDecimal totalAmount = DecimalUtil.sum(allContracts, Contract::getTotalAmount);
project.setUpdateOn(now);
project.setContractAmount(totalAmount);
projectService.updateById(project);
}

private PageVo<TestValidListVO> queryData(TestValidListReq req,
@@ -684,12 +721,13 @@ public class PurchaseManage {

/**
* 详情
*
* @param id
* @return
*/
public XinchuangVO detailXcfhxApply(Long id) {
Xinchuang xinchuang = xinchuangService.getById(id);
if(Objects.isNull(xinchuang)){
if (Objects.isNull(xinchuang)) {
return null;
}
return BeanUtil.copyProperties(xinchuang, XinchuangVO.class);
@@ -721,6 +759,7 @@ public class PurchaseManage {

/**
* 新增信创系统
*
* @param dto
* @return
*/
@@ -733,7 +772,7 @@ public class PurchaseManage {
xinchuang.setXcfhxReportFiles(mhXchxFileHelper.getXchxFile(dto.getMhXcfhxReportFile(), fileName));
}
}
if(xinchuangService.save(xinchuang)){
if (xinchuangService.save(xinchuang)) {
return xinchuang.getId();
}
throw BizException.wrap("新增失败");
@@ -748,7 +787,7 @@ public class PurchaseManage {
String fileName = xinchuang.getBidName() + "-信创符合性测评报告.";
xinchuang.setXcfhxReportFiles(mhXchxFileHelper.getXchxFile(dto.getMhXcfhxReportFile(), fileName));
}
if(xinchuangService.updateById(xinchuang)){
if (xinchuangService.updateById(xinchuang)) {
return xinchuang.getId();
}
throw BizException.wrap("编辑失败");
@@ -758,7 +797,7 @@ public class PurchaseManage {
return mhXchxFileHelper.getXchxFile(code, null);
}

public void exportXcfhFile(String code,HttpServletResponse response) throws UnsupportedEncodingException {
public void exportXcfhFile(String code, HttpServletResponse response) throws UnsupportedEncodingException {
mhXchxFileHelper.exportReport(code, response);
}
}

hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/SubmitConstructionReq.java → hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/SubmitPurchaseContractRecordReq.java Dosyayı Görüntüle

@@ -1,7 +1,6 @@
package com.hz.pm.api.projectdeclared.model.req;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@@ -11,26 +10,45 @@ import java.time.LocalDateTime;

/**
* <p>
* SubmitConstructionReq
* SubmitPurchaseContractRecordReq
* </p>
*
* @author WendyYang
* @since 00:14 2024/2/23
* @since 13:55 2024/7/9
*/
@Data
@ApiModel(value = "合同对象")
public class SubmitConstructionReq {
public class SubmitPurchaseContractRecordReq {

@ApiModelProperty("项目ID")
@NotNull(message = "项目ID不能为空")
@NotNull(message = "请传项目ID")
private Long projectId;

@ApiModelProperty("合同ID")
private Long constructionId;

@ApiModelProperty("标段ID")
private Long bidId;

@ApiModelProperty("标段类型")
private Integer bidType;

@ApiModelProperty("供应商")
private String supplier;

@ApiModelProperty("供应商社会信用代码")
private String supplierSocialCreditCode;

@ApiModelProperty("投标文件")
private String biddingDoc;

@ApiModelProperty("中标通知书")
private String acceptanceLetter;

@ApiModelProperty("标段建设内容")
private String bidBuildContent;

// 合同信息

@ApiModelProperty("合同ID")
private Long constructionId;

@ApiModelProperty("合同名称")
private String name;

@@ -53,4 +71,5 @@ public class SubmitConstructionReq {
@ApiModelProperty("供应商联系方式")
private String supplierContactInfo;


}

+ 0
- 48
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/req/SubmitPurchaseRecordReq.java Dosyayı Görüntüle

@@ -1,48 +0,0 @@
package com.hz.pm.api.projectdeclared.model.req;

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
* <p>
* 采购信息备案提交参数类
* </p>
*
* @author WendyYang
* @since 11:34 2024/2/22
*/
@Data
@AllArgsConstructor
public class SubmitPurchaseRecordReq {

@ApiModelProperty("项目ID")
@NotNull(message = "请传项目ID")
private Long projectId;

@ApiModelProperty("标段ID")
private Long bidId;

@ApiModelProperty("标段类型")
private Integer bidType;

@ApiModelProperty("供应商")
private String supplier;

@ApiModelProperty("供应商社会信用代码")
private String supplierSocialCreditCode;

@ApiModelProperty("投标文件")
private String biddingDoc;

@ApiModelProperty("中标通知书")
private String acceptanceLetter;

@ApiModelProperty("标段建设内容")
private String bidBuildContent;

}

+ 1
- 2
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderStatus.java Dosyayı Görüntüle

@@ -20,8 +20,7 @@ import java.util.Optional;
@AllArgsConstructor
public enum TenderStatus implements IStatus<Integer, String> {

TO_BE_SUBMIT_PURCHASE_INFO(ProjectStatus.ON_PURCHASING, 101, "待填写采购信息"),
TO_BE_SUBMIT_CONSTRUCTION_INFO(ProjectStatus.ON_PURCHASING, 102, "待填写合同信息"),
TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO(ProjectStatus.ON_PURCHASING, 101, "待填写采购&合同信息"),
TO_BE_SUBMIT_OPERATION_PLAN(ProjectStatus.ON_PURCHASING, 103, "待填写实施计划"),
TO_BE_SUBMIT_FIRST_INSPECTED_INFO(ProjectStatus.TO_BE_FIRST_INSPECTED, 201, "待上传初验材料"),
TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY(ProjectStatus.ON_PILOT_RUNNING, 401, "待终验申报"),


Yükleniyor…
İptal
Kaydet