| | |
| | | package com.ruoyi.web.controller.api; |
| | | |
| | | |
| | | 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.TBillService; |
| | | import com.ruoyi.system.service.TContractRentTypeService; |
| | | import com.ruoyi.system.service.TContractService; |
| | | import com.ruoyi.system.service.THouseService; |
| | | 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 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> |
| | |
| | | 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) { |
| | |
| | | @ApiOperation(value = "我的合同分页列表") |
| | | @PostMapping(value = "/contractList") |
| | | public R<PageInfo<TContract>> contractList(@RequestBody TContractAppletQuery query) { |
| | | // todo 获取登陆人id |
| | | 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<TContractVO> getContractById(@RequestParam String id) { |
| | | TContractVO res = new TContractVO(); |
| | | 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())); |
| | |
| | | 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(); |
| | | } |
| | | |
| | | } |
| | | |