Prechádzať zdrojové kódy

feat: 合同管理新增、查询

zhaomuran 3 mesiacov pred
rodič
commit
f12119fb5d

+ 43 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/BlinkContractManageController.java

@@ -0,0 +1,43 @@
+package com.wx.blink.backend.controller;
+
+import com.wx.blink.backend.domain.dto.BlinkContractManageDTO;
+import com.wx.blink.backend.domain.qry.BlinkContractManageQry;
+import com.wx.blink.backend.service.IBlinkContractManageService;
+import com.wx.blink.base.common.annoation.NoNeedLogin;
+import com.wx.blink.base.common.domain.PageResult;
+import com.wx.blink.base.common.domain.ResponseDTO;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+@RestController
+@Tag(name = "合同管理")
+public class BlinkContractManageController {
+
+    @Resource
+    private IBlinkContractManageService contractManageService;
+
+    @Operation(summary = "新增合同")
+    @PostMapping("/supports/contract/create")
+    @NoNeedLogin
+    public ResponseDTO<String> supportsContractCreate(@RequestBody @Valid BlinkContractManageDTO dto) {
+        return contractManageService.supportsContractCreate(dto);
+    }
+
+    @Operation(summary = "合同列表")
+    @GetMapping("/supports/contract/selectPage")
+    @NoNeedLogin
+    public ResponseDTO<PageResult<BlinkContractManageDTO>> supportsContractQueryPage(BlinkContractManageQry qry) {
+        return ResponseDTO.ok(contractManageService.supportsContractQueryPage(qry));
+    }
+
+    @Operation(summary = "获取合同详细信息")
+    @GetMapping("/supports/contract/detail/{id}")
+    @NoNeedLogin
+    public ResponseDTO<BlinkContractManageDTO> supportsContractById(@PathVariable Long id) {
+        return  ResponseDTO.ok(contractManageService.supportsContractById(id));
+    }
+}

+ 118 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/dataobject/BlinkContractManageDO.java

@@ -0,0 +1,118 @@
+package com.wx.blink.backend.domain.dataobject;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.wx.blink.base.common.domain.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("blink_contract_manage")
+public class BlinkContractManageDO extends BaseEntity {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 项目id
+     */
+    private Integer projectId;
+
+    /**
+     * 合同编码
+     */
+    private String contractCode;
+
+    /**
+     * 合同名称
+     */
+    private String contractName;
+
+    /**
+     * 合同类型
+     */
+    private String contractType;
+
+    /**
+     * 客户名称
+     */
+    private String customerName;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+    /**
+     * 合同签订负责人
+     */
+    private String contractHead;
+
+    /**
+     * 合同总金额
+     */
+    private BigDecimal contractTotalAmount;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal contractAmount;
+
+    /**
+     * 增补协议金额
+     */
+    private BigDecimal fillAgreementAmount;
+
+    /**
+     * 已完成合同额
+     */
+    private BigDecimal finishContractAmount;
+
+    /**
+     * 合同签订时间
+     */
+    private Date signDate;
+
+    /**
+     * 合同生效时间
+     */
+    private Date effectDate;
+
+    /**
+     * 合同约定付款类型
+     */
+    private String contractPayType;
+
+    /**
+     * 付款方式
+     */
+    private String payMethod;
+
+    /**
+     * 是否有预付款
+     */
+    private String havePrepayment;
+
+    /**
+     * 预付款金额
+     */
+    private BigDecimal prepaymentAmount;
+
+    /**
+     * 合同主要内容
+     */
+    private String contractMainContent;
+
+    /**
+     * 合同附件
+     */
+    private String contractAttachment;
+
+
+}

+ 154 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/dto/BlinkContractManageDTO.java

@@ -0,0 +1,154 @@
+package com.wx.blink.backend.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.wx.blink.base.common.annoation.DataAdaptorMapping;
+import com.wx.blink.base.common.domain.BaseEntity;
+import com.wx.blink.base.common.json.deserializer.DictValueVoDeserializer;
+import com.wx.blink.base.common.json.deserializer.FileKeyVoDeserializer;
+import com.wx.blink.base.common.json.serializer.FileKeyVoSerializer;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class BlinkContractManageDTO extends BaseEntity {
+
+    /**
+     * id
+     */
+    @Schema(description = "id")
+    private Integer id;
+
+    /**
+     * 项目id
+     */
+    @Schema(description = "项目id")
+    private Integer projectId;
+
+    /**
+     * 合同编码
+     */
+    @Schema(description = "合同编码")
+    private String contractCode;
+
+    /**
+     * 合同名称
+     */
+    @Schema(description = "合同名称")
+    private String contractName;
+
+    /**
+     * 合同类型
+     */
+    @Schema(description = "合同类型")
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    @DataAdaptorMapping(type = "dict", value = "BLINK_CONTRACT_TYPE")
+    private String contractType;
+
+    /**
+     * 合同类型文本
+     */
+    private String contractTypeText;
+
+    /**
+     * 客户名称
+     */
+    @Schema(description = "客户名称")
+    private String customerName;
+
+    /**
+     * 项目名称
+     */
+    @Schema(description = "项目名称")
+    private String projectName;
+
+    /**
+     * 合同签订负责人
+     */
+    @Schema(description = "合同签订负责人")
+    private String contractHead;
+
+    /**
+     * 合同总金额
+     */
+    @Schema(description = "合同总金额")
+    private BigDecimal contractTotalAmount;
+
+    /**
+     * 合同金额
+     */
+    @Schema(description = "合同金额")
+    private BigDecimal contractAmount;
+
+    /**
+     * 增补协议金额
+     */
+    @Schema(description = "增补协议金额")
+    private BigDecimal fillAgreementAmount;
+
+    /**
+     * 已完成合同额
+     */
+    @Schema(description = "已完成合同额")
+    private BigDecimal finishContractAmount;
+
+    /**
+     * 合同签订时间
+     */
+    @Schema(description = "合同签订时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date signDate;
+
+    /**
+     * 合同生效时间
+     */
+    @Schema(description = "合同生效时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date effectDate;
+
+    /**
+     * 合同约定付款类型
+     */
+    @Schema(description = "合同约定付款类型")
+    private String contractPayType;
+
+    /**
+     * 付款方式
+     */
+    @Schema(description = "付款方式")
+    private String payMethod;
+
+    /**
+     * 是否有预付款
+     */
+    @Schema(description = "是否有预付款")
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    @DataAdaptorMapping(type = "dict", value = "BLINK_COMMON_STATE")
+    private String havePrepayment;
+
+    /**
+     * 预付款金额
+     */
+    @Schema(description = "预付款金额")
+    private BigDecimal prepaymentAmount;
+
+    /**
+     * 合同主要内容
+     */
+    @Schema(description = "合同主要内容")
+    private String contractMainContent;
+
+    /**
+     * 合同附件
+     */
+    @Schema(description = "附件")
+    @JsonDeserialize(using = FileKeyVoDeserializer.class)
+    @JsonSerialize(using = FileKeyVoSerializer.class)
+    private String contractAttachment;
+
+
+}

+ 15 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/qry/BlinkContractManageQry.java

@@ -0,0 +1,15 @@
+package com.wx.blink.backend.domain.qry;
+
+import com.wx.blink.base.common.domain.PageParam;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 合同信息 分页查询表单
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BlinkContractManageQry extends PageParam {
+
+}

+ 88 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/BlinkContractManageServiceImpl.java

@@ -0,0 +1,88 @@
+package com.wx.blink.backend.manager;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.wx.blink.backend.domain.dataobject.BlinkContractDO;
+import com.wx.blink.backend.domain.dataobject.BlinkContractManageDO;
+import com.wx.blink.backend.domain.dto.BlinkContractDTO;
+import com.wx.blink.backend.domain.dto.BlinkContractManageDTO;
+import com.wx.blink.backend.domain.qry.BlinkContractManageQry;
+import com.wx.blink.backend.domain.qry.BlinkContractQry;
+import com.wx.blink.backend.objectmapper.BlinkContractManageMapper;
+import com.wx.blink.backend.repository.BlinkContractManageRepository;
+import com.wx.blink.backend.service.IBlinkContractManageService;
+import com.wx.blink.base.common.domain.PageResult;
+import com.wx.blink.base.common.domain.ResponseDTO;
+import com.wx.blink.base.common.util.BlinkEntityUtil;
+import com.wx.blink.base.common.util.BlinkEnumUtil;
+import com.wx.blink.base.common.util.BlinkPageUtil;
+import com.wx.blink.base.module.support.dict.domain.vo.DictValueVO;
+import com.wx.blink.base.module.support.dict.service.DictCacheService;
+import com.wx.blink.base.module.support.serialnumber.constant.SerialNumberIdEnum;
+import com.wx.blink.base.module.support.serialnumber.service.SerialNumberService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+@Service
+public class BlinkContractManageServiceImpl extends ServiceImpl<BlinkContractManageRepository, BlinkContractManageDO> implements IBlinkContractManageService {
+
+    @Resource
+    private BlinkContractManageRepository contractRepository;
+    @Resource
+    private SerialNumberService serialNumberService;
+    @Resource
+    private BlinkContractManageMapper contractManageMapper;
+    @Resource
+    private DictCacheService dictCacheService;
+
+    @Override
+    public PageResult<BlinkContractManageDTO> supportsContractQueryPage(BlinkContractManageQry qry) {
+        Page<?> page = BlinkPageUtil.convert2PageQuery(qry);
+        List<BlinkContractManageDTO> list = contractRepository.supportsContractQueryPage(page, qry);
+        for (int i = 0; i < list.size(); i++) {
+            BlinkContractManageDTO dto = list.get(i);
+            if (null != dto.getContractType()) {
+                List<DictValueVO> dictValueList = dictCacheService.selectByKeyCode("BLINK_CONTRACT_TYPE");
+                Optional<DictValueVO> dictValueVO = dictValueList.stream()
+                        .filter(item -> dto.getContractType().equals(item.getValueCode()))
+                        .findFirst();
+                if (dictValueVO.isPresent()) {
+                    dto.setContractTypeText(dictValueVO.get().getValueName());
+                }
+            }
+        }
+        PageResult<BlinkContractManageDTO> pageResult = BlinkPageUtil.convert2PageResult(page, list);
+        return pageResult;
+    }
+
+    @Override
+    @Transactional
+    public ResponseDTO<String> supportsContractCreate(BlinkContractManageDTO dto) {
+        // 验证合同名称是否重复
+        BlinkContractManageDO validateCustomer = contractRepository.queryByContractName(dto.getContractName(), null, Boolean.FALSE);
+        if (Objects.nonNull(validateCustomer)) {
+            return ResponseDTO.userErrorParam("合同名称重复");
+        }
+        //生成补充协议编码
+        SerialNumberIdEnum serialNumberIdEnum = BlinkEnumUtil.getEnumByValue(4, SerialNumberIdEnum.class);
+        dto.setContractCode(serialNumberService.generate(serialNumberIdEnum));
+        //生成DO
+        BlinkContractManageDO contractManageDO = contractManageMapper.toDO(dto);
+        //创建人赋值
+//        BlinkEntityUtil.setCreateInfo(contractManageDO);
+        //执行保存
+        this.save(contractManageDO);
+
+        return ResponseDTO.ok();
+    }
+
+    @Override
+    public BlinkContractManageDTO supportsContractById(Long id) {
+        return contractManageMapper.toDTO(this.getById(id));
+    }
+}

+ 28 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/objectmapper/BlinkContractManageMapper.java

@@ -0,0 +1,28 @@
+package com.wx.blink.backend.objectmapper;
+
+
+import com.wx.blink.backend.domain.dataobject.BlinkContractDO;
+import com.wx.blink.backend.domain.dataobject.BlinkContractManageDO;
+import com.wx.blink.backend.domain.dto.BlinkContractDTO;
+import com.wx.blink.backend.domain.dto.BlinkContractManageDTO;
+import org.mapstruct.Mapper;
+
+@Mapper(componentModel = "spring")
+public interface BlinkContractManageMapper {
+
+    /**
+     * 转DO
+     *
+     * @param dto
+     * @return
+     */
+    BlinkContractManageDO toDO(BlinkContractManageDTO dto);
+
+    /**
+     * 转DTO
+     *
+     * @param contractManageDO
+     * @return
+     */
+    BlinkContractManageDTO toDTO(BlinkContractManageDO contractManageDO);
+}

+ 38 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkContractManageRepository.java

@@ -0,0 +1,38 @@
+package com.wx.blink.backend.repository;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.wx.blink.backend.domain.dataobject.BlinkContractManageDO;
+import com.wx.blink.backend.domain.dto.BlinkContractManageDTO;
+import com.wx.blink.backend.domain.qry.BlinkContractManageQry;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Mapper
+@Component
+public interface BlinkContractManageRepository extends BaseMapper<BlinkContractManageDO> {
+
+    /**
+     * 验证合同名称是否重复
+     *
+     * @param contractName
+     * @param excludeContractId
+     * @param deletedFlag
+     * @return
+     */
+    BlinkContractManageDO queryByContractName(@Param("contractName") String contractName, @Param("excludeContractId") Long excludeContractId, @Param("deletedFlag") Boolean deletedFlag);
+
+
+    /**
+     * 合同列表
+     *
+     * @param page
+     * @param qry
+     * @return
+     */
+    List<BlinkContractManageDTO> supportsContractQueryPage(Page<?> page, BlinkContractManageQry qry);
+
+}

+ 35 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IBlinkContractManageService.java

@@ -0,0 +1,35 @@
+package com.wx.blink.backend.service;
+
+import com.wx.blink.backend.domain.dto.BlinkContractManageDTO;
+import com.wx.blink.backend.domain.qry.BlinkContractManageQry;
+import com.wx.blink.base.common.domain.PageResult;
+import com.wx.blink.base.common.domain.ResponseDTO;
+
+public interface IBlinkContractManageService {
+
+
+    /**
+     * 客户列表
+     *
+     * @param qry
+     * @return
+     */
+    PageResult<BlinkContractManageDTO> supportsContractQueryPage(BlinkContractManageQry qry);
+
+    /**
+     * 新增合同
+     *
+     * @param dto
+     * @return
+     */
+    ResponseDTO<String> supportsContractCreate(BlinkContractManageDTO dto);
+
+
+    /**
+     * 获取合同详细信息
+     *
+     * @param id
+     * @return
+     */
+    BlinkContractManageDTO supportsContractById(Long id);
+}

+ 19 - 0
bound-link-api/blink-backend/src/main/resources/mapper/BlinkContractManageRepositoryMapper.xml

@@ -0,0 +1,19 @@
+<?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.wx.blink.backend.repository.BlinkContractManageRepository">
+
+    <select id="queryByContractName" resultType="com.wx.blink.backend.domain.dataobject.BlinkContractManageDO">
+        SELECT *
+        FROM blink_contract_manage
+        WHERE contract_name = #{contractName}
+        AND deleted_flag = #{deletedFlag}
+        <if test="excludeContractId != null">
+            AND id != #{excludeContractId}
+        </if>
+    </select>
+
+    <select id="supportsContractQueryPage" resultType="com.wx.blink.backend.domain.dto.BlinkContractManageDTO">
+        select * from blink_contract_manage where deleted_flag = '0'
+    </select>
+
+</mapper>