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.ContracQueryDTO; import com.by4cloud.platformx.business.dto.ContractAddDTO; import com.by4cloud.platformx.business.dto.ContractUpdateDTO; import com.by4cloud.platformx.business.dto.DelayOutApprovalDTO; 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 queryDTO 合同管理 * @return */ @Operation(summary = "分页查询" , description = "分页查询" ) @GetMapping("/page" ) @PreAuthorize("@pms.hasPermission('business_contract_view')" ) public R getContractPage(@ParameterObject Page page, @ParameterObject ContracQueryDTO queryDTO) { 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(Contract::getCreateTime); return R.ok(contractService.pageScope(page, queryDTO)); } /** * 通过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)); } /** * list 下拉 */ @GetMapping("/list") public R list() { return R.ok(contractService.list(Wrappers.lambdaQuery().eq(Contract::getContractStatus,2).orderByDesc(Contract::getCreateTime))); } /** * 启动审核流程 * @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) .eq(Contract::getPartyBId,SecurityUtils.getUser().getCompId()) .gt(Contract::getBillingAmout,new BigDecimal("0")) .apply("paid_amount < billing_amout"))); } /** * 根据模版生成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); } /** * 根据模版生成word一煤机工业品买卖合同 * @param id id * @return R */ @Operation(summary = "根据模版生成word合同" , description = "根据模版生成word合同" ) @GetMapping("/exportContractYMJGYPMMWord/{id}" ) public void exportContractYMJGYPMMWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJGYPMMWord(id,response); } /** * 根据模版生成word一煤机工矿产品买卖合同 * @param id id * @return R */ @Operation(summary = "根据模版生成word合同" , description = "根据模版生成word合同" ) @GetMapping("/exportContractYMJGKCPMMWord/{id}" ) public void exportContractYMJGKCPMMWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJGKCPMMWord(id,response); } /** * 根据模版生成word一煤机采购合同 * @param id id * @return R */ @Operation(summary = "根据模版生成word合同" , description = "根据模版生成word合同" ) @GetMapping("/exportContractYMJCGWord/{id}" ) public void exportContractYMJCGWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJCGWord(id,response); } /** * 根据模版生成word通方公司工业品买卖合同 * @param id id * @return R */ @Operation(summary = "根据模版生成word合同" , description = "根据模版生成word合同" ) @GetMapping("/exportContractTFGSGYPMMWord/{id}" ) public void exportContractTFGSGYPMMWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractTFGSGYPMMWord(id,response); } /** * 延期出货审批 */ @PostMapping("/delayOutApproval") public R delayOutApproval(@RequestBody DelayOutApprovalDTO dto) { return contractService.delayOutApproval(dto); } /** * 新增合同-石工泵 * @return R */ @Operation(summary = "新增合同-石工泵" , description = "新增合同-石工泵" ) @PostMapping("/addContractSgb") @SysLog("新增合同-石工泵" ) public R addContractSgb(@RequestBody ContractAddDTO addDTO) { return contractService.addContractSgb(addDTO); } /** * 修改合同-石工泵 * @return R */ @Operation(summary = "修改合同-石工泵" , description = "修改合同-石工泵" ) @PostMapping("/updateContractSgb") @SysLog("修改合同-石工泵" ) public R updateContractSgb(@RequestBody ContractUpdateDTO updateDTO) { return contractService.updateContractSgb(updateDTO); } }