Browse Source

增加采购意向查询接口

tags/24080901
WendyYang 9 months ago
parent
commit
cf521a4618
6 changed files with 1557 additions and 59 deletions
  1. +3
    -56
      hz-pm-api/src/main/java/com/hz/pm/api/external/MhApiClient.java
  2. +7
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java
  3. +30
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java
  4. +18
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/enumerization/PurchaseScopeEnum.java
  5. +1398
    -0
      hz-pm-api/src/main/resources/response/ret-purchase-intention.json
  6. +101
    -0
      hz-pm-api/src/main/resources/response/ret-purchase-method.json

+ 3
- 56
hz-pm-api/src/main/java/com/hz/pm/api/external/MhApiClient.java View File

@@ -1,6 +1,7 @@
package com.hz.pm.api.external; package com.hz.pm.api.external;


import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.io.resource.ClassPathResource;
import cn.hutool.core.lang.TypeReference; import cn.hutool.core.lang.TypeReference;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
@@ -15,7 +16,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;


import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List; import java.util.List;


import static cn.hutool.core.date.DatePattern.NORM_DATETIME_FORMATTER; import static cn.hutool.core.date.DatePattern.NORM_DATETIME_FORMATTER;
@@ -128,65 +128,13 @@ public class MhApiClient {
return Boolean.FALSE; return Boolean.FALSE;
} }


static final String DICT_RET_JSON = "{\n" +
" \"code\": 200,\n" +
" \"msg\": \"success\",\n" +
" \"data\": [\n" +
" {\n" +
" \"id\": \"035931f1fdb698cdf0d4cb7a04154a34\",\n" +
" \"dictSort\": 0,\n" +
" \"dictLabel\": \"竞争性切磋\",\n" +
" \"dictValue\": \"JZXQC\",\n" +
" \"dictType\": \"buy_way\",\n" +
" \"dictId\": \"6f578f6f717a5d5bb0bf63a9b0870239\",\n" +
" \"isDefault\": \"N\",\n" +
" \"status\": \"0\",\n" +
" \"remark\": null,\n" +
" \"createTime\": \"2024-01-3021:21:40\",\n" +
" \"updateTime\": null,\n" +
" \"createBy\": \"7b40b2e2d396930d4f8567fd3d47a39e\",\n" +
" \"updateBy\": \"\"\n" +
" },\n" +
" {\n" +
" \"id\": \"1b66784a1af14660186d5e3e40dec96b\",\n" +
" \"dictSort\": 0,\n" +
" \"dictLabel\": \"询价\",\n" +
" \"dictValue\": \"XJ\",\n" +
" \"dictType\": \"buy_way\",\n" +
" \"dictId\": \"6f578f6f717a5d5bb0bf63a9b0870239\",\n" +
" \"isDefault\": \"N\",\n" +
" \"status\": \"0\",\n" +
" \"remark\": null,\n" +
" \"createTime\": \"2024-01-3021:22:04\",\n" +
" \"updateTime\": null,\n" +
" \"createBy\": \"7b40b2e2d396930d4f8567fd3d47a39e\",\n" +
" \"updateBy\": \"\"\n" +
" },\n" +
" {\n" +
" \"id\": \"fc5d7c2cb97b15db54e3f6265df9e5f1\",\n" +
" \"dictSort\": 0,\n" +
" \"dictLabel\": \"邀请招标\",\n" +
" \"dictValue\": \"YQZB\",\n" +
" \"dictType\": \"buy_way\",\n" +
" \"dictId\": \"6f578f6f717a5d5bb0bf63a9b0870239\",\n" +
" \"isDefault\": \"N\",\n" +
" \"status\": \"0\",\n" +
" \"remark\": null,\n" +
" \"createTime\": \"2024-01-3021:18:39\",\n" +
" \"updateTime\": null,\n" +
" \"createBy\": \"7b40b2e2d396930d4f8567fd3d47a39e\",\n" +
" \"updateBy\": \"\"\n" +
" }\n" +
" ]\n" +
"}";

public List<MhDictDTO> dictListByType(MhDictType dictType) { public List<MhDictDTO> dictListByType(MhDictType dictType) {
String retBody; String retBody;
if (!environmentUtil.isDevEnv()) { if (!environmentUtil.isDevEnv()) {
String url = mhApiHost + DICT_URL; String url = mhApiHost + DICT_URL;
retBody = HttpUtil.get(url + "?dictType=" + dictType); retBody = HttpUtil.get(url + "?dictType=" + dictType);
} else { } else {
retBody = DICT_RET_JSON;
retBody = new ClassPathResource("/response/ret-purchase-method.json").readUtf8Str();
} }
MhRetDTO<List<MhDictDTO>> retObj = JSONUtil.toBean(retBody, MhRetDTO<List<MhDictDTO>> retObj = JSONUtil.toBean(retBody,
new TypeReference<MhRetDTO<List<MhDictDTO>>>() { new TypeReference<MhRetDTO<List<MhDictDTO>>>() {
@@ -205,7 +153,7 @@ public class MhApiClient {
String url = mhApiHost + PURCHASE_NOTICE_GET; String url = mhApiHost + PURCHASE_NOTICE_GET;
retBody = HttpUtil.get(url + "?unitId=" + unitId); retBody = HttpUtil.get(url + "?unitId=" + unitId);
} else { } else {
return Collections.emptyList();
retBody = new ClassPathResource("/response/ret-purchase-intention.json").readUtf8Str();
} }
MhRetDTO<List<MhPurchaseIntentionDTO>> retObj = JSONUtil.toBean(retBody, MhRetDTO<List<MhPurchaseIntentionDTO>> retObj = JSONUtil.toBean(retBody,
new TypeReference<MhRetDTO<List<MhPurchaseIntentionDTO>>>() { new TypeReference<MhRetDTO<List<MhPurchaseIntentionDTO>>>() {
@@ -218,5 +166,4 @@ public class MhApiClient {
} }
} }



} }

+ 7
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java View File

@@ -4,6 +4,7 @@ import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.projectdeclared.manage.PurchaseManage; import com.hz.pm.api.projectdeclared.manage.PurchaseManage;
import com.hz.pm.api.projectdeclared.model.dto.PurchaseSaveDTO; import com.hz.pm.api.projectdeclared.model.dto.PurchaseSaveDTO;
import com.hz.pm.api.projectdeclared.model.req.*; import com.hz.pm.api.projectdeclared.model.req.*;
import com.hz.pm.api.projectdeclared.model.req.SubmitPurchaseNoticeReq.PurchaseNoticeTenderDTO;
import com.hz.pm.api.projectdeclared.model.vo.PurchaseVO; import com.hz.pm.api.projectdeclared.model.vo.PurchaseVO;
import com.hz.pm.api.projectdeclared.model.vo.TestValidListVO; import com.hz.pm.api.projectdeclared.model.vo.TestValidListVO;
import com.hz.pm.api.projectdeclared.model.vo.XcfhxApplyListVO; import com.hz.pm.api.projectdeclared.model.vo.XcfhxApplyListVO;
@@ -121,4 +122,10 @@ public class PurchaseController {
return purchaseManage.pageXcfhxApply(req); return purchaseManage.pageXcfhxApply(req);
} }


@GetMapping("/purchaseIntention/{unitId}")
@ApiOperation("获取采购意向")
public List<PurchaseNoticeTenderDTO> listPurchaseIntention(@PathVariable Long unitId) {
return purchaseManage.listPurchaseIntention(unitId);
}

} }

+ 30
- 1
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java View File

@@ -2,6 +2,7 @@ package com.hz.pm.api.projectdeclared.manage;


import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@@ -29,6 +30,7 @@ import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.utils.DataScopeUtil; import com.hz.pm.api.datascope.utils.DataScopeUtil;
import com.hz.pm.api.external.MhApiClient; import com.hz.pm.api.external.MhApiClient;
import com.hz.pm.api.external.MhFileClient; import com.hz.pm.api.external.MhFileClient;
import com.hz.pm.api.external.model.dto.MhPurchaseIntentionDTO;
import com.hz.pm.api.external.model.dto.MhPurchaseNoticeDTO; import com.hz.pm.api.external.model.dto.MhPurchaseNoticeDTO;
import com.hz.pm.api.projectdeclared.model.dto.DeclaredProjectExportDTO; import com.hz.pm.api.projectdeclared.model.dto.DeclaredProjectExportDTO;
import com.hz.pm.api.projectdeclared.model.dto.PurchaseSaveDTO; import com.hz.pm.api.projectdeclared.model.dto.PurchaseSaveDTO;
@@ -87,6 +89,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
@@ -408,6 +411,8 @@ public class PurchaseManage {
tmpFile.deleteOnExit(); tmpFile.deleteOnExit();
return fileId; return fileId;
}).collect(Collectors.joining(",")); }).collect(Collectors.joining(","));
PurchaseScopeEnum scope = PurchaseScopeEnum.getByCode(w.getPurchaseScope())
.orElseThrow(() -> BizException.wrap("采购范围无效"));
return MhPurchaseNoticeDTO.builder() return MhPurchaseNoticeDTO.builder()
.bidOpenTime(DateUtil.date(w.getBidStartTime()).toJdkDate()) .bidOpenTime(DateUtil.date(w.getBidStartTime()).toJdkDate())
.endTime(DateUtil.date(w.getBidEndTime()).toJdkDate()) .endTime(DateUtil.date(w.getBidEndTime()).toJdkDate())
@@ -415,7 +420,7 @@ public class PurchaseManage {
.budgetMoney(w.getBidBudget().multiply(BigDecimal.valueOf(10000))) .budgetMoney(w.getBidBudget().multiply(BigDecimal.valueOf(10000)))
.buyItem(w.getBidName()) .buyItem(w.getBidName())
.buyFile(fileIds) .buyFile(fileIds)
.buyScope(PurchaseScopeEnum.PUBLIC.eq(w.getPurchaseScope()) ? "Y" : "N")
.buyScope(scope.getMhCode())
.buyWay(w.getPurchaseMethod()) .buyWay(w.getPurchaseMethod())
.buyUnitName(w.getPurchaseUnit()) .buyUnitName(w.getPurchaseUnit())
.createUnit(w.getPurchaseUnitId().intValue()) .createUnit(w.getPurchaseUnitId().intValue())
@@ -752,4 +757,28 @@ public class PurchaseManage {
return PageVo.of(data, page.getTotal()); return PageVo.of(data, page.getTotal());
} }


public List<PurchaseNoticeTenderDTO> listPurchaseIntention(Long unitId) {
List<MhPurchaseIntentionDTO> intentions = mhApiClient.listPurchaseNotice(unitId);
if (intentions.isEmpty()) {
return Collections.emptyList();
}
return intentions.stream().map(w -> {
PurchaseScopeEnum scope = PurchaseScopeEnum.getByMhCode(w.getBuyScope())
.orElseThrow(() -> BizException.wrap("采购范围无效"));
PurchaseNoticeTenderDTO item = new PurchaseNoticeTenderDTO();
item.setBidName(w.getBuyItem());
item.setBidBudget(BigDecimal.valueOf(w.getBudgetMoney())
.divide(BigDecimal.valueOf(10000), RoundingMode.HALF_UP));
item.setPurchaseMethod(w.getBuyWay());
item.setPurchaseContact(w.getLinkUser());
item.setPurchasePhone(w.getLinkPhone());
item.setPurchaseConnectAddress(w.getDetailAddress());
BizUtils.notNull(w.getBidOpenTime(), t -> item.setBidStartTime(LocalDateTimeUtil.of(t)));
BizUtils.notNull(w.getEndTime(), t -> item.setBidEndTime(LocalDateTimeUtil.of(t)));
item.setPurchaseRemark(w.getBuyDesc());
item.setPurchaseScope(scope.getCode());
return item;
}).collect(Collectors.toList());
}

} }

+ 18
- 2
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/enumerization/PurchaseScopeEnum.java View File

@@ -3,6 +3,9 @@ package com.hz.pm.api.projectdeclared.model.enumerization;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;


import java.util.Arrays;
import java.util.Optional;

/** /**
* <p> * <p>
* PurchaseScopeEnum * PurchaseScopeEnum
@@ -15,14 +18,27 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum PurchaseScopeEnum { public enum PurchaseScopeEnum {


PUBLIC(1, "公开采购"),
PRIVATE(2, "非公开采购");
PUBLIC(1, "公开采购", "Y"),
PRIVATE(2, "非公开采购", "N");


private final Integer code; private final Integer code;
private final String val; private final String val;
private final String mhCode;


public boolean eq(Integer code) { public boolean eq(Integer code) {
return this.code.equals(code); return this.code.equals(code);
} }


public static Optional<PurchaseScopeEnum> getByMhCode(String mhCode) {
return Arrays.stream(values())
.filter(w -> w.getMhCode().equals(mhCode))
.findFirst();
}

public static Optional<PurchaseScopeEnum> getByCode(Integer code) {
return Arrays.stream(values())
.filter(w -> w.getCode().equals(code))
.findFirst();
}

} }

+ 1398
- 0
hz-pm-api/src/main/resources/response/ret-purchase-intention.json
File diff suppressed because it is too large
View File


+ 101
- 0
hz-pm-api/src/main/resources/response/ret-purchase-method.json View File

@@ -0,0 +1,101 @@
{
"code": 200,
"msg": "success",
"data": [
{
"id": "035931f1fdb698cdf0d4cb7a04154a34",
"dictSort": 0,
"dictLabel": "竞争性切磋",
"dictValue": "JZXQC",
"dictType": "buy_way",
"dictId": "6f578f6f717a5d5bb0bf63a9b0870239",
"isDefault": "N",
"status": "0",
"remark": null,
"createTime": "2024-01-3021:21:40",
"updateTime": null,
"createBy": "7b40b2e2d396930d4f8567fd3d47a39e",
"updateBy": ""
},
{
"id": "1b66784a1af14660186d5e3e40dec96b",
"dictSort": 0,
"dictLabel": "询价",
"dictValue": "XJ",
"dictType": "buy_way",
"dictId": "6f578f6f717a5d5bb0bf63a9b0870239",
"isDefault": "N",
"status": "0",
"remark": null,
"createTime": "2024-01-3021:22:04",
"updateTime": null,
"createBy": "7b40b2e2d396930d4f8567fd3d47a39e",
"updateBy": ""
},
{
"id": "fc5d7c2cb97b15db54e3f6265df9e5f1",
"dictSort": 0,
"dictLabel": "邀请招标",
"dictValue": "YQZB",
"dictType": "buy_way",
"dictId": "6f578f6f717a5d5bb0bf63a9b0870239",
"isDefault": "N",
"status": "0",
"remark": null,
"createTime": "2024-01-3021:18:39",
"updateTime": null,
"createBy": "7b40b2e2d396930d4f8567fd3d47a39e",
"updateBy": ""
}
]

}

Loading…
Cancel
Save