@@ -226,7 +226,7 @@ public class ProjectDeclareAction { | |||||
@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED") | @OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_FINALLY_INSPECTED") | ||||
public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) { | public void PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(Message<ProjectStatusChangeEvent> message) { | ||||
Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | Project project = (Project) message.getHeaders().get(PROJECT_DECLARE); | ||||
project.setStatus(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode()); | |||||
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode()); | |||||
} | } | ||||
@OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED") | @OnTransition(source = "UNDER_CONSTRUCTION", target = "TO_BE_PURCHASED") | ||||
@@ -0,0 +1,87 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.controller; | |||||
import com.ningdatech.basic.model.PageVo; | |||||
import com.ningdatech.pmapi.common.util.ExcelDownUtil; | |||||
import com.ningdatech.pmapi.projectdeclared.manage.ConstructionManage; | |||||
import com.ningdatech.pmapi.projectdeclared.manage.ProjectAdjustmentManage; | |||||
import com.ningdatech.pmapi.projectdeclared.manage.PurchaseManage; | |||||
import com.ningdatech.pmapi.projectdeclared.model.dto.ContractSaveDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.dto.PreInsSaveDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.dto.PurchaseSaveDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.vo.ContractVO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.vo.PreInsVO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.vo.PurchaseVO; | |||||
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | |||||
import io.swagger.annotations.Api; | |||||
import io.swagger.annotations.ApiOperation; | |||||
import lombok.RequiredArgsConstructor; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.springframework.validation.annotation.Validated; | |||||
import org.springframework.web.bind.annotation.*; | |||||
import javax.servlet.http.HttpServletResponse; | |||||
/** | |||||
* @Classname ConstructionController | |||||
* @Description 申报项目-建设中 | |||||
* @Date 2023/5/29 09:29 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Slf4j | |||||
@Validated | |||||
@RestController | |||||
@RequestMapping("/api/v1/declared/construction") | |||||
@Api(value = "ConstructionController", tags = "申报管理-建设中") | |||||
@RequiredArgsConstructor | |||||
public class ConstructionController { | |||||
private final ConstructionManage constructionManage; | |||||
@ApiOperation(value = "待合同备案的项目列表", notes = "合同备案的项目列表") | |||||
@GetMapping("/contract/project-list") | |||||
public PageVo<ProjectLibListItemVO> projectlist(@ModelAttribute ProjectListReq req) { | |||||
return constructionManage.projectLibList(req); | |||||
} | |||||
@GetMapping("/contract/export") | |||||
@ApiOperation("待合同备案的项目列表导出") | |||||
public void exportList(ProjectListReq req, HttpServletResponse response){ | |||||
ExcelDownUtil.downXls(response,req,constructionManage::exportList); | |||||
} | |||||
@ApiOperation(value = "合同备案的详情-通过项目ID", notes = "合同备案的详情-通过项目ID") | |||||
@GetMapping("/contract/detail/{projectId}") | |||||
public ContractVO detailContractByProjectId(@PathVariable Long projectId) { | |||||
return constructionManage.detailContractByProjectId(projectId); | |||||
} | |||||
@ApiOperation(value = "填写合同信息", notes = "填写合同信息") | |||||
@PostMapping("/submit-contract") | |||||
public String submitContract(@Validated @RequestBody ContractSaveDTO dto) { | |||||
return constructionManage.submitContract(dto); | |||||
} | |||||
@ApiOperation(value = "待初验备案的项目列表", notes = "待初验备案的项目列表") | |||||
@GetMapping("/pre-ins/project-list") | |||||
public PageVo<ProjectLibListItemVO> preProjectlist(@ModelAttribute ProjectListReq req) { | |||||
return constructionManage.preProjectlist(req); | |||||
} | |||||
@GetMapping("/pre-ins/export") | |||||
@ApiOperation("待初验备案的项目列表导出") | |||||
public void exportPreList(ProjectListReq req, HttpServletResponse response){ | |||||
ExcelDownUtil.downXls(response,req,constructionManage::exportPreList); | |||||
} | |||||
@ApiOperation(value = "初验备案的详情-通过项目ID", notes = "初验备案的详情-通过项目ID") | |||||
@GetMapping("/pre-ins/detail/{projectId}") | |||||
public PreInsVO detailPreInsByProjectId(@PathVariable Long projectId) { | |||||
return constructionManage.detailPreInsByProjectId(projectId); | |||||
} | |||||
@ApiOperation(value = "填写初验信息", notes = "填写初验信息") | |||||
@PostMapping("/submit-pre-ins") | |||||
public String submitPreIns(@Validated @RequestBody PreInsSaveDTO dto) { | |||||
return constructionManage.submitPreIns(dto); | |||||
} | |||||
} |
@@ -40,9 +40,9 @@ public class PurchaseController { | |||||
} | } | ||||
@ApiOperation(value = "采购结果备案详情", notes = "采购结果备案详情") | @ApiOperation(value = "采购结果备案详情", notes = "采购结果备案详情") | ||||
@GetMapping("/detail/{ProjectId}") | |||||
public PurchaseVO detailByProjectId(@PathVariable Long ProjectId) { | |||||
return purchaseManage.detailByProjectId(ProjectId); | |||||
@GetMapping("/detail/{projectId}") | |||||
public PurchaseVO detailByProjectId(@PathVariable Long projectId) { | |||||
return purchaseManage.detailByProjectId(projectId); | |||||
} | } | ||||
@GetMapping("/export") | @GetMapping("/export") | ||||
@@ -0,0 +1,493 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.manage; | |||||
import cn.hutool.core.bean.BeanUtil; | |||||
import cn.hutool.core.collection.CollUtil; | |||||
import com.alibaba.excel.EasyExcel; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
import com.google.common.collect.Lists; | |||||
import com.ningdatech.basic.function.VUtils; | |||||
import com.ningdatech.basic.model.PageVo; | |||||
import com.ningdatech.basic.util.CollUtils; | |||||
import com.ningdatech.basic.util.NdDateUtils; | |||||
import com.ningdatech.pmapi.common.constant.BizConst; | |||||
import com.ningdatech.pmapi.common.helper.UserInfoHelper; | |||||
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; | |||||
import com.ningdatech.pmapi.common.util.ExcelDownUtil; | |||||
import com.ningdatech.pmapi.common.util.ExcelExportStyle; | |||||
import com.ningdatech.pmapi.projectdeclared.model.dto.ContractSaveDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.dto.DeclaredProjectExportDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.dto.PreInsSaveDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.dto.PurchaseSaveDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.Contract; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PaymentPlan; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PreInsAcceptancePerson; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.Purchase; | |||||
import com.ningdatech.pmapi.projectdeclared.model.vo.*; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IContractService; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IPaymentPlanService; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IPreInsAcceptancePersonService; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IPurchaseService; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectTypeEnum; | |||||
import com.ningdatech.pmapi.projectlib.helper.ProjectHelper; | |||||
import com.ningdatech.pmapi.projectlib.model.entity.Project; | |||||
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectService; | |||||
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; | |||||
import com.ningdatech.pmapi.user.util.LoginUserUtil; | |||||
import lombok.RequiredArgsConstructor; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.springframework.beans.BeanUtils; | |||||
import org.springframework.stereotype.Component; | |||||
import javax.servlet.http.HttpServletResponse; | |||||
import java.io.IOException; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDate; | |||||
import java.time.LocalDateTime; | |||||
import java.time.format.DateTimeFormatter; | |||||
import java.util.Collections; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.Objects; | |||||
import java.util.concurrent.atomic.AtomicInteger; | |||||
import java.util.stream.Collectors; | |||||
/** | |||||
* @Classname ContructionManage | |||||
* @Description | |||||
* @Date 2023/5/29 14:48 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Component | |||||
@Slf4j | |||||
@RequiredArgsConstructor | |||||
public class ConstructionManage { | |||||
private final IProjectService projectService; | |||||
private final UserInfoHelper userInfoHelper; | |||||
private final IPurchaseService purchaseService; | |||||
private final IContractService contractService; | |||||
private final IPaymentPlanService paymentPlanService; | |||||
private final IPreInsAcceptancePersonService acceptancePersonService; | |||||
private final StateMachineUtils stateMachineUtils; | |||||
/** | |||||
* 待采购的-项目列表 | |||||
* @param req | |||||
* @return | |||||
*/ | |||||
public PageVo<ProjectLibListItemVO> projectLibList(ProjectListReq req) { | |||||
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); | |||||
VUtils.isTrue(Objects.isNull(user)).throwMessage("获取登录用户失败!"); | |||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req); | |||||
//建设中状态 | |||||
query.eq(Project::getStatus,ProjectStatusEnum.UNDER_CONSTRUCTION.getCode()); | |||||
query.eq(Project::getStage,ProjectStatusEnum.PROJECT_APPROVED.getCode()); | |||||
query.eq(Project::getNewest,Boolean.TRUE); | |||||
query.orderByAsc(Project::getTransactionTime); | |||||
Page<Project> page = projectService.page(req.page(), query); | |||||
long total; | |||||
if ((total = page.getTotal()) == 0) { | |||||
return PageVo.empty(); | |||||
} | |||||
List<Long> projectIds = page.getRecords().stream().map(Project::getId).collect(Collectors.toList()); | |||||
List<Purchase> purchases = purchaseService.list(Wrappers.lambdaQuery(Purchase.class) | |||||
.in(Purchase::getProjectId, projectIds)); | |||||
Map<Long, Purchase> purchaseMap = purchases.stream().collect(Collectors.toMap(Purchase::getProjectId, v -> v)); | |||||
List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { | |||||
ProjectLibListItemVO item = new ProjectLibListItemVO(); | |||||
item.setId(w.getId()); | |||||
item.setProjectName(w.getProjectName()); | |||||
item.setCreateOn(w.getCreateOn()); | |||||
item.setDeclaredAmount(w.getDeclareAmount()); | |||||
item.setStage(w.getStage()); | |||||
item.setStatus(w.getStatus()); | |||||
item.setProjectType(w.getProjectType()); | |||||
item.setProjectYear(w.getProjectYear()); | |||||
item.setBuildOrg(w.getBuildOrgName()); | |||||
item.setBizDomain(w.getBizDomain()); | |||||
item.setProcessStatus(w.getProcessStatus()); | |||||
item.setInstCode(w.getInstCode()); | |||||
item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); | |||||
item.setApprovedAmount(w.getApprovalAmount()); | |||||
item.setApprovalDate(w.getApprovalDate()); | |||||
if(purchaseMap.containsKey(w.getId())){ | |||||
Purchase purchase = purchaseMap.get(w.getId()); | |||||
item.setTransactionAmount(purchase.getTransactionAmount()); | |||||
item.setTransactionTime(purchase.getTransactionTime()); | |||||
} | |||||
return item; | |||||
}); | |||||
return PageVo.of(records, total); | |||||
} | |||||
public void exportList(HttpServletResponse response, ProjectListReq param) { | |||||
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); | |||||
VUtils.isTrue(Objects.isNull(user)).throwMessage("获取登录用户失败!"); | |||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param); | |||||
//待采购状态 | |||||
query.eq(Project::getStatus,ProjectStatusEnum.UNDER_CONSTRUCTION.getCode()); | |||||
query.eq(Project::getStage,ProjectStatusEnum.PROJECT_APPROVED.getCode()); | |||||
query.eq(Project::getNewest,Boolean.TRUE); | |||||
query.orderByAsc(Project::getTransactionTime); | |||||
List<Project> records = projectService.list(query); | |||||
AtomicInteger serialNumber = new AtomicInteger(0); | |||||
List<DeclaredProjectExportDTO> collect = Lists.newArrayList(); | |||||
if(CollUtil.isNotEmpty(records)){ | |||||
List<Long> projectIds = records.stream().map(Project::getId).collect(Collectors.toList()); | |||||
List<Purchase> purchases = purchaseService.list(Wrappers.lambdaQuery(Purchase.class) | |||||
.in(Purchase::getProjectId, projectIds)); | |||||
Map<Long, Purchase> purchaseMap = purchases.stream().collect(Collectors.toMap(Purchase::getProjectId, v -> v)); | |||||
collect = records.stream().map(r -> { | |||||
DeclaredProjectExportDTO exportDTO = new DeclaredProjectExportDTO(); | |||||
BeanUtils.copyProperties(r, exportDTO); | |||||
exportDTO.setProjectTypeName(ProjectTypeEnum.getDesc(r.getProjectType())); | |||||
exportDTO.setStatusName(ProjectStatusEnum.getDesc(r.getStatus())); | |||||
String createOnStr = NdDateUtils.format(r.getCreateOn(), "yyyy-MM-dd HH:mm"); | |||||
exportDTO.setCreateOn(createOnStr); | |||||
exportDTO.setSerialNumber(serialNumber.incrementAndGet()); | |||||
if(purchaseMap.containsKey(r.getId())){ | |||||
Purchase purchase = purchaseMap.get(r.getId()); | |||||
exportDTO.setTransactionAmount(purchase.getTransactionAmount()); | |||||
exportDTO.setTransactionTime(purchase.getTransactionTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); | |||||
} | |||||
return exportDTO; | |||||
}).collect(Collectors.toList()); | |||||
} | |||||
String fileName = "合同备案项目列表"; | |||||
ExcelDownUtil.setFileName(fileName,response); | |||||
//数据导出处理函数 | |||||
try { | |||||
EasyExcel.write(response.getOutputStream(), DeclaredProjectExportDTO.class) | |||||
.autoCloseStream(false) | |||||
.registerWriteHandler(ExcelExportStyle.formalStyle()) | |||||
.sheet(fileName) | |||||
.doWrite(collect); | |||||
} catch (IOException e) { | |||||
throw new RuntimeException(e); | |||||
} catch (Exception e) { | |||||
throw new RuntimeException(e); | |||||
} | |||||
} | |||||
/** | |||||
* 获取合同备案详情 | |||||
* @param projectId | |||||
* @return | |||||
*/ | |||||
public ContractVO detailContractByProjectId(Long projectId) { | |||||
Contract contract = contractService.getOne(Wrappers.lambdaQuery(Contract.class) | |||||
.eq(Contract::getProjectId, projectId) | |||||
.last(BizConst.LIMIT_1)); | |||||
ContractVO vo = BeanUtil.copyProperties(contract, ContractVO.class); | |||||
List<PaymentPlan> payments = paymentPlanService.list(Wrappers.lambdaQuery(PaymentPlan.class) | |||||
.eq(PaymentPlan::getProjectId, projectId) | |||||
.orderByAsc(PaymentPlan::getPaymentTime)); | |||||
if(CollUtil.isNotEmpty(payments)){ | |||||
vo.setPayments(convertPayments(payments,contract.getTotalAmount())); | |||||
} | |||||
return vo; | |||||
} | |||||
private List<PaymentPlanVO> convertPayments(List<PaymentPlan> payments,BigDecimal totalAmount) { | |||||
if(CollUtil.isEmpty(payments)){ | |||||
return Collections.emptyList(); | |||||
} | |||||
return payments.stream().map(p -> { | |||||
PaymentPlanVO vo = BeanUtil.copyProperties(p, PaymentPlanVO.class); | |||||
vo.setRatio((Objects.isNull(totalAmount)||totalAmount.compareTo(BigDecimal.ZERO) == 0) ? "0%" | |||||
: p.getPaymentAmount().multiply(BigDecimal.valueOf(100)) | |||||
.divide(totalAmount,BigDecimal.ROUND_CEILING,BigDecimal.ROUND_CEILING) + "%"); | |||||
return vo; | |||||
}) | |||||
.collect(Collectors.toList()); | |||||
} | |||||
/** | |||||
* 填写合同信息 | |||||
* @param dto | |||||
* @return | |||||
*/ | |||||
public String submitContract(ContractSaveDTO dto) { | |||||
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); | |||||
String employeeCode = user.getEmployeeCode(); | |||||
VUtils.isTrue(StringUtils.isBlank(employeeCode)).throwMessage("获取登录用户 员工号 失败!"); | |||||
Long projectId = dto.getProjectId(); | |||||
VUtils.isTrue(Objects.isNull(projectId)).throwMessage("提交失败 缺少项目ID!"); | |||||
Project project = projectService.getNewProject(dto.getProjectId()); | |||||
VUtils.isTrue(Objects.isNull(project)).throwMessage("提交失败 此项目不存在!"); | |||||
//首先要判断 项目当前状态 是不是 采购结果备案 | |||||
VUtils.isTrue(!ProjectStatusEnum.UNDER_CONSTRUCTION.getCode().equals(project.getStatus()) || | |||||
!ProjectStatusEnum.PROJECT_APPROVED.getCode().equals(project.getStage())) | |||||
.throwMessage("提交失败 该项目不是 建设中或者已立项阶段"); | |||||
Contract contractEntity = new Contract(); | |||||
Contract contract = contractService.getOne(Wrappers.lambdaQuery(Contract.class) | |||||
.eq(Contract::getProjectId, projectId) | |||||
.last(BizConst.LIMIT_1)); | |||||
BeanUtil.copyProperties(dto,contractEntity); | |||||
if(Objects.isNull(contract)){ | |||||
contractEntity.setCreateOn(LocalDateTime.now()); | |||||
contractEntity.setCreateBy(employeeCode); | |||||
}else{ | |||||
contractEntity.setId(contract.getId()); | |||||
} | |||||
contractEntity.setProjectId(projectId); | |||||
if(contractService.saveOrUpdate(contractEntity)){ | |||||
//存 付款计划信心 | |||||
if(Objects.nonNull(dto.getPayments())){ | |||||
//先删除 | |||||
paymentPlanService.remove(Wrappers.lambdaQuery(PaymentPlan.class) | |||||
.eq(PaymentPlan::getProjectId,projectId)); | |||||
if(CollUtil.isNotEmpty(dto.getPayments())){ | |||||
List<PaymentPlan> payments = dto.getPayments().stream().map(d -> { | |||||
PaymentPlan plan = BeanUtil.copyProperties(d, PaymentPlan.class); | |||||
plan.setProjectId(projectId); | |||||
plan.setCreateOn(LocalDateTime.now()); | |||||
plan.setUpdateOn(LocalDateTime.now()); | |||||
plan.setCreateBy(employeeCode); | |||||
plan.setUpdateBy(employeeCode); | |||||
return plan; | |||||
}).collect(Collectors.toList()); | |||||
paymentPlanService.saveBatch(payments); | |||||
} | |||||
} | |||||
} | |||||
//判断下 如果和初验都完成了 才进入下一阶段 | |||||
if(StringUtils.isNotBlank(project.getPreliminaryInspectionMaterials())){ | |||||
//进入到下一状态 | |||||
stateMachineUtils.pass(project); | |||||
} | |||||
project.setUpdateOn(LocalDateTime.now()); | |||||
if(Objects.nonNull(dto.getDeliveryTime())){ | |||||
project.setDeliveryTime(dto.getDeliveryTime()); | |||||
} | |||||
if(Objects.nonNull(dto.getTotalAmount())){ | |||||
project.setContractAmount(dto.getTotalAmount()); | |||||
} | |||||
projectService.updateById(project); | |||||
return "填写成功"; | |||||
} | |||||
/** | |||||
* 待初验项目列表 | |||||
* @param req | |||||
* @return | |||||
*/ | |||||
public PageVo<ProjectLibListItemVO> preProjectlist(ProjectListReq req) { | |||||
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); | |||||
VUtils.isTrue(Objects.isNull(user)).throwMessage("获取登录用户失败!"); | |||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req); | |||||
//建设中状态 | |||||
query.eq(Project::getStatus,ProjectStatusEnum.UNDER_CONSTRUCTION.getCode()); | |||||
query.eq(Project::getStage,ProjectStatusEnum.PROJECT_APPROVED.getCode()); | |||||
query.eq(Project::getNewest,Boolean.TRUE); | |||||
//交货时间 排序 | |||||
query.isNotNull(Project::getDeliveryTime); | |||||
query.orderByAsc(Project::getDeliveryTime); | |||||
Page<Project> page = projectService.page(req.page(), query); | |||||
long total; | |||||
if ((total = page.getTotal()) == 0) { | |||||
return PageVo.empty(); | |||||
} | |||||
List<Long> projectIds = page.getRecords().stream().map(Project::getId).collect(Collectors.toList()); | |||||
List<Purchase> purchases = purchaseService.list(Wrappers.lambdaQuery(Purchase.class) | |||||
.in(Purchase::getProjectId, projectIds)); | |||||
Map<Long, Purchase> purchaseMap = purchases.stream().collect(Collectors.toMap(Purchase::getProjectId, v -> v)); | |||||
List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { | |||||
ProjectLibListItemVO item = new ProjectLibListItemVO(); | |||||
item.setId(w.getId()); | |||||
item.setProjectName(w.getProjectName()); | |||||
item.setCreateOn(w.getCreateOn()); | |||||
item.setDeclaredAmount(w.getDeclareAmount()); | |||||
item.setStage(w.getStage()); | |||||
item.setStatus(w.getStatus()); | |||||
item.setProjectType(w.getProjectType()); | |||||
item.setProjectYear(w.getProjectYear()); | |||||
item.setBuildOrg(w.getBuildOrgName()); | |||||
item.setBizDomain(w.getBizDomain()); | |||||
item.setProcessStatus(w.getProcessStatus()); | |||||
item.setInstCode(w.getInstCode()); | |||||
item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); | |||||
item.setApprovedAmount(w.getApprovalAmount()); | |||||
item.setApprovalDate(w.getApprovalDate()); | |||||
if(purchaseMap.containsKey(w.getId())){ | |||||
Purchase purchase = purchaseMap.get(w.getId()); | |||||
item.setTransactionAmount(purchase.getTransactionAmount()); | |||||
item.setTransactionTime(purchase.getTransactionTime()); | |||||
} | |||||
item.setDeliveryTime(w.getDeliveryTime()); | |||||
item.setContractAmount(w.getContractAmount()); | |||||
item.setAnnualPlanAmount(w.getAnnualPlanAmount()); | |||||
return item; | |||||
}); | |||||
return PageVo.of(records, total); | |||||
} | |||||
public void exportPreList(HttpServletResponse response, ProjectListReq param) { | |||||
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); | |||||
VUtils.isTrue(Objects.isNull(user)).throwMessage("获取登录用户失败!"); | |||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param); | |||||
//待采购状态 | |||||
query.eq(Project::getStatus,ProjectStatusEnum.UNDER_CONSTRUCTION.getCode()); | |||||
query.eq(Project::getStage,ProjectStatusEnum.PROJECT_APPROVED.getCode()); | |||||
query.eq(Project::getNewest,Boolean.TRUE); | |||||
//交货时间 排序 | |||||
query.isNotNull(Project::getDeliveryTime); | |||||
query.orderByAsc(Project::getDeliveryTime); | |||||
List<Project> records = projectService.list(query); | |||||
AtomicInteger serialNumber = new AtomicInteger(0); | |||||
List<DeclaredProjectExportDTO> collect = Lists.newArrayList(); | |||||
if(CollUtil.isNotEmpty(records)){ | |||||
List<Long> projectIds = records.stream().map(Project::getId).collect(Collectors.toList()); | |||||
List<Purchase> purchases = purchaseService.list(Wrappers.lambdaQuery(Purchase.class) | |||||
.in(Purchase::getProjectId, projectIds)); | |||||
Map<Long, Purchase> purchaseMap = purchases.stream().collect(Collectors.toMap(Purchase::getProjectId, v -> v)); | |||||
collect = records.stream().map(r -> { | |||||
DeclaredProjectExportDTO exportDTO = new DeclaredProjectExportDTO(); | |||||
BeanUtils.copyProperties(r, exportDTO); | |||||
exportDTO.setProjectTypeName(ProjectTypeEnum.getDesc(r.getProjectType())); | |||||
exportDTO.setStatusName(ProjectStatusEnum.getDesc(r.getStatus())); | |||||
String createOnStr = NdDateUtils.format(r.getCreateOn(), "yyyy-MM-dd HH:mm"); | |||||
exportDTO.setCreateOn(createOnStr); | |||||
exportDTO.setSerialNumber(serialNumber.incrementAndGet()); | |||||
exportDTO.setDeliveryTime(r.getDeliveryTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); | |||||
exportDTO.setContractAmount(r.getContractAmount()); | |||||
exportDTO.setAnnualPlanAmount(r.getAnnualPlanAmount()); | |||||
return exportDTO; | |||||
}).collect(Collectors.toList()); | |||||
} | |||||
String fileName = "合同备案项目列表"; | |||||
ExcelDownUtil.setFileName(fileName,response); | |||||
//数据导出处理函数 | |||||
try { | |||||
EasyExcel.write(response.getOutputStream(), DeclaredProjectExportDTO.class) | |||||
.autoCloseStream(false) | |||||
.registerWriteHandler(ExcelExportStyle.formalStyle()) | |||||
.sheet(fileName) | |||||
.doWrite(collect); | |||||
} catch (IOException e) { | |||||
throw new RuntimeException(e); | |||||
} catch (Exception e) { | |||||
throw new RuntimeException(e); | |||||
} | |||||
} | |||||
/** | |||||
* 查询初验信息 | |||||
* @param projectId | |||||
* @return | |||||
*/ | |||||
public PreInsVO detailPreInsByProjectId(Long projectId) { | |||||
Project project = projectService.getById(projectId); | |||||
PreInsVO vo = new PreInsVO(); | |||||
vo.setProjectId(projectId); | |||||
vo.setPreliminaryInspectionMaterials(project.getPreliminaryInspectionMaterials()); | |||||
List<PreInsAcceptancePerson> acceptancePersons = acceptancePersonService.list(Wrappers.lambdaQuery(PreInsAcceptancePerson.class) | |||||
.eq(PreInsAcceptancePerson::getProjectId, projectId) | |||||
.orderByAsc(PreInsAcceptancePerson::getCreateOn)); | |||||
if(CollUtil.isNotEmpty(acceptancePersons)){ | |||||
vo.setAcceptancePersons(convertPersons(acceptancePersons)); | |||||
} | |||||
return vo; | |||||
} | |||||
private List<PreInsAcceptancePersonVO> convertPersons(List<PreInsAcceptancePerson> acceptancePersons) { | |||||
if(CollUtil.isEmpty(acceptancePersons)){ | |||||
return Collections.emptyList(); | |||||
} | |||||
return acceptancePersons.stream().map(u -> BeanUtil.copyProperties(u,PreInsAcceptancePersonVO.class)).collect(Collectors.toList()); | |||||
} | |||||
/** | |||||
* 填写初验信息 | |||||
* @param dto | |||||
* @return | |||||
*/ | |||||
public String submitPreIns(PreInsSaveDTO dto) { | |||||
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); | |||||
String employeeCode = user.getEmployeeCode(); | |||||
VUtils.isTrue(StringUtils.isBlank(employeeCode)).throwMessage("获取登录用户 员工号 失败!"); | |||||
Long projectId = dto.getProjectId(); | |||||
VUtils.isTrue(Objects.isNull(projectId)).throwMessage("提交失败 缺少项目ID!"); | |||||
Project project = projectService.getNewProject(dto.getProjectId()); | |||||
VUtils.isTrue(Objects.isNull(project)).throwMessage("提交失败 此项目不存在!"); | |||||
//首先要判断 项目当前状态 是不是 采购结果备案 | |||||
VUtils.isTrue(!ProjectStatusEnum.UNDER_CONSTRUCTION.getCode().equals(project.getStatus()) || | |||||
!ProjectStatusEnum.PROJECT_APPROVED.getCode().equals(project.getStage())) | |||||
.throwMessage("提交失败 该项目不是 建设中或者已立项阶段"); | |||||
//初验人员 | |||||
if(Objects.nonNull(dto.getAcceptancePersons())){ | |||||
//先删除 | |||||
acceptancePersonService.remove(Wrappers.lambdaQuery(PreInsAcceptancePerson.class) | |||||
.eq(PreInsAcceptancePerson::getProjectId,projectId)); | |||||
if(CollUtil.isNotEmpty(dto.getAcceptancePersons())){ | |||||
List<PreInsAcceptancePerson> persons = dto.getAcceptancePersons().stream().map(d -> { | |||||
PreInsAcceptancePerson person = BeanUtil.copyProperties(d, PreInsAcceptancePerson.class); | |||||
person.setProjectId(projectId); | |||||
person.setCreateOn(LocalDateTime.now()); | |||||
person.setUpdateOn(LocalDateTime.now()); | |||||
person.setCreateBy(employeeCode); | |||||
person.setUpdateBy(employeeCode); | |||||
return person; | |||||
}).collect(Collectors.toList()); | |||||
acceptancePersonService.saveBatch(persons); | |||||
} | |||||
} | |||||
//判断下 如果和初验都完成了 才进入下一阶段 | |||||
if(Objects.nonNull(project.getDeliveryTime())){ | |||||
//进入到下一状态 | |||||
stateMachineUtils.pass(project); | |||||
} | |||||
project.setUpdateOn(LocalDateTime.now()); | |||||
project.setPreliminaryInspectionMaterials(dto.getPreliminaryInspectionMaterials()); | |||||
projectService.updateById(project); | |||||
return "填写成功"; | |||||
} | |||||
} |
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
import com.ningdatech.basic.function.VUtils; | import com.ningdatech.basic.function.VUtils; | ||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.basic.util.NdDateUtils; | import com.ningdatech.basic.util.NdDateUtils; | ||||
import com.ningdatech.pmapi.common.constant.BizConst; | |||||
import com.ningdatech.pmapi.common.constant.CommonConst; | import com.ningdatech.pmapi.common.constant.CommonConst; | ||||
import com.ningdatech.pmapi.common.enumeration.ProjectProcessStageEnum; | import com.ningdatech.pmapi.common.enumeration.ProjectProcessStageEnum; | ||||
import com.ningdatech.pmapi.common.helper.UserInfoHelper; | import com.ningdatech.pmapi.common.helper.UserInfoHelper; | ||||
@@ -100,7 +101,7 @@ public class ConstructionPlanManage { | |||||
ProjectDTO projectDto = dto.getProjectInfo(); | ProjectDTO projectDto = dto.getProjectInfo(); | ||||
VUtils.isTrue(Objects.isNull(projectDto.getId())).throwMessage("提交失败 缺少项目ID!"); | VUtils.isTrue(Objects.isNull(projectDto.getId())).throwMessage("提交失败 缺少项目ID!"); | ||||
Project projectInfo = projectService.getById(projectDto.getId()); | |||||
Project projectInfo = projectService.getNewProject(projectDto.getId()); | |||||
VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | ||||
VUtils.isTrue(StringUtils.isBlank(projectDto.getConstructionPlanFile())).throwMessage("提交失败 请提交建设方案!"); | VUtils.isTrue(StringUtils.isBlank(projectDto.getConstructionPlanFile())).throwMessage("提交失败 请提交建设方案!"); | ||||
@@ -112,7 +113,7 @@ public class ConstructionPlanManage { | |||||
WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class) | WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class) | ||||
.eq(WflowModels::getRegionCode, regionCode) | .eq(WflowModels::getRegionCode, regionCode) | ||||
.eq(WflowModels::getProcessType, ProjectProcessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS.getCode()) | .eq(WflowModels::getProcessType, ProjectProcessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS.getCode()) | ||||
.last("limit 1")); | |||||
.last(BizConst.LIMIT_1)); | |||||
if (Objects.isNull(model)) { | if (Objects.isNull(model)) { | ||||
log.error("此 【{}】区域找不到 建设申报流程配置", regionCode); | log.error("此 【{}】区域找不到 建设申报流程配置", regionCode); | ||||
@@ -98,7 +98,7 @@ public class PrequalificationDeclaredProjectManage { | |||||
ProjectDTO projectDto = dto.getProjectInfo(); | ProjectDTO projectDto = dto.getProjectInfo(); | ||||
VUtils.isTrue(Objects.isNull(projectDto.getId())).throwMessage("提交失败 缺少项目ID!"); | VUtils.isTrue(Objects.isNull(projectDto.getId())).throwMessage("提交失败 缺少项目ID!"); | ||||
Project projectInfo = projectService.getById(projectDto.getId()); | |||||
Project projectInfo = projectService.getNewProject(projectDto.getId()); | |||||
VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | ||||
//要判断 当前操作人 是不是项目主管单位的人 | //要判断 当前操作人 是不是项目主管单位的人 | ||||
@@ -1,10 +1,12 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.manage; | package com.ningdatech.pmapi.projectdeclared.manage; | ||||
import cn.hutool.core.bean.BeanUtil; | import cn.hutool.core.bean.BeanUtil; | ||||
import cn.hutool.core.collection.CollUtil; | |||||
import com.alibaba.excel.EasyExcel; | import com.alibaba.excel.EasyExcel; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
import com.google.common.collect.Lists; | |||||
import com.ningdatech.basic.function.VUtils; | import com.ningdatech.basic.function.VUtils; | ||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.basic.util.CollUtils; | import com.ningdatech.basic.util.CollUtils; | ||||
@@ -35,6 +37,7 @@ import org.springframework.stereotype.Component; | |||||
import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.time.format.DateTimeFormatter; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Objects; | import java.util.Objects; | ||||
import java.util.concurrent.atomic.AtomicInteger; | import java.util.concurrent.atomic.AtomicInteger; | ||||
@@ -71,6 +74,7 @@ public class PurchaseManage { | |||||
query.eq(Project::getStatus,ProjectStatusEnum.TO_BE_PURCHASED.getCode()); | query.eq(Project::getStatus,ProjectStatusEnum.TO_BE_PURCHASED.getCode()); | ||||
query.eq(Project::getStage,ProjectStatusEnum.PROJECT_APPROVED.getCode()); | query.eq(Project::getStage,ProjectStatusEnum.PROJECT_APPROVED.getCode()); | ||||
query.eq(Project::getNewest,Boolean.TRUE); | query.eq(Project::getNewest,Boolean.TRUE); | ||||
query.orderByAsc(Project::getApprovalDate); | |||||
Page<Project> page = projectService.page(req.page(), query); | Page<Project> page = projectService.page(req.page(), query); | ||||
long total; | long total; | ||||
if ((total = page.getTotal()) == 0) { | if ((total = page.getTotal()) == 0) { | ||||
@@ -91,6 +95,8 @@ public class PurchaseManage { | |||||
item.setProcessStatus(w.getProcessStatus()); | item.setProcessStatus(w.getProcessStatus()); | ||||
item.setInstCode(w.getInstCode()); | item.setInstCode(w.getInstCode()); | ||||
item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); | item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); | ||||
item.setApprovedAmount(w.getApprovalAmount()); | |||||
item.setApprovalDate(w.getApprovalDate()); | |||||
return item; | return item; | ||||
}); | }); | ||||
return PageVo.of(records, total); | return PageVo.of(records, total); | ||||
@@ -104,19 +110,27 @@ public class PurchaseManage { | |||||
query.eq(Project::getStatus,ProjectStatusEnum.TO_BE_PURCHASED.getCode()); | query.eq(Project::getStatus,ProjectStatusEnum.TO_BE_PURCHASED.getCode()); | ||||
query.eq(Project::getStage,ProjectStatusEnum.PROJECT_APPROVED.getCode()); | query.eq(Project::getStage,ProjectStatusEnum.PROJECT_APPROVED.getCode()); | ||||
query.eq(Project::getNewest,Boolean.TRUE); | query.eq(Project::getNewest,Boolean.TRUE); | ||||
query.orderByAsc(Project::getApprovalDate); | |||||
List<Project> records = projectService.list(query); | List<Project> records = projectService.list(query); | ||||
AtomicInteger serialNumber = new AtomicInteger(0); | AtomicInteger serialNumber = new AtomicInteger(0); | ||||
List<DeclaredProjectExportDTO> collect = records.stream().map(r -> { | |||||
DeclaredProjectExportDTO exportDTO = new DeclaredProjectExportDTO(); | |||||
BeanUtils.copyProperties(r, exportDTO); | |||||
exportDTO.setProjectTypeName(ProjectTypeEnum.getDesc(r.getProjectType())); | |||||
exportDTO.setStatusName(ProjectStatusEnum.getDesc(r.getStatus())); | |||||
String createOnStr = NdDateUtils.format(r.getCreateOn(), "yyyy-MM-dd HH:mm"); | |||||
exportDTO.setCreateOn(createOnStr); | |||||
exportDTO.setSerialNumber(serialNumber.incrementAndGet()); | |||||
return exportDTO; | |||||
}).collect(Collectors.toList()); | |||||
List<DeclaredProjectExportDTO> data = Lists.newArrayList(); | |||||
if(CollUtil.isNotEmpty(records)){ | |||||
data = records.stream().map(r -> { | |||||
DeclaredProjectExportDTO exportDTO = new DeclaredProjectExportDTO(); | |||||
BeanUtils.copyProperties(r, exportDTO); | |||||
exportDTO.setProjectTypeName(ProjectTypeEnum.getDesc(r.getProjectType())); | |||||
exportDTO.setStatusName(ProjectStatusEnum.getDesc(r.getStatus())); | |||||
String createOnStr = NdDateUtils.format(r.getCreateOn(), "yyyy-MM-dd HH:mm"); | |||||
exportDTO.setCreateOn(createOnStr); | |||||
exportDTO.setSerialNumber(serialNumber.incrementAndGet()); | |||||
exportDTO.setApprovedAmount(r.getApprovalAmount()); | |||||
exportDTO.setApprovalDate(r.getApprovalDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); | |||||
return exportDTO; | |||||
}).collect(Collectors.toList()); | |||||
} | |||||
String fileName = "采购结果待备案项目列表"; | String fileName = "采购结果待备案项目列表"; | ||||
ExcelDownUtil.setFileName(fileName,response); | ExcelDownUtil.setFileName(fileName,response); | ||||
//数据导出处理函数 | //数据导出处理函数 | ||||
@@ -125,7 +139,7 @@ public class PurchaseManage { | |||||
.autoCloseStream(false) | .autoCloseStream(false) | ||||
.registerWriteHandler(ExcelExportStyle.formalStyle()) | .registerWriteHandler(ExcelExportStyle.formalStyle()) | ||||
.sheet(fileName) | .sheet(fileName) | ||||
.doWrite(collect); | |||||
.doWrite(data); | |||||
} catch (IOException e) { | } catch (IOException e) { | ||||
throw new RuntimeException(e); | throw new RuntimeException(e); | ||||
} | } | ||||
@@ -156,7 +170,7 @@ public class PurchaseManage { | |||||
Long projectId = dto.getProjectId(); | Long projectId = dto.getProjectId(); | ||||
VUtils.isTrue(Objects.isNull(projectId)).throwMessage("提交失败 缺少项目ID!"); | VUtils.isTrue(Objects.isNull(projectId)).throwMessage("提交失败 缺少项目ID!"); | ||||
Project project = projectService.getById(projectId); | |||||
Project project = projectService.getNewProject(dto.getProjectId()); | |||||
VUtils.isTrue(Objects.isNull(project)).throwMessage("提交失败 此项目不存在!"); | VUtils.isTrue(Objects.isNull(project)).throwMessage("提交失败 此项目不存在!"); | ||||
//首先要判断 项目当前状态 是不是 采购结果备案 | //首先要判断 项目当前状态 是不是 采购结果备案 | ||||
@@ -182,6 +196,8 @@ public class PurchaseManage { | |||||
//进入到下一状态 | //进入到下一状态 | ||||
stateMachineUtils.pass(project); | stateMachineUtils.pass(project); | ||||
project.setUpdateOn(LocalDateTime.now()); | project.setUpdateOn(LocalDateTime.now()); | ||||
project.setTransactionAmount(dto.getTransactionAmount()); | |||||
project.setTransactionTime(dto.getTransactionTime()); | |||||
projectService.updateById(project); | projectService.updateById(project); | ||||
return "填写成功"; | return "填写成功"; | ||||
@@ -63,7 +63,7 @@ public class ReviewByDeptJointManage { | |||||
String startUserCode = project.getSponsor(); | String startUserCode = project.getSponsor(); | ||||
VUtils.isTrue(Objects.isNull(project.getId())).throwMessage("提交失败 缺少项目ID!"); | VUtils.isTrue(Objects.isNull(project.getId())).throwMessage("提交失败 缺少项目ID!"); | ||||
Project projectInfo = projectService.getById(project.getId()); | |||||
Project projectInfo = projectService.getNewProject(project.getId()); | |||||
VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | ||||
String regionCode = projectInfo.getAreaCode(); | String regionCode = projectInfo.getAreaCode(); | ||||
@@ -85,7 +85,7 @@ public class ReviewByProvincialDeptManage { | |||||
public String restartTheProcess(DefaultDeclaredDTO declaringDTO) { | public String restartTheProcess(DefaultDeclaredDTO declaringDTO) { | ||||
ProjectDTO project = declaringDTO.getProjectInfo(); | ProjectDTO project = declaringDTO.getProjectInfo(); | ||||
VUtils.isTrue(Objects.isNull(project.getId())).throwMessage("提交失败 缺少项目ID!"); | VUtils.isTrue(Objects.isNull(project.getId())).throwMessage("提交失败 缺少项目ID!"); | ||||
Project projectInfo = projectService.getById(project.getId()); | |||||
Project projectInfo = projectService.getNewProject(project.getId()); | |||||
VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | ||||
String regionCode = projectInfo.getAreaCode(); | String regionCode = projectInfo.getAreaCode(); | ||||
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.mapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.Contract; | |||||
/** | |||||
* <p> | |||||
* Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-02-05 | |||||
*/ | |||||
public interface ContractMapper extends BaseMapper<Contract> { | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.ningdatech.pmapi.projectdeclared.mapper.ContractMapper"> | |||||
</mapper> |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.mapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PaymentPlan; | |||||
/** | |||||
* <p> | |||||
* Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-02-05 | |||||
*/ | |||||
public interface PaymentPlanMapper extends BaseMapper<PaymentPlan> { | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.ningdatech.pmapi.projectdeclared.mapper.PaymentPlanMapper"> | |||||
</mapper> |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.mapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PreInsAcceptancePerson; | |||||
/** | |||||
* <p> | |||||
* Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-02-05 | |||||
*/ | |||||
public interface PreInsAcceptancePersonMapper extends BaseMapper<PreInsAcceptancePerson> { | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.ningdatech.pmapi.projectdeclared.mapper.PreInsAcceptancePersonMapper"> | |||||
</mapper> |
@@ -0,0 +1,60 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.dto; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import javax.validation.constraints.NotNull; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDateTime; | |||||
import java.util.List; | |||||
/** | |||||
* @Classname Contract | |||||
* @Description | |||||
* @Date 2023/5/30 15:35 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "合同对象", description = "") | |||||
public class ContractSaveDTO { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("项目ID") | |||||
@NotNull(message = "项目ID不能为空") | |||||
private Long projectId; | |||||
@ApiModelProperty("合同名称") | |||||
private String name; | |||||
@ApiModelProperty("合同总金额") | |||||
private BigDecimal totalAmount; | |||||
@ApiModelProperty("供应商开户行") | |||||
private String supplierBank; | |||||
@ApiModelProperty("供应商开户行帐号") | |||||
private String supplierAccount; | |||||
@ApiModelProperty("质保期 年") | |||||
private Integer warrantyPeriod; | |||||
@ApiModelProperty("质保金") | |||||
private BigDecimal retentionMoney; | |||||
@ApiModelProperty("合同完成时间") | |||||
@JsonFormat(pattern = "yyyy-MM-dd") | |||||
private LocalDateTime contractTime; | |||||
@ApiModelProperty("交货日期") | |||||
@JsonFormat(pattern = "yyyy-MM-dd") | |||||
private LocalDateTime deliveryTime; | |||||
@ApiModelProperty("附件") | |||||
private String attachment; | |||||
@ApiModelProperty("支付计划") | |||||
private List<PaymentPlanSaveDTO> payments; | |||||
} |
@@ -1,12 +1,12 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.dto; | package com.ningdatech.pmapi.projectdeclared.model.dto; | ||||
import com.alibaba.excel.annotation.ExcelProperty; | import com.alibaba.excel.annotation.ExcelProperty; | ||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import lombok.Builder; | import lombok.Builder; | ||||
import lombok.Data; | import lombok.Data; | ||||
import lombok.NoArgsConstructor; | import lombok.NoArgsConstructor; | ||||
import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
import java.time.LocalDate; | |||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
@@ -42,4 +42,24 @@ public class DeclaredProjectExportDTO { | |||||
@ExcelProperty("项目状态") | @ExcelProperty("项目状态") | ||||
private String statusName; | private String statusName; | ||||
@ExcelProperty("批复金额") | |||||
private BigDecimal approvedAmount; | |||||
@ExcelProperty("立项批复时间") | |||||
private String approvalDate; | |||||
@ExcelProperty("成交金额") | |||||
private BigDecimal transactionAmount; | |||||
@ExcelProperty("成交时间") | |||||
private String transactionTime; | |||||
@ExcelProperty("成交时间") | |||||
private String deliveryTime; | |||||
@ExcelProperty("合同金额") | |||||
private BigDecimal contractAmount; | |||||
@ExcelProperty("年度预算") | |||||
private BigDecimal annualPlanAmount; | |||||
} | } |
@@ -0,0 +1,36 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.dto; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* @Classname PaymentPlan | |||||
* @Description | |||||
* @Date 2023/5/30 16:11 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "PaymentPlan", description = "") | |||||
public class PaymentPlanSaveDTO { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("付款计划") | |||||
private String planAmount; | |||||
@ApiModelProperty("支付金额") | |||||
private BigDecimal paymentAmount; | |||||
@ApiModelProperty("支付时间") | |||||
@JsonFormat(pattern = "yyyy-MM-dd") | |||||
private LocalDateTime paymentTime; | |||||
} |
@@ -0,0 +1,30 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.dto; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import javax.validation.constraints.NotNull; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* @Classname PreInsAcceptancePerson | |||||
* @Description 初验人员 | |||||
* @Date 2023/5/30 15:35 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "PreInsAcceptancePersonSaveDTO", description = "") | |||||
public class PreInsAcceptancePersonSaveDTO { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("人员名称") | |||||
private String personName; | |||||
@ApiModelProperty("单位") | |||||
private String unit; | |||||
} |
@@ -0,0 +1,36 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.dto; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import javax.validation.constraints.NotBlank; | |||||
import javax.validation.constraints.NotNull; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDateTime; | |||||
import java.util.List; | |||||
/** | |||||
* @Classname PreInsSaveDTO | |||||
* @Description | |||||
* @Date 2023/5/30 15:35 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "PreInsSaveDTO", description = "") | |||||
public class PreInsSaveDTO { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("项目ID") | |||||
@NotNull(message = "项目ID不能为空") | |||||
private Long projectId; | |||||
@ApiModelProperty("初验材料") | |||||
@NotBlank(message = "请提交初验材料") | |||||
private String preliminaryInspectionMaterials; | |||||
@ApiModelProperty("初验验收人员") | |||||
private List<PreInsAcceptancePersonSaveDTO> acceptancePersons; | |||||
} |
@@ -1,5 +1,6 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.dto; | package com.ningdatech.pmapi.projectdeclared.model.dto; | ||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import io.swagger.annotations.ApiModel; | import io.swagger.annotations.ApiModel; | ||||
import io.swagger.annotations.ApiModelProperty; | import io.swagger.annotations.ApiModelProperty; | ||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
@@ -40,6 +41,7 @@ public class PurchaseSaveDTO { | |||||
private BigDecimal transactionAmount; | private BigDecimal transactionAmount; | ||||
@ApiModelProperty("成交时间") | @ApiModelProperty("成交时间") | ||||
@JsonFormat(pattern = "yyyy-MM-dd") | |||||
private LocalDateTime transactionTime; | private LocalDateTime transactionTime; | ||||
@ApiModelProperty("代理机构") | @ApiModelProperty("代理机构") | ||||
@@ -0,0 +1,70 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.entity; | |||||
import com.baomidou.mybatisplus.annotation.*; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import org.joda.time.LocalDate; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* @Classname Contract | |||||
* @Description | |||||
* @Date 2023/5/30 15:35 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@TableName("nd_contract") | |||||
@ApiModel(value = "合同对象", description = "") | |||||
public class Contract { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("主键") | |||||
@TableId(type = IdType.AUTO) | |||||
private Long id; | |||||
@ApiModelProperty("创建人") | |||||
private String createBy; | |||||
@ApiModelProperty("修改人人") | |||||
private String updateBy; | |||||
@ApiModelProperty("创建时间") | |||||
private LocalDateTime createOn; | |||||
@ApiModelProperty("修改时间") | |||||
private LocalDateTime updateOn; | |||||
@ApiModelProperty("合同名称") | |||||
private String name; | |||||
@ApiModelProperty("合同总金额") | |||||
private BigDecimal totalAmount; | |||||
@ApiModelProperty("供应商开户行") | |||||
private String supplierBank; | |||||
@ApiModelProperty("供应商开户行帐号") | |||||
private String supplierAccount; | |||||
@ApiModelProperty("质保期 年") | |||||
private Integer warrantyPeriod; | |||||
@ApiModelProperty("质保金") | |||||
private BigDecimal retentionMoney; | |||||
@ApiModelProperty("合同完成时间") | |||||
private LocalDateTime contractTime; | |||||
@ApiModelProperty("交货日期") | |||||
private LocalDateTime deliveryTime; | |||||
@ApiModelProperty("附件") | |||||
private String attachment; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
} |
@@ -0,0 +1,53 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.entity; | |||||
import com.baomidou.mybatisplus.annotation.*; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDate; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* @Classname PaymentPlan | |||||
* @Description | |||||
* @Date 2023/5/30 16:11 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@TableName("nd_payment_plan") | |||||
@ApiModel(value = "PaymentPlan", description = "") | |||||
public class PaymentPlan { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("主键") | |||||
@TableId(type = IdType.AUTO) | |||||
private Long id; | |||||
@ApiModelProperty("创建人") | |||||
private String createBy; | |||||
@ApiModelProperty("修改人人") | |||||
private String updateBy; | |||||
@ApiModelProperty("创建时间") | |||||
private LocalDateTime createOn; | |||||
@ApiModelProperty("修改时间") | |||||
private LocalDateTime updateOn; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("付款计划") | |||||
private String planAmount; | |||||
@ApiModelProperty("支付金额") | |||||
private BigDecimal paymentAmount; | |||||
@ApiModelProperty("支付时间") | |||||
private LocalDateTime paymentTime; | |||||
} |
@@ -0,0 +1,50 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.entity; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* @Classname PreInsAcceptancePerson | |||||
* @Description 初验人员 | |||||
* @Date 2023/5/30 15:35 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@TableName("nd_pre_ins_acceptance_person") | |||||
@ApiModel(value = "PreInsAcceptancePerson", description = "") | |||||
public class PreInsAcceptancePerson { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("主键") | |||||
@TableId(type = IdType.AUTO) | |||||
private Long id; | |||||
@ApiModelProperty("创建人") | |||||
private String createBy; | |||||
@ApiModelProperty("修改人人") | |||||
private String updateBy; | |||||
@ApiModelProperty("创建时间") | |||||
private LocalDateTime createOn; | |||||
@ApiModelProperty("修改时间") | |||||
private LocalDateTime updateOn; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("人员名称") | |||||
private String personName; | |||||
@ApiModelProperty("单位") | |||||
private String unit; | |||||
} |
@@ -8,9 +8,8 @@ import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import lombok.Data; | import lombok.Data; | ||||
import lombok.NoArgsConstructor; | import lombok.NoArgsConstructor; | ||||
import javax.validation.constraints.NotNull; | |||||
import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
import java.time.LocalDate; | |||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
/** | /** | ||||
@@ -0,0 +1,77 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.vo; | |||||
import com.baomidou.mybatisplus.annotation.*; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDate; | |||||
import java.time.LocalDateTime; | |||||
import java.util.List; | |||||
/** | |||||
* @Classname Contract | |||||
* @Description | |||||
* @Date 2023/5/30 15:35 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "ContractVO", description = "") | |||||
public class ContractVO { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("主键") | |||||
private Long id; | |||||
@ApiModelProperty("创建人") | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createBy; | |||||
@ApiModelProperty("修改人人") | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updateBy; | |||||
@ApiModelProperty("创建时间") | |||||
private LocalDateTime createOn; | |||||
@ApiModelProperty("修改时间") | |||||
private LocalDateTime updateOn; | |||||
@ApiModelProperty("合同名称") | |||||
private String name; | |||||
@ApiModelProperty("合同总金额") | |||||
private BigDecimal totalAmount; | |||||
@ApiModelProperty("供应商开户行") | |||||
private String supplierBank; | |||||
@ApiModelProperty("供应商开户行帐号") | |||||
private String supplierAccount; | |||||
@ApiModelProperty("质保期 年") | |||||
private Integer warrantyPeriod; | |||||
@ApiModelProperty("质保金") | |||||
private BigDecimal retentionMoney; | |||||
@ApiModelProperty("合同完成时间") | |||||
@JsonFormat(pattern = "yyyy-MM-dd") | |||||
private LocalDateTime contractTime; | |||||
@ApiModelProperty("交货日期") | |||||
@JsonFormat(pattern = "yyyy-MM-dd") | |||||
private LocalDateTime deliveryTime; | |||||
@ApiModelProperty("附件") | |||||
private String attachment; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("支付计划") | |||||
private List<PaymentPlanVO> payments; | |||||
} |
@@ -0,0 +1,58 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.vo; | |||||
import com.alibaba.fastjson.annotation.JSONField; | |||||
import com.baomidou.mybatisplus.annotation.*; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* @Classname PaymentPlan | |||||
* @Description | |||||
* @Date 2023/5/30 16:11 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "PaymentPlanVO", description = "") | |||||
public class PaymentPlanVO { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("主键") | |||||
private Long id; | |||||
@ApiModelProperty("创建人") | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createBy; | |||||
@ApiModelProperty("修改人人") | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updateBy; | |||||
@ApiModelProperty("创建时间") | |||||
private LocalDateTime createOn; | |||||
@ApiModelProperty("修改时间") | |||||
private LocalDateTime updateOn; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("付款计划") | |||||
private String planAmount; | |||||
@ApiModelProperty("支付金额") | |||||
private BigDecimal paymentAmount; | |||||
@ApiModelProperty("支付比例") | |||||
private String ratio; | |||||
@ApiModelProperty("支付时间") | |||||
@JSONField(format = "yyyy-MM-dd") | |||||
private LocalDateTime paymentTime; | |||||
} |
@@ -0,0 +1,47 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.vo; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* @Classname PreInsAcceptancePerson | |||||
* @Description 初验人员 | |||||
* @Date 2023/5/30 15:35 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "PreInsAcceptancePersonVO", description = "") | |||||
public class PreInsAcceptancePersonVO { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("主键") | |||||
private Long id; | |||||
@ApiModelProperty("创建人") | |||||
private String createBy; | |||||
@ApiModelProperty("修改人人") | |||||
private String updateBy; | |||||
@ApiModelProperty("创建时间") | |||||
private LocalDateTime createOn; | |||||
@ApiModelProperty("修改时间") | |||||
private LocalDateTime updateOn; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("人员名称") | |||||
private String personName; | |||||
@ApiModelProperty("单位") | |||||
private String unit; | |||||
} |
@@ -0,0 +1,34 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.model.vo; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDateTime; | |||||
import java.util.List; | |||||
/** | |||||
* @Classname PreInsVO | |||||
* @Description | |||||
* @Date 2023/5/30 15:35 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "PreInsVO", description = "初验备案详情") | |||||
public class PreInsVO { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("初验材料") | |||||
private String preliminaryInspectionMaterials; | |||||
@ApiModelProperty("初验验收人员") | |||||
private List<PreInsAcceptancePersonVO> acceptancePersons; | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.service; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.Contract; | |||||
/** | |||||
* <p> | |||||
* 服务类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-05-29 | |||||
*/ | |||||
public interface IContractService extends IService<Contract> { | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.service; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PaymentPlan; | |||||
/** | |||||
* <p> | |||||
* 服务类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-05-29 | |||||
*/ | |||||
public interface IPaymentPlanService extends IService<PaymentPlan> { | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.service; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PreInsAcceptancePerson; | |||||
/** | |||||
* <p> | |||||
* 服务类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-05-29 | |||||
*/ | |||||
public interface IPreInsAcceptancePersonService extends IService<PreInsAcceptancePerson> { | |||||
} |
@@ -0,0 +1,21 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.service.impl; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import com.ningdatech.pmapi.projectdeclared.mapper.ContractMapper; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.Contract; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IContractService; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* <p> | |||||
* 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-02-05 | |||||
*/ | |||||
@Service | |||||
public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> | |||||
implements IContractService { | |||||
} |
@@ -0,0 +1,21 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.service.impl; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import com.ningdatech.pmapi.projectdeclared.mapper.PaymentPlanMapper; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PaymentPlan; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IPaymentPlanService; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* <p> | |||||
* 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-02-05 | |||||
*/ | |||||
@Service | |||||
public class PaymentPlanServiceImpl extends ServiceImpl<PaymentPlanMapper, PaymentPlan> | |||||
implements IPaymentPlanService { | |||||
} |
@@ -0,0 +1,21 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.service.impl; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import com.ningdatech.pmapi.projectdeclared.mapper.PreInsAcceptancePersonMapper; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PreInsAcceptancePerson; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IPreInsAcceptancePersonService; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* <p> | |||||
* 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-02-05 | |||||
*/ | |||||
@Service | |||||
public class PreInsAcceptancePersonServiceImpl extends ServiceImpl<PreInsAcceptancePersonMapper, PreInsAcceptancePerson> | |||||
implements IPreInsAcceptancePersonService { | |||||
} |
@@ -7,6 +7,8 @@ import java.util.Objects; | |||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
import com.ningdatech.basic.util.NdDateUtils; | import com.ningdatech.basic.util.NdDateUtils; | ||||
import com.ningdatech.pmapi.common.constant.BizConst; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectService; | |||||
import com.ningdatech.pmapi.projectlib.utils.ProjectVersionUtil; | import com.ningdatech.pmapi.projectlib.utils.ProjectVersionUtil; | ||||
import com.ningdatech.pmapi.todocenter.utils.BuildUserUtils; | import com.ningdatech.pmapi.todocenter.utils.BuildUserUtils; | ||||
import com.wflow.workflow.bean.process.ProgressNode; | import com.wflow.workflow.bean.process.ProgressNode; | ||||
@@ -35,12 +37,17 @@ import com.wflow.workflow.service.ProcessInstanceService; | |||||
public class DeptUnitedReviewHandle extends AbstractProcessBusinessHandle { | public class DeptUnitedReviewHandle extends AbstractProcessBusinessHandle { | ||||
private final IProjectInstService projectInstService; | private final IProjectInstService projectInstService; | ||||
private final IProjectService projectService; | |||||
private final ProcessInstanceService processInstanceService; | private final ProcessInstanceService processInstanceService; | ||||
private final BuildUserUtils buildUserUtils; | private final BuildUserUtils buildUserUtils; | ||||
private final ProjectVersionUtil projectVersionUtil; | private final ProjectVersionUtil projectVersionUtil; | ||||
public DeptUnitedReviewHandle(IProjectInstService projectInstService, ProcessInstanceService processInstanceService, BuildUserUtils buildUserUtils, ProjectVersionUtil projectVersionUtil){ | |||||
public DeptUnitedReviewHandle(IProjectInstService projectInstService,IProjectService projectService | |||||
, ProcessInstanceService processInstanceService, BuildUserUtils buildUserUtils, | |||||
ProjectVersionUtil projectVersionUtil){ | |||||
this.projectInstService = projectInstService; | this.projectInstService = projectInstService; | ||||
this.projectService = projectService; | |||||
this.processInstanceService = processInstanceService; | this.processInstanceService = processInstanceService; | ||||
this.buildUserUtils = buildUserUtils; | this.buildUserUtils = buildUserUtils; | ||||
this.projectVersionUtil = projectVersionUtil; | this.projectVersionUtil = projectVersionUtil; | ||||
@@ -49,12 +56,16 @@ public class DeptUnitedReviewHandle extends AbstractProcessBusinessHandle { | |||||
@Override | @Override | ||||
void businessHandle(Long projectId, List<ProcessDetailVO> processSchedule) { | void businessHandle(Long projectId, List<ProcessDetailVO> processSchedule) { | ||||
ProcessDetailVO processDetailVO = new ProcessDetailVO(); | ProcessDetailVO processDetailVO = new ProcessDetailVO(); | ||||
//查出历史版本的 所有项目ID | |||||
List<Long> allVersionProjectIds = projectService.getAllVersionProjectId(projectId); | |||||
// 根据项目ID查询出部门联审流程的流程状态 | // 根据项目ID查询出部门联审流程的流程状态 | ||||
ProjectInst projectInst = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class) | ProjectInst projectInst = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class) | ||||
.eq(ProjectInst::getProjectId, projectId) | |||||
.in(ProjectInst::getProjectId, allVersionProjectIds) | |||||
.eq(ProjectInst::getInstType, InstTypeEnum.DEPT_UNITED_REVIEW.getCode()) | .eq(ProjectInst::getInstType, InstTypeEnum.DEPT_UNITED_REVIEW.getCode()) | ||||
.orderByDesc(ProjectInst::getCreatOn) | .orderByDesc(ProjectInst::getCreatOn) | ||||
.last("limit 1")); | |||||
.last(BizConst.LIMIT_1)); | |||||
if (Objects.isNull(projectInst)){ | if (Objects.isNull(projectInst)){ | ||||
processDetailVO.setStepStatus(StepStatusEnum.NOT_START); | processDetailVO.setStepStatus(StepStatusEnum.NOT_START); | ||||
processDetailVO.setProcessName(CommonConst.DEPT_UNITED_REVIEW); | processDetailVO.setProcessName(CommonConst.DEPT_UNITED_REVIEW); | ||||
@@ -329,4 +329,22 @@ public class Project implements Serializable { | |||||
@ApiModelProperty("是否是最新版本") | @ApiModelProperty("是否是最新版本") | ||||
private Boolean newest; | private Boolean newest; | ||||
@ApiModelProperty("成交金额") | |||||
private BigDecimal transactionAmount; | |||||
@ApiModelProperty("成交时间") | |||||
private LocalDateTime transactionTime; | |||||
@ApiModelProperty("交货时间") | |||||
private LocalDateTime deliveryTime; | |||||
@ApiModelProperty("初验材料") | |||||
private String preliminaryInspectionMaterials; | |||||
@ApiModelProperty("终验材料") | |||||
private String finalAcceptanceMaterials; | |||||
@ApiModelProperty("合同总金额") | |||||
private BigDecimal contractAmount; | |||||
} | } |
@@ -1,6 +1,8 @@ | |||||
package com.ningdatech.pmapi.projectlib.model.vo; | package com.ningdatech.pmapi.projectlib.model.vo; | ||||
import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
import com.alibaba.fastjson.annotation.JSONField; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import com.ningdatech.pmapi.common.util.BizUtils; | import com.ningdatech.pmapi.common.util.BizUtils; | ||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectTypeEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectTypeEnum; | ||||
import io.swagger.annotations.ApiModel; | import io.swagger.annotations.ApiModel; | ||||
@@ -331,6 +333,27 @@ public class ProjectDetailVO { | |||||
private LocalDateTime createOn; | private LocalDateTime createOn; | ||||
private LocalDateTime updateOn; | private LocalDateTime updateOn; | ||||
@ApiModelProperty("成交金额") | |||||
private BigDecimal transactionAmount; | |||||
@ApiModelProperty("成交时间") | |||||
@JSONField(format = "yyyy-MM-dd") | |||||
private LocalDateTime transactionTime; | |||||
@ApiModelProperty("交货时间") | |||||
@JSONField(format = "yyyy-MM-dd") | |||||
private LocalDateTime deliveryTime; | |||||
@ApiModelProperty("初验材料") | |||||
private String preliminaryInspectionMaterials; | |||||
@ApiModelProperty("终验材料") | |||||
private String finalAcceptanceMaterials; | |||||
@ApiModelProperty("合同总金额") | |||||
private BigDecimal contractAmount; | |||||
public String getProjectTypeName() { | public String getProjectTypeName() { | ||||
if (Objects.nonNull(this.projectType)) { | if (Objects.nonNull(this.projectType)) { | ||||
Optional.ofNullable(ProjectTypeEnum.getDesc(this.projectType)) | Optional.ofNullable(ProjectTypeEnum.getDesc(this.projectType)) | ||||
@@ -1,5 +1,6 @@ | |||||
package com.ningdatech.pmapi.projectlib.model.vo; | package com.ningdatech.pmapi.projectlib.model.vo; | ||||
import com.alibaba.fastjson.annotation.JSONField; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | import com.fasterxml.jackson.annotation.JsonFormat; | ||||
import com.ningdatech.pmapi.common.enumeration.CommonEnum; | import com.ningdatech.pmapi.common.enumeration.CommonEnum; | ||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | ||||
@@ -13,6 +14,7 @@ import lombok.Data; | |||||
import lombok.experimental.Tolerate; | import lombok.experimental.Tolerate; | ||||
import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
import java.time.LocalDate; | |||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.util.Objects; | import java.util.Objects; | ||||
import java.util.Optional; | import java.util.Optional; | ||||
@@ -46,6 +48,9 @@ public class ProjectLibListItemVO { | |||||
@ApiModelProperty("批复金额") | @ApiModelProperty("批复金额") | ||||
private BigDecimal approvedAmount; | private BigDecimal approvedAmount; | ||||
@ApiModelProperty("立项批复时间") | |||||
private LocalDate approvalDate; | |||||
@ApiModelProperty("项目类型") | @ApiModelProperty("项目类型") | ||||
private Integer projectType; | private Integer projectType; | ||||
@@ -78,6 +83,23 @@ public class ProjectLibListItemVO { | |||||
private String projectTypeName; | private String projectTypeName; | ||||
@ApiModelProperty("成交金额") | |||||
private BigDecimal transactionAmount; | |||||
@ApiModelProperty("成交时间") | |||||
@JSONField(format = "yyyy-MM-dd") | |||||
private LocalDateTime transactionTime; | |||||
@ApiModelProperty("交货时间") | |||||
@JSONField(format = "yyyy-MM-dd") | |||||
private LocalDateTime deliveryTime; | |||||
@ApiModelProperty("合同总金额") | |||||
private BigDecimal contractAmount; | |||||
@ApiModelProperty("年度支付计划-年度支付计划(元)") | |||||
private BigDecimal annualPlanAmount; | |||||
public String getProjectTypeName() { | public String getProjectTypeName() { | ||||
if (Objects.nonNull(this.projectType)) { | if (Objects.nonNull(this.projectType)) { | ||||
Optional.ofNullable(ProjectTypeEnum.getDesc(this.projectType)) | Optional.ofNullable(ProjectTypeEnum.getDesc(this.projectType)) | ||||
@@ -16,4 +16,8 @@ import java.util.List; | |||||
public interface IProjectService extends IService<Project> { | public interface IProjectService extends IService<Project> { | ||||
public List<Long> getAllVersionProjectId(Project project); | public List<Long> getAllVersionProjectId(Project project); | ||||
public List<Long> getAllVersionProjectId(Long projectId); | |||||
Project getNewProject(Long projectId); | |||||
} | } |
@@ -1,7 +1,9 @@ | |||||
package com.ningdatech.pmapi.projectlib.service.impl; | package com.ningdatech.pmapi.projectlib.service.impl; | ||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.ningdatech.pmapi.common.constant.BizConst; | |||||
import com.ningdatech.pmapi.projectlib.model.entity.Project; | import com.ningdatech.pmapi.projectlib.model.entity.Project; | ||||
import com.ningdatech.pmapi.projectlib.mapper.ProjectMapper; | import com.ningdatech.pmapi.projectlib.mapper.ProjectMapper; | ||||
import com.ningdatech.pmapi.projectlib.service.IProjectService; | import com.ningdatech.pmapi.projectlib.service.IProjectService; | ||||
@@ -10,6 +12,7 @@ import org.springframework.stereotype.Service; | |||||
import java.util.Collections; | import java.util.Collections; | ||||
import java.util.List; | import java.util.List; | ||||
import java.util.Objects; | |||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
/** | /** | ||||
@@ -37,4 +40,34 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl | |||||
return projects.stream().map(Project::getId).collect(Collectors.toList()); | return projects.stream().map(Project::getId).collect(Collectors.toList()); | ||||
} | } | ||||
@Override | |||||
public List<Long> getAllVersionProjectId(Long projectId) { | |||||
Project project = getById(projectId); | |||||
if(Objects.isNull(project)){ | |||||
return null; | |||||
} | |||||
return getAllVersionProjectId(project); | |||||
} | |||||
@Override | |||||
public Project getNewProject(Long projectId) { | |||||
Project project = getById(projectId); | |||||
if(Objects.isNull(project)){ | |||||
return null; | |||||
} | |||||
String projectCode = project.getProjectCode(); | |||||
LambdaQueryWrapper<Project> last = Wrappers.lambdaQuery(Project.class) | |||||
.eq(Project::getNewest, Boolean.TRUE) | |||||
.eq(Project::getProjectCode, projectCode) | |||||
.last(BizConst.LIMIT_1); | |||||
Project newest = getOne(last); | |||||
return newest; | |||||
} | |||||
} | } |
@@ -44,7 +44,7 @@ spring: | |||||
driverClassName: com.kingbase8.Driver | driverClassName: com.kingbase8.Driver | ||||
# 数据源 | # 数据源 | ||||
druid: | druid: | ||||
url: jdbc:kingbase8://120.26.44.207:54321/nd_project_management?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 | |||||
url: jdbc:kingbase8://10.221.140.251:54321/nd_project_management?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&nullCatalogMeansCurrent=false | |||||
username: SYSTEM | username: SYSTEM | ||||
password: Ndkj1234 | password: Ndkj1234 | ||||
# 初始连接数 | # 初始连接数 | ||||
@@ -120,12 +120,12 @@ nd: | |||||
file: | file: | ||||
storage-type: ALI_OSS | storage-type: ALI_OSS | ||||
ali: | ali: | ||||
protocol: https:// | |||||
bucket: devplat | |||||
urlPrefix: oss-cn-hangzhou.aliyuncs.com | |||||
endpoint: oss-cn-hangzhou.aliyuncs.com | |||||
accessKeyId: LTAI4GL7uypycnBjiRn55rMG | |||||
accessKeySecret: qwYC7bW9bkStsko7qkLVnToAzj0Y98 | |||||
protocol: http:// | |||||
bucket: projectmangmentoss | |||||
urlPrefix: oss-cn-lishui-gov-d01-a.ops.lsdx-zw.gov.cn | |||||
endpoint: oss-cn-lishui-gov-d01-a.ops.lsdx-zw.gov.cn | |||||
accessKeyId: XS3kNLtfW5i41SaC | |||||
accessKeySecret: 2cywvSZWANml7pZXxRAeAiHfisIhqm | |||||
# 日志文件配置 | # 日志文件配置 | ||||
log: | log: | ||||
path: ./logs | path: ./logs | ||||
@@ -145,6 +145,7 @@ flowable: | |||||
async-executor-activate: true | async-executor-activate: true | ||||
#关闭一些不需要的功能服务 | #关闭一些不需要的功能服务 | ||||
rest-api-enabled: false | rest-api-enabled: false | ||||
# database-schema-update: false | |||||
idm: | idm: | ||||
enabled: false | enabled: false | ||||
common: | common: | ||||
@@ -3,7 +3,9 @@ security: | |||||
auth-require-url: /api/v1/user/auth/auth-require | auth-require-url: /api/v1/user/auth/auth-require | ||||
invalid-session-url: /api/v1/user/auth/invalid-session | invalid-session-url: /api/v1/user/auth/invalid-session | ||||
password-login-url: /api/v1/user/auth/login | password-login-url: /api/v1/user/auth/login | ||||
agent-login-url: /api/v1/user/auth/agent-login | |||||
logout-url: /api/v1/user/auth/logout | logout-url: /api/v1/user/auth/logout | ||||
common-login-url: /api/v1/user/auth/common-login | |||||
ignore-auth-urls: | ignore-auth-urls: | ||||
- /v2/api-docs | - /v2/api-docs | ||||
- /swagger-ui.html | - /swagger-ui.html | ||||
@@ -11,10 +13,27 @@ security: | |||||
- /swagger-resources/** | - /swagger-resources/** | ||||
- /webjars/ | - /webjars/ | ||||
- /api/v1/user/auth/register | - /api/v1/user/auth/register | ||||
- /api/v1/user/auth/auth-require | |||||
- /api/v1/user/auth/invalid-session | |||||
- /api/v1/user/auth/login/password | - /api/v1/user/auth/login/password | ||||
- /api/v1/user/auth/forget-password | - /api/v1/user/auth/forget-password | ||||
- /api/v1/user/auth/common-login | |||||
- /doc.html | - /doc.html | ||||
- /ok.html | - /ok.html | ||||
- /open/api/** | |||||
- /oa/** | |||||
- /wflow/** | |||||
- /sys/** | |||||
- /api/v1/verification/** | |||||
- /api/v1/expert/registration | |||||
- /api/v1/meta/dictionary/list | |||||
- /api/v1/meta/tag | |||||
- /api/v1/organization/tree-list | |||||
- /api/v1/organization/get-child-list | |||||
- /api/v1/region/tree | |||||
- /api/v1/expert/get-zzd-info | |||||
- /file/upload | |||||
- /file/download | |||||
ignore-csrf-urls: | ignore-csrf-urls: | ||||
- /api/v1/user/auth/** | - /api/v1/user/auth/** | ||||
- /v2/api-docs | - /v2/api-docs | ||||
@@ -28,9 +47,23 @@ security: | |||||
- /file/** | - /file/** | ||||
- /optLog/** | - /optLog/** | ||||
- /dict/** | - /dict/** | ||||
- /oa/** | |||||
- /wflow/** | |||||
- /sys/** | |||||
- /api/v1/verification/** | |||||
- /api/v1/expert/registration | |||||
- /api/v1/meta/dictionary/list | |||||
- /api/v1/meta/tag | |||||
- /api/v1/organization/tree-list | |||||
- /api/v1/organization/get-child-list | |||||
- /api/v1/region/tree | |||||
- /api/v1/expert/get-zzd-info | |||||
- /file/upload | |||||
- /file/download | |||||
role-map: | role-map: | ||||
"engineer": | "engineer": | ||||
"project_manager": | "project_manager": | ||||
- /api/v1/user-info/kick-off/** | |||||
"enterprise_admin": | "enterprise_admin": | ||||
"regional_general_manager": | "regional_general_manager": | ||||
"driver": | "driver": | ||||
@@ -3,7 +3,9 @@ security: | |||||
auth-require-url: /api/v1/user/auth/auth-require | auth-require-url: /api/v1/user/auth/auth-require | ||||
invalid-session-url: /api/v1/user/auth/invalid-session | invalid-session-url: /api/v1/user/auth/invalid-session | ||||
password-login-url: /api/v1/user/auth/login | password-login-url: /api/v1/user/auth/login | ||||
agent-login-url: /api/v1/user/auth/agent-login | |||||
logout-url: /api/v1/user/auth/logout | logout-url: /api/v1/user/auth/logout | ||||
common-login-url: /api/v1/user/auth/common-login | |||||
ignore-auth-urls: | ignore-auth-urls: | ||||
- /v2/api-docs | - /v2/api-docs | ||||
- /swagger-ui.html | - /swagger-ui.html | ||||
@@ -11,10 +13,24 @@ security: | |||||
- /swagger-resources/** | - /swagger-resources/** | ||||
- /webjars/ | - /webjars/ | ||||
- /api/v1/user/auth/register | - /api/v1/user/auth/register | ||||
- /api/v1/user/auth/auth-require | |||||
- /api/v1/user/auth/invalid-session | |||||
- /api/v1/user/auth/login/password | - /api/v1/user/auth/login/password | ||||
- /api/v1/user/auth/forget-password | - /api/v1/user/auth/forget-password | ||||
- /api/v1/user/auth/common-login | |||||
- /doc.html | - /doc.html | ||||
- /ok.html | - /ok.html | ||||
- /open/api/** | |||||
- /oa/** | |||||
- /wflow/** | |||||
- /sys/** | |||||
- /api/v1/verification/** | |||||
- /api/v1/expert/registration | |||||
- /api/v1/meta/dictionary/list | |||||
- /api/v1/meta/tag | |||||
- /api/v1/organization/tree-list | |||||
- /api/v1/organization/get-child-list | |||||
- /api/v1/region/tree | |||||
ignore-csrf-urls: | ignore-csrf-urls: | ||||
- /api/v1/user/auth/** | - /api/v1/user/auth/** | ||||
- /v2/api-docs | - /v2/api-docs | ||||
@@ -28,9 +44,20 @@ security: | |||||
- /file/** | - /file/** | ||||
- /optLog/** | - /optLog/** | ||||
- /dict/** | - /dict/** | ||||
- /oa/** | |||||
- /wflow/** | |||||
- /sys/** | |||||
- /api/v1/verification/** | |||||
- /api/v1/expert/registration | |||||
- /api/v1/meta/dictionary/list | |||||
- /api/v1/meta/tag | |||||
- /api/v1/organization/tree-list | |||||
- /api/v1/organization/get-child-list | |||||
- /api/v1/region/tree | |||||
role-map: | role-map: | ||||
"engineer": | "engineer": | ||||
"project_manager": | "project_manager": | ||||
- /api/v1/user-info/kick-off/** | |||||
"enterprise_admin": | "enterprise_admin": | ||||
"regional_general_manager": | "regional_general_manager": | ||||
"driver": | "driver": | ||||