1、解决seata标签方法不好使的bug

2、提供询价单查询项目接口
3、处理委托重复提交幂等性问题
This commit is contained in:
dxc
2021-03-11 18:22:36 +08:00
parent 0109e98cbb
commit a12eeeeaa0
10 changed files with 217 additions and 111 deletions

View File

@ -523,6 +523,11 @@ public class ProjectCommonUtil {
*/
public static final int MODULE_TYPE_2 = 2;
/**
* 供应商类型 0邀请 1 拒绝
*/
public static final String SUPPLIER_TYPE_0 = "0";
public static Map<String,String[]> PROCUREMENT_MODE_MAP = new HashMap<String,String[]>(){{
String[] biddingArray = {PROCUREMENT_MODE_1,PROCUREMENT_MODE_2};
String[] recruitArray = {PROCUREMENT_MODE_4};

View File

@ -4,6 +4,7 @@ package com.chinaunicom.mall.ebtp.project.projectentrust.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.common.idempotent.annotation.Idempotent;
import com.chinaunicom.mall.ebtp.project.baseoperlog.aop.OperLog;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrust;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrustVO;
@ -198,6 +199,7 @@ public class ProjectEntrustController{
* @param ebpProjectId 实施项目ID
* @return 返回结果
*/
@Idempotent(expireTime = 10)
@ApiOperation("委托项目信息出始化")
@PostMapping("/initProjectEntrust")
public BaseResponse<Boolean> initProjectEntrust(@ApiParam(value = "实施项目编码", required = true) @RequestParam(name = "ebpProjectId") Long ebpProjectId) {

View File

@ -0,0 +1,28 @@
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.ProjectEntrust;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.ProjectEntrustVO;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.inquiryentity.InquiryNoticeVO;
/**
* seata对应委托初始化接口
* @author daixc
* @date 2021/03/10
*/
public interface ISeataEntrustService extends IBaseService<ProjectEntrust> {
/**
* 初始化接口
* @param projectEntrustVO 询价实体
*/
void initProcess(ProjectEntrustVO projectEntrustVO);
/**
* 推迟询价单信息
* @param inquiryNoticeVO 询价实体
* @return 返回结果
*/
boolean putOffInquiry(InquiryNoticeVO inquiryNoticeVO);
}

View File

@ -0,0 +1,140 @@
package com.chinaunicom.mall.ebtp.project.projectentrust.service.impl;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
import com.chinaunicom.mall.ebtp.common.util.JsonUtils;
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.feign.EbtpRespsApi;
import com.chinaunicom.mall.ebtp.project.feign.entity.DocumentXjVO;
import com.chinaunicom.mall.ebtp.project.feign.entity.TdocVO;
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.ProjectEntrustVO;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.inquiryentity.InquiryNoticeVO;
import com.chinaunicom.mall.ebtp.project.projectentrust.entity.inquiryentity.InquiryVO;
import com.chinaunicom.mall.ebtp.project.projectentrust.service.ISeataEntrustService;
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.IProjectSectionService;
import io.seata.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
/**
* seata对应委托初始化接口实现类
* @author daixc
* @date 2021/03/10
*/
@Service
@Slf4j
public class ISeatatEntrustServiceImpl extends BaseServiceImpl<ProjectEntrustMapper, ProjectEntrust> implements ISeataEntrustService {
@Resource
private IProjectSectionService projectSectionService;
@Resource
private IProjectRecordService projectRecordService;
@Resource
private EbtpRespsApi ebtpRespsApi;
@Resource
private EbtpMallProcessApi processApi;
@Resource
private EbtpMallBidApi bidApi;
@Override
@GlobalTransactional
public void initProcess(ProjectEntrustVO projectEntrustVO){
log.info("询价初始化发起事务 xid:" + RootContext.getXID());
//初始化流程
ProjectRecordVO recordVO = new ProjectRecordVO();
recordVO.setEbpProjectId(projectEntrustVO.getProcurementPlanId());
recordVO = projectRecordService.getList(recordVO).get(0);
Map<String,String> sectionMaps = projectSectionService.getFlowList(recordVO.getId());
InquiryVO inquiryVO = projectEntrustVO.getProjectEntrustExpand().getInquiry();
projectRecordService.initialize(recordVO.getId(), false, sectionMaps);
log.info("初始化询价项目 项目ID"+ recordVO.getId()+ " 流程标识:"+ JsonUtils.objectToJson(sectionMaps)+" 询价评审开始时间"+inquiryVO.getReviewStartTime());
projectRecordService.inquiryInitialize(recordVO.getId(), sectionMaps,inquiryVO.getReviewStartTime());
//标段ID
String sectionId = "";
for(String key : sectionMaps.keySet()){
sectionId = key;
}
//初始化招标文件
DocumentXjVO xjVO = new DocumentXjVO();
xjVO.setTpId(recordVO.getId());
xjVO.setBsId(sectionId);
xjVO.setList(inquiryVO.getAttachmentList());
BaseResponse<Boolean> response = bidApi.insertTp(xjVO);
if(!response.isSuccess()){
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_FIND.customValidName(response.getMessage(),!response.isSuccess());
}
//初始化应答文件
TdocVO tdocVO = new TdocVO();
tdocVO.setList(inquiryVO.getResponseFormatList());
tdocVO.setSectionId(sectionId);
tdocVO.setTpId(recordVO.getId());
tdocVO.setProjectName(recordVO.getProjectName());
tdocVO.setCreateDate(recordVO.getCreateDate());
tdocVO.setSectionName(recordVO.getProjectName()+ "包件");
tdocVO.setEndDate(inquiryVO.getEndTime());
response = ebtpRespsApi.initInquiryResponseFormat(tdocVO);
if(!response.isSuccess()){
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_FIND.customValidName(response.getMessage(),!response.isSuccess());
}
}
/**
* 推迟询价单信息
* @param inquiryNoticeVO 询价实体
* @return 返回结果
*/
@Override
@GlobalTransactional
public boolean putOffInquiry(InquiryNoticeVO inquiryNoticeVO){
log.info("推迟询价单发起事务 xid:" + RootContext.getXID());
boolean result = false;
ProjectSection section = projectSectionService.selectByPlanId(inquiryNoticeVO.getInquiryId());
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValid(null == section);
//修改报价截至时间
if(null != inquiryNoticeVO.getEndTime()){
TdocVO tdocVO = new TdocVO();
tdocVO.setSectionId(section.getId());
tdocVO.setEndDate(inquiryNoticeVO.getEndTime());
BaseResponse<Boolean> response = ebtpRespsApi.updateTdocEndDateBySectionId(tdocVO);
if(!response.isSuccess()){
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValidName(response.getMessage(),!response.isSuccess());
}
result = response.getData();
}
//修改评审室开始时间
if(null != inquiryNoticeVO.getReviewStartTime()){
Map<String, LocalDateTime> updateProcessMap = new HashMap<>(16);
updateProcessMap.put(section.getId(),inquiryNoticeVO.getReviewStartTime());
BaseResponse<Boolean> response = processApi.updateOpenTime(updateProcessMap);
if(!response.isSuccess()){
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValidName(response.getMessage(),!response.isSuccess());
}
result = response.getData();
}
return result;
}
}

View File

@ -2,19 +2,11 @@ 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.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
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.InquiryCommonUtil;
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.feign.EbtpRespsApi;
import com.chinaunicom.mall.ebtp.project.feign.entity.DocumentXjVO;
import com.chinaunicom.mall.ebtp.project.feign.entity.TdocVO;
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;
@ -25,21 +17,15 @@ import com.chinaunicom.mall.ebtp.project.projectentrust.entity.inquiryentity.Inq
import com.chinaunicom.mall.ebtp.project.projectentrust.service.IProjectEntrustExpandService;
import com.chinaunicom.mall.ebtp.project.projectentrust.service.IProjectEntrustInquiryService;
import com.chinaunicom.mall.ebtp.project.projectentrust.service.IProjectEntrustService;
import com.chinaunicom.mall.ebtp.project.projectentrust.service.ISeataEntrustService;
import com.chinaunicom.mall.ebtp.project.projectexception.service.IProjectExceptionService;
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.IProjectSectionService;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
/**
* 项目询价serviceImpl
@ -59,23 +45,11 @@ public class ProjectEntrustInquiryServiceImpl extends BaseServiceImpl<ProjectEnt
@Resource
private IProjectExceptionService exceptionService;
@Resource
private IProjectSectionService projectSectionService;
@Resource
private IProjectEntrustExpandService entrustExpandService;
@Resource
private IProjectSectionService sectionService;
@Resource
private EbtpRespsApi ebtpRespsApi;
@Resource
private EbtpMallProcessApi processApi;
@Resource
private EbtpMallBidApi bidApi;
private ISeataEntrustService seataEntrustInquiryService;
@Override
@Transactional(rollbackFor = Exception.class)
@ -112,7 +86,7 @@ public class ProjectEntrustInquiryServiceImpl extends BaseServiceImpl<ProjectEnt
}
//如果是自主委托询价 初始化后续流程信息
if(StringUtils.equals(ProjectCommonUtil.ORGANIZATION_2,projectEntrustVO.getOrganization())){
initProcess(projectEntrustVO);
seataEntrustInquiryService.initProcess(projectEntrustVO);
}
}
return result;
@ -125,47 +99,12 @@ public class ProjectEntrustInquiryServiceImpl extends BaseServiceImpl<ProjectEnt
switch (inquiryNoticeVO.getInquiryNoticeStatus()){
case ProjectCommonUtil.INQUIRY_NOTICE_STATUS_0:result = initInquiryProject(inquiryNoticeVO);break;
case ProjectCommonUtil.INQUIRY_NOTICE_STATUS_1:result = exceptionService.saveInquiryException(inquiryNoticeVO);break;
case ProjectCommonUtil.INQUIRY_NOTICE_STATUS_2:result = putOffInquiry(inquiryNoticeVO);break;
case ProjectCommonUtil.INQUIRY_NOTICE_STATUS_2:result = seataEntrustInquiryService.putOffInquiry(inquiryNoticeVO);break;
default:ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_UPDATE.throwException();
}
return result;
}
/**
* 推迟询价单信息
* @param inquiryNoticeVO 询价实体
* @return 返回结果
*/
@GlobalTransactional
public boolean putOffInquiry(InquiryNoticeVO inquiryNoticeVO){
boolean result = false;
ProjectSection section = sectionService.selectByPlanId(inquiryNoticeVO.getInquiryId());
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValid(null == section);
//修改报价截至时间
if(null != inquiryNoticeVO.getEndTime()){
TdocVO tdocVO = new TdocVO();
tdocVO.setSectionId(section.getId());
tdocVO.setEndDate(inquiryNoticeVO.getEndTime());
BaseResponse<Boolean> response = ebtpRespsApi.updateTdocEndDateBySectionId(tdocVO);
if(!response.isSuccess()){
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValidName(response.getMessage(),!response.isSuccess());
}
result = response.getData();
}
//修改评审室开始时间
if(null != inquiryNoticeVO.getReviewStartTime()){
Map<String, LocalDateTime> updateProcessMap = new HashMap<>(16);
updateProcessMap.put(section.getId(),inquiryNoticeVO.getReviewStartTime());
BaseResponse<Boolean> response = processApi.updateOpenTime(updateProcessMap);
if(!response.isSuccess()){
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValidName(response.getMessage(),!response.isSuccess());
}
result = response.getData();
}
return result;
}
/**
* 询价返回告知结果进行初始化项目以及询价文件和投标应答格式文件信息
@ -189,53 +128,12 @@ public class ProjectEntrustInquiryServiceImpl extends BaseServiceImpl<ProjectEnt
ProjectEntrustVO entrustVO = BeanUtil.toBean(projectEntrust,ProjectEntrustVO.class);
entrustVO.setProjectEntrustExpand(expand);
initProcess(entrustVO);
seataEntrustInquiryService.initProcess(entrustVO);
}
return result;
}
@GlobalTransactional
public void initProcess(ProjectEntrustVO projectEntrustVO){
//初始化流程
ProjectRecordVO recordVO = new ProjectRecordVO();
recordVO.setEbpProjectId(projectEntrustVO.getProcurementPlanId());
recordVO = projectRecordService.getList(recordVO).get(0);
Map<String,String> sectionMaps = projectSectionService.getFlowList(recordVO.getId());
InquiryVO inquiryVO = projectEntrustVO.getProjectEntrustExpand().getInquiry();
projectRecordService.initialize(recordVO.getId(), false, sectionMaps);
log.info("初始化询价项目 项目ID"+ recordVO.getId()+ " 流程标识:"+ JsonUtils.objectToJson(sectionMaps)+" 询价评审开始时间"+inquiryVO.getReviewStartTime());
projectRecordService.inquiryInitialize(recordVO.getId(), sectionMaps,inquiryVO.getReviewStartTime());
//标段ID
String sectionId = "";
for(String key : sectionMaps.keySet()){
sectionId = key;
}
//初始化招标文件
DocumentXjVO xjVO = new DocumentXjVO();
xjVO.setTpId(recordVO.getId());
xjVO.setBsId(sectionId);
xjVO.setList(inquiryVO.getAttachmentList());
BaseResponse<Boolean> response = bidApi.insertTp(xjVO);
if(!response.isSuccess()){
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_FIND.customValidName(response.getMessage(),!response.isSuccess());
}
//初始化应答文件
TdocVO tdocVO = new TdocVO();
tdocVO.setList(inquiryVO.getResponseFormatList());
tdocVO.setSectionId(sectionId);
tdocVO.setTpId(recordVO.getId());
tdocVO.setProjectName(recordVO.getProjectName());
tdocVO.setCreateDate(recordVO.getCreateDate());
tdocVO.setSectionName(recordVO.getProjectName()+ "包件");
tdocVO.setEndDate(inquiryVO.getEndTime());
response = ebtpRespsApi.initInquiryResponseFormat(tdocVO);
if(!response.isSuccess()){
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_ENTRUST_NOT_FIND.customValidName(response.getMessage(),!response.isSuccess());
}
}
/**
* 初始化委托单信息

View File

@ -317,6 +317,7 @@ public class ProjectEntrustServiceImpl extends BaseServiceImpl<ProjectEntrustMap
if(isUpdate){
projectEntrustVO.setId(projectEntrust.getId());
projectEntrustVO.setStatus(projectEntrust.getStatus());
projectEntrustVO.getProjectEntrustExpand().setEntrustId(projectEntrust.getId());
result = updateProject(projectEntrustVO);
}else{
result = saveProject(projectEntrustVO);

View File

@ -188,4 +188,20 @@ public class ProjectRecordController{
return BaseResponse.success(projectRecordService.getUserProjectRecordListByProcurementMode(limit));
}
/**
* 查询数据
*
* @param inquiryId 询价单id
*
* @return 返回结果
*/
@ApiOperation("根据询价单id查询数据")
@GetMapping("/getByInquiryId/{inquiryId}")
public BaseResponse<ProjectRecordVO> getByInquiryId(@ApiParam(value = "主键id", required = true) @PathVariable String inquiryId){
ProjectRecord projectRecord = projectRecordService.getByInquiryId(inquiryId);
return BaseResponse.success(BeanUtil.toBean(projectRecord,ProjectRecordVO.class));
}
}

View File

@ -69,4 +69,6 @@ public class ProjectRecordVO extends ProjectRecord implements Serializable {
@ApiModelProperty(value = "首页查询时间")
private String selectDate;
@ApiModelProperty(value = "不等于的状态字段")
private Integer neStatus;
}

View File

@ -134,4 +134,6 @@ public interface IProjectRecordService extends IBaseService<ProjectRecord>{
* @param reviewStartTime 评审开始时间
*/
void inquiryInitialize(String id, Map<String, String> sectionMaps, LocalDateTime reviewStartTime);
ProjectRecord getByInquiryId(String inquiryId);
}

View File

@ -46,9 +46,11 @@ import com.chinaunicom.mall.ebtp.project.sectionmaterial.service.ISectionMateria
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.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -139,12 +141,12 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
query.eq("status", projectRecordVO.getStatus());
}
if(null != projectRecordVO.getSelectIds() && projectRecordVO.getSelectIds().size() > 0){
query.in("id",projectRecordVO.getSelectIds());
if(null != projectRecordVO.getNeStatus()){
query.ne("status", projectRecordVO.getNeStatus());
}
if(StringUtils.isNotBlank(projectRecordVO.getEbpProjectId())){
query.eq("ebp_project_id", projectRecordVO.getEbpProjectId());
if(null != projectRecordVO.getSelectIds() && projectRecordVO.getSelectIds().size() > 0){
query.in("id",projectRecordVO.getSelectIds());
}
if(StringUtils.isNotBlank(projectRecordVO.getEbpProjectId())){
@ -213,6 +215,7 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
@GlobalTransactional
public boolean submitProject(String id){
log.info("项目提交流程发起事务 xid:" + RootContext.getXID());
checkSubmitProject(id);
ProjectRecord projectRecord = this.getById(id);
@ -416,6 +419,14 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
log.info("询价初始化流程返回 projectID"+id + " 返回结果:"+JsonUtils.objectToJson(result));
}
@Override
public ProjectRecord getByInquiryId(String inquiryId) {
ProjectRecordVO vo = new ProjectRecordVO();
vo.setEbpProjectId(inquiryId);
vo.setNeStatus(ProjectCommonUtil.PROJECT_STATUS_9);
return this.getOne(this.getProjectRecordQueryWrapper(vo));
}
@Override
public boolean assent(String entrustId) {
@ -691,6 +702,7 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
supplier.setId(PropertyUtils.getSnowflakeId());
supplier.setProjectId(projectId);
supplier.setSectionId(sectionId);
supplier.setSupplierType(ProjectCommonUtil.SUPPLIER_TYPE_0);
supplier.setSupplierId(String.valueOf(projSuppRelVO.getSuppId()));
supplier.setSupplierName(String.valueOf(projSuppRelVO.getSuppName()));
supplier.setSuppLinkManId(String.valueOf(projSuppRelVO.getSuppLinkManId()));