From b954f194459fa6673346a32dc0dbd56d34ee755e Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期五, 11 四月 2025 17:09:40 +0800 Subject: [PATCH] 合同导入 --- ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java | 221 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 219 insertions(+), 2 deletions(-) diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java index 602f5d8..086ef78 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java @@ -1,9 +1,61 @@ package com.ruoyi.web.controller.api; -import org.springframework.web.bind.annotation.RequestMapping; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.DictConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.domain.model.LoginUserApplet; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.enums.ProcessCategoryEnum; +import com.ruoyi.common.utils.CodeGenerateUtils; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.WebUtils; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.bo.ProcessStartBO; +import com.ruoyi.system.dto.RevokeDTO; +import com.ruoyi.system.dto.SignContractDTO; +import com.ruoyi.system.model.TContract; +import com.ruoyi.system.model.TContractRentType; +import com.ruoyi.system.model.THouse; +import com.ruoyi.system.model.TTenant; +import com.ruoyi.system.query.TContractAppletQuery; +import com.ruoyi.system.query.TContractQuery; +import com.ruoyi.system.service.*; +import com.ruoyi.system.vo.TContractAppletVO; +import com.ruoyi.system.vo.TContractVO; +import com.ruoyi.web.controller.tool.ImportExcelUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.bind.annotation.RestController; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * <p> @@ -14,8 +66,173 @@ * @since 2025-01-17 */ @RestController +@Api(tags = "我的合同") + @RequestMapping("/t-contract") public class TContractController { + @Autowired + private TContractService contractService; + @Autowired + private TContractRentTypeService contractRentTypeService; + @Autowired + private THouseService houseService; + @Autowired + private TBillService billService; + @Autowired + private TokenService tokenService; + @Autowired + private TTenantService tTenantService; + @Autowired + private StateProcessTemplateService stateProcessTemplateService; + @ApiOperation(value = " 签订合同") + @PostMapping(value = "/signContract") + public R signContract(@RequestBody SignContractDTO dto) { + return contractService.signContract(dto); + } + @ApiOperation(value = "我的合同分页列表") + @PostMapping(value = "/contractList") + public R<PageInfo<TContract>> contractList(@RequestBody TContractAppletQuery query) { + LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); + if (loginUserApplet==null){ + return R.fail(401,"登录失效"); + } + query.setTenantId(loginUserApplet.getUserId()); + return R.ok(contractService.contractAppletList(query)); + } + + @Log(title = "合同管理-撤销审批", businessType = BusinessType.UPDATE) + @ApiOperation(value = "撤销审批") + @PostMapping(value = "/updateContractStatus") + public R<Boolean> updateContractStatus(@RequestBody RevokeDTO dto) { + TContract contract = contractService.getById(dto.getContractId()); + contract.setStatus("1"); + contractService.updateById(contract); + // 撤销审批实例 + stateProcessTemplateService.revoke(dto.getInstanceId()); + return R.ok(); + } + @ApiOperation(value = "查询合同信息信息") + @GetMapping(value = "/getContractById") + public R<TContractAppletVO> getContractById(@RequestParam String id) { + LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); + if (loginUserApplet==null){ + return R.fail(401,"登录失效"); + } + TContractAppletVO res = new TContractAppletVO(); + TContract contract = contractService.getById(id); + BeanUtils.copyProperties(contract,res); + res.setStartTimeString(DateUtils.localDateTimeToStringYear(contract.getStartTime())); + res.setEndTimeString(DateUtils.localDateTimeToStringYear(contract.getEndTime())); + res.setPayType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE,res.getPayType())); + res.setStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_STATUS,res.getStatus())); + TContractRentType contractRentType = contractRentTypeService.lambdaQuery().eq(TContractRentType::getContractId, id).one(); + if (contractRentType!=null){ + BeanUtils.copyProperties(contractRentType,res); + } + TTenant tTenant = tTenantService.getById(contract.getTenantId()); + res.setTenant(tTenant); + TContract oldContract = contractService.getOne(new LambdaQueryWrapper<TContract>() + .eq(TContract::getHouseId,contract.getHouseId()) + .eq(TContract::getTenantId,loginUserApplet.getUserId()) + .eq(TContract::getStatus, 4) + .le(TContract::getStartTime, LocalDateTime.now()) + .ge(TContract::getEndTime, LocalDateTime.now())); + THouse house = houseService.getById(contract.getHouseId()); + if (oldContract!=null){ + house.setTenantType(oldContract.getPayType()); + } + res.setHouse(house); + return R.ok(res); + } + + @ApiOperation(value = "合同导入模板下载") + @GetMapping("/import-template") + public void importTemplate() { + List<TContract> contractList = new ArrayList<>(); + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TContract.class, contractList); + HttpServletResponse response = WebUtils.response(); + ServletOutputStream outputStream = null; + try { + String fileName = URLEncoder.encode("合同导入模板.xls", "utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setHeader("content-Type", "application/vnd.ms-excel"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache"); + outputStream = response.getOutputStream(); + workbook.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("合同导入模板下载失败!"); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @ApiOperation(value = "合同导入") + @PostMapping("/importContracts") + @ApiImplicitParam(paramType = "form", name = "file", value = "文件对象", required = true, dataType = "__file") + public R<String> importContracts(@RequestPart("file") MultipartFile file) { + ImportParams params = new ImportParams(); +// params.setTitleRows(1);//标题行数 + params.setHeadRows(1); //表头行数 + try { + InputStream inputStream = file.getInputStream(); + List<TContract> contractList = ExcelImportUtil.importExcel(inputStream, TContract.class, params); + List<String> errors = new ArrayList<>(); + for (TContract tContract : contractList) { + try{ + tContract.setStartTime(DateUtils.stringToLocalDateTime(tContract.getStartTimeStr() + " 00:00:00")); + tContract.setEndTime(DateUtils.stringToLocalDateTime(tContract.getEndTimeStr() + " 23:59:59")); + tContract.setStartPayTime(DateUtils.stringToLocalDateTime(tContract.getStartPayTimeStr() + " 00:00:00")); + tContract.setSignTime(DateUtils.stringToLocalDateTime(tContract.getSignTimeStr() + " 00:00:00")); + contractService.save(tContract); + if(tContract.getStatus().equals("2")){ + //发起合同新增审批 + ProcessStartBO processStartBO = new ProcessStartBO(); + processStartBO.setCategory(ProcessCategoryEnum.CATEGORY1.getValue().toString()); + processStartBO.setModuleName("合同新增审批"); + processStartBO.setName(tContract.getContractName()); + //需要显示发起申请人所在单位 + processStartBO.setRemark(""); + Map<String, Object> variable = new HashMap<>(); + variable.put("projectId", tContract.getId()); + processStartBO.setVariable(variable); + //开启工作流程 + Boolean start = stateProcessTemplateService.start(processStartBO); + } + if(tContract.getStatus().equals("9")){ + // 进入签订审批流程 + ProcessStartBO processStartBO = new ProcessStartBO(); + processStartBO.setCategory(ProcessCategoryEnum.CATEGORY2.getValue().toString()); + processStartBO.setModuleName("合同签订审批"); + processStartBO.setName(tContract.getContractName()); + processStartBO.setRemark(""); + Map<String, Object> variable = new HashMap<>(); + variable.put("projectId", tContract.getId()); + processStartBO.setVariable(variable); + //开启工作流程 + stateProcessTemplateService.startApplet(processStartBO); + } + }catch (Exception e){ + errors.add("合同名称:[" + tContract.getContractName() + "],导入错误,忽略导入。"); + } + } + Integer errorLines = 0; + Integer successLines = 0; + errorLines += errors.size(); + successLines += (contractList.size() - errorLines); + R<String> stringApiResult = ImportExcelUtil.importReturnMsg(errorLines, successLines, errors); + return stringApiResult; + } catch (Exception e) { + System.out.println("合同导入失败!" + e.getMessage()); + e.printStackTrace(); + } + return R.ok(); + } } -- Gitblit v1.7.1