@@ -0,0 +1,63 @@ | |||||
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.PurchaseSaveDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.vo.ContractVO; | |||||
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); | |||||
} | |||||
} |
@@ -0,0 +1,282 @@ | |||||
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.PurchaseSaveDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.Contract; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.PaymentPlan; | |||||
import com.ningdatech.pmapi.projectdeclared.model.entity.Purchase; | |||||
import com.ningdatech.pmapi.projectdeclared.model.vo.ContractVO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.vo.PaymentPlanVO; | |||||
import com.ningdatech.pmapi.projectdeclared.model.vo.PurchaseVO; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IContractService; | |||||
import com.ningdatech.pmapi.projectdeclared.service.IPaymentPlanService; | |||||
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.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 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)); | |||||
if(CollUtil.isNotEmpty(payments)){ | |||||
vo.setPayments(convertPayments(payments)); | |||||
} | |||||
return vo; | |||||
} | |||||
private List<PaymentPlanVO> convertPayments(List<PaymentPlan> payments) { | |||||
if(CollUtil.isEmpty(payments)){ | |||||
return Collections.emptyList(); | |||||
} | |||||
return payments.stream().map(p -> BeanUtil.copyProperties(p,PaymentPlanVO.class)) | |||||
.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()); | |||||
project.setDeliveryTime(dto.getDeliveryTime()); | |||||
projectService.updateById(project); | |||||
} | |||||
return "填写成功"; | |||||
} | |||||
} |
@@ -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) { | ||||
@@ -106,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); | ||||
//数据导出处理函数 | //数据导出处理函数 | ||||
@@ -127,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); | ||||
} | } | ||||
@@ -184,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 "填写成功"; | ||||
@@ -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,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,16 @@ 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; | |||||
} | } |
@@ -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 BigDecimal planAmount; | |||||
@ApiModelProperty("支付金额") | |||||
private BigDecimal paymentAmount; | |||||
@ApiModelProperty("支付时间") | |||||
@JsonFormat(pattern = "yyyy-MM-dd") | |||||
private LocalDateTime paymentTime; | |||||
} |
@@ -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 BigDecimal planAmount; | |||||
@ApiModelProperty("支付金额") | |||||
private BigDecimal paymentAmount; | |||||
@ApiModelProperty("支付时间") | |||||
private LocalDateTime paymentTime; | |||||
} |
@@ -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,54 @@ | |||||
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.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 BigDecimal planAmount; | |||||
@ApiModelProperty("支付金额") | |||||
private BigDecimal paymentAmount; | |||||
@ApiModelProperty("支付时间") | |||||
@JsonFormat(pattern = "yyyy-MM-dd") | |||||
private LocalDateTime paymentTime; | |||||
} |
@@ -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,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 { | |||||
} |
@@ -329,4 +329,19 @@ 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; | |||||
} | } |
@@ -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,24 @@ 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; | |||||
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; | ||||
@@ -82,6 +83,17 @@ 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; | |||||
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)) | ||||