package com.by4cloud.platformx.business.controller; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; 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.by4cloud.platformx.business.dto.ContractAddDTO; import com.by4cloud.platformx.business.dto.ContractUpdateDTO; import com.by4cloud.platformx.business.entity.Contract; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.mybatis.BaseModel; import com.by4cloud.platformx.common.log.annotation.SysLog; import com.by4cloud.platformx.business.service.ContractService; import com.by4cloud.platformx.common.security.annotation.Inner; import com.by4cloud.platformx.common.security.util.SecurityUtils; import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.springframework.security.access.prepost.PreAuthorize; import com.by4cloud.platformx.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.HttpHeaders; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.List; import java.util.Objects; /** * 合同管理 * * @author platformx * @date 2026-04-29 16:46:26 */ @RestController @RequiredArgsConstructor @RequestMapping("/contract" ) @Tag(description = "contract" , name = "合同管理管理" ) @SecurityRequirement(name = HttpHeaders.AUTHORIZATION) public class ContractController { private final ContractService contractService; /** * 分页查询 * @param page 分页对象 * @param contract 合同管理 * @return */ @Operation(summary = "分页查询" , description = "分页查询" ) @GetMapping("/page" ) @PreAuthorize("@pms.hasPermission('business_contract_view')" ) public R getContractPage(@ParameterObject Page page, @ParameterObject Contract contract) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.like(StringUtils.isNotBlank(contract.getContractName()),Contract::getContractName,contract.getContractName()); wrapper.like(StringUtils.isNotBlank(contract.getPartyA()),Contract::getPartyA,contract.getPartyA()); wrapper.eq(ObjUtil.isNotNull(contract.getContractStatus()),Contract::getContractStatus,contract.getContractStatus()); wrapper.orderByDesc(BaseModel::getCreateTime); return R.ok(contractService.pageByScope(page, wrapper)); } /** * 通过id查询合同管理 * @param id id * @return R */ @Operation(summary = "通过id查询" , description = "通过id查询" ) @GetMapping("/{id}" ) @PreAuthorize("@pms.hasPermission('business_contract_view')" ) public R getById(@PathVariable("id" ) Long id) { return R.ok(contractService.detail(id)); } /** * 新增合同管理 * @param addDTO 合同管理 * @return R */ @Operation(summary = "新增合同管理" , description = "新增合同管理" ) @SysLog("新增合同管理" ) @PostMapping @PreAuthorize("@pms.hasPermission('business_contract_add')" ) public R save(@RequestBody ContractAddDTO addDTO) { return contractService.add(addDTO); } /** * 修改合同管理 * @param updateDTO 合同管理 * @return R */ @Operation(summary = "修改合同管理" , description = "修改合同管理" ) @SysLog("修改合同管理" ) @PutMapping @PreAuthorize("@pms.hasPermission('business_contract_edit')" ) public R updateById(@RequestBody ContractUpdateDTO updateDTO) { return contractService.edit(updateDTO); } /** * 通过id删除合同管理 * @param ids id列表 * @return R */ @Operation(summary = "通过id删除合同管理" , description = "通过id删除合同管理" ) @SysLog("通过id删除合同管理" ) @DeleteMapping @PreAuthorize("@pms.hasPermission('business_contract_del')" ) public R removeById(@RequestBody Long[] ids) { return R.ok(contractService.removeBatchByIds(CollUtil.toList(ids))); } /** * 导出excel 表格 * @param contract 查询条件 * @param ids 导出指定ID * @return excel 文件流 */ @ResponseExcel @GetMapping("/export") @PreAuthorize("@pms.hasPermission('business_contract_export')" ) public List export(Contract contract,Long[] ids) { return contractService.list(Wrappers.lambdaQuery(contract).in(ArrayUtil.isNotEmpty(ids), Contract::getId, ids)); } /** * 启动审核流程 * @param id id * @return R */ @Operation(summary = "通过id启动审核流程" , description = "通过id合同生效" ) @GetMapping("/startApproval/{id}" ) public R startApproval(@PathVariable("id" ) Long id) { return contractService.startApproval(id); } /** * 定时生成应收逾期 * @return R */ @GetMapping("/genCurrentOverdue" ) @Inner(value = false) public R genCurrentOverdue() { return contractService.genCurrentOverdue(); } /** * 定时生成周期性应收 * @return R */ @GetMapping("/genCycleReceiced" ) @Inner(value = false) public R genCycleReceiced() { return contractService.genCycleReceiced(); } /** * 生成新合同 * @param id id * @return R */ @Operation(summary = "通过id生成新合同" , description = "通过id生成新合同" ) @GetMapping("/copyNewContract/{id}" ) public R copyNewContract(@PathVariable("id" ) Long id) { return contractService.copyNewContract(id); } /** * 根据客商查询合同 * @param busId id * @return R */ @Operation(summary = "根据客商查询合同" , description = "根据客商查询合同" ) @GetMapping("/listByBusId/{busId}" ) public R listByBusId(@PathVariable("busId" ) Long busId) { return R.ok(contractService.listByScope(Wrappers.lambdaQuery().eq(Contract::getPartyAId,busId) .gt(Contract::getBillingAmout,new BigDecimal("0")))); } /** * 根据模版生成word一煤机加工承揽合同 * @param id id * @return R */ @Operation(summary = "根据模版生成word合同" , description = "根据模版生成word合同" ) @GetMapping("/exportContractYMJJGCLWord/{id}" ) public void exportContractYMJJGCLWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJJGCLWord(id,response); } }