package com.zzg.web.controller.state; import cn.afterturn.easypoi.word.WordExportUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.github.pagehelper.PageInfo; import com.zzg.common.constant.state.UrlConstants; import com.zzg.common.core.domain.AjaxResult; import com.zzg.common.core.domain.entity.state.StateAgreement; import com.zzg.common.core.domain.entity.state.StateHousehold; import com.zzg.common.core.domain.entity.state.StateProject; import com.zzg.common.enums.AgreementTypeEnum; import com.zzg.common.enums.ProcessCategoryEnum; import com.zzg.common.enums.SubmitStatusEnum; import com.zzg.common.exception.GlobalException; import com.zzg.common.utils.file.FileUtils; import com.zzg.system.domain.bo.*; import com.zzg.system.domain.vo.AgreementDetailVO; import com.zzg.system.domain.vo.StateAgreementVO; import com.zzg.system.service.state.StateAgreementService; import com.zzg.system.service.state.StateHouseholdService; import com.zzg.system.service.state.StateProcessTemplateService; import com.zzg.system.service.state.StateProjectService; import lombok.RequiredArgsConstructor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.http.MediaType; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; @RestController @RequiredArgsConstructor public class StateAgreementController { private final StateAgreementService stateAgreementService; private final StateHouseholdService stateHouseholdService; private final StateProcessTemplateService stateProcessTemplateService; private final StateProjectService stateProjectService; // 新增协议 @PostMapping(UrlConstants.STATE_AGREEMENT_SAVE) public AjaxResult createAgreement(@RequestBody StateAgreementSaveBO saveBO) { //根据协议类型和房产id进行排重 每个协议只能存在一份 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(StateAgreement::getAgreementFileType, saveBO.getAgreementFileType()); queryWrapper.eq(StateAgreement::getStateHouseholdId, saveBO.getStateHouseholdId()); queryWrapper.isNotNull(StateAgreement::getAgreementNumber); StateAgreement stateAgreement = stateAgreementService.getOne(queryWrapper); if (ObjectUtil.isNotEmpty(stateAgreement) && Objects.isNull(saveBO.getId())) { throw new GlobalException("每种协议类型只能存在一份"); } if (!CollectionUtils.isEmpty(saveBO.getFileBOList())) { saveBO.setFileUrl(JSON.toJSONString(saveBO.getFileBOList())); String appendFileName = saveBO.getFileBOList().stream().map(FileBO::getOriginalFilename).collect(Collectors.joining(",")); saveBO.setAppendFileName(appendFileName); } return AjaxResult.success(stateAgreementService.saveOrUpdate(saveBO)); } // 模拟转征收 @PostMapping(UrlConstants.STATE_AGREEMENT_UPDATE) public AjaxResult updateAgreement(@RequestBody UpdateAgreementBO bo) { return AjaxResult.success(stateAgreementService.updateStateAgreement(bo.getHouseId())); } // 更新协议 @PostMapping(UrlConstants.STATE_AGREEMENT_UPDATE_AGREEMENT) public AjaxResult updateAgreement(@RequestBody StateAgreementSaveBO saveBO) { if (!CollectionUtils.isEmpty(saveBO.getFileBOList())) { saveBO.setFileUrl(JSON.toJSONString(saveBO.getFileBOList())); String appendFileName = saveBO.getFileBOList().stream().map(FileBO::getOriginalFilename).collect(Collectors.joining(",")); saveBO.setAppendFileName(appendFileName); } stateAgreementService.saveOrUpdate(saveBO); return AjaxResult.success(saveBO); } // 协议详情 - 编辑 -删除按钮 @GetMapping(UrlConstants.STATE_AGREEMENT_DEL) public AjaxResult deleteAgreement(@RequestParam String agreementId) { StateAgreement stateAgreement = stateAgreementService.getById(agreementId); if (ObjectUtil.isNull(stateAgreement)) { throw new GlobalException("该协议不存在"); } List fileList = Stream.of(AgreementTypeEnum.values()).map(AgreementTypeEnum::getValue).collect(Collectors.toList()); //保留固定协议数据 if (fileList.contains(stateAgreement.getAgreementFileType()) && !Objects.equals(stateAgreement.getAgreementFileType(), AgreementTypeEnum.OTHER_AGREEMENT.getValue())) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(StateAgreement::getId, stateAgreement.getId()) // 根据 ID 进行更新 .set(StateAgreement::getSignAt, null) .set(StateAgreement::getMoney, null) .set(StateAgreement::getAppendFileName, null) .set(StateAgreement::getAgreementNumber, null) .set(StateAgreement::getFileUrl, null); return AjaxResult.success(stateAgreementService.update(updateWrapper)); } return AjaxResult.success(stateAgreementService.removeById(agreementId)); } // 协议管理 - 页面查询 @PostMapping(UrlConstants.STATE_AGREEMENT_LIST) public AjaxResult> listStateAgreement(@RequestBody StateAgreementBO request) { return AjaxResult.success(stateAgreementService.listDataByCondition(request)); } // 协议详情 @GetMapping(UrlConstants.STATE_AGREEMENT_DETAIL) public AjaxResult> getAgreementDetail(@RequestParam String stateHouseId) { return AjaxResult.success(stateAgreementService.listAgreementDetailByHouseId(stateHouseId)); } //生成协议word @GetMapping(UrlConstants.STATE_AGREEMENT_GENERATE) public void generateAgreementDetail( @RequestParam String stateHouseholdId, @RequestParam String stateAgreementId, HttpServletResponse response ) throws Exception { StateAgreementBO request = new StateAgreementBO(); request.setStateHouseholdId(stateHouseholdId); Map wordData = stateAgreementService.getWordData(stateHouseholdId, stateAgreementId); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(StateAgreement::getId, stateAgreementId) .eq(StateAgreement::getStateHouseholdId, stateHouseholdId); StateAgreement one = stateAgreementService.getOne(queryWrapper); Integer agreementFileType = one.getAgreementFileType(); AgreementTypeEnum enumByValue = AgreementTypeEnum.getEnumByValue(agreementFileType); String templatePath; switch (enumByValue) { case STATE_AGREEMENT: templatePath = "templates/成都市国有土地上房屋征收补协议.docx"; break; case VIRTUAL_STATE_AGREEMENT: templatePath = "templates/成都市国有土地上房屋模拟搬迁补偿协议(房屋征收).docx"; break; case VIRTUAL_STATE_MOVE_AGREEMENT: templatePath = "templates/成都市国有土地上房屋模拟搬迁补偿协议(协议搬迁).docx"; break; default: templatePath = "templates/word_template.docx"; } XWPFDocument document = WordExportUtil.exportWord07(templatePath, wordData); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); // 4. 设置响应头,生成下载 FileUtils.setAttachmentResponseHeader(response, "协议文件.docx"); // 5. 将生成的文档写入响应流 document.write(response.getOutputStream()); document.close(); } //协议提交审核接口 @GetMapping(UrlConstants.STATE_AGREEMENT_WORKFLOW_SUBMIT) public AjaxResult submitAgreement(@RequestParam List agreementId) { if (CollectionUtils.isEmpty(agreementId)) { return AjaxResult.success(Boolean.FALSE); } List agreementList = stateAgreementService.listByIds(agreementId); if (CollectionUtils.isEmpty(agreementList)) { return AjaxResult.success(false); } agreementList.forEach(stateAgreement -> stateAgreement.setAuditStatus(SubmitStatusEnum.SUBMITTED.getValue())); StateHousehold stateHousehold = stateHouseholdService.getById(agreementList.get(0).getStateHouseholdId()); if (ObjectUtil.isNotEmpty(stateHousehold)) { //审核中 stateHousehold.setAgreementStatus(SubmitStatusEnum.PENDING_REVIEW.getValue()); stateHouseholdService.updateById(stateHousehold); //提交审核(协议签订) ProcessStartBO processStartBO = new ProcessStartBO(); processStartBO.setCategory(ProcessCategoryEnum.CATEGORY3.getValue().toString()); processStartBO.setModuleName("协议签订"); //查询征收单位 StateProject stateProject = stateProjectService.getProjectById(stateHousehold.getStateProjectId()); String name = ObjectUtil.isEmpty(stateProject) ? "" : stateProject.getProjectName(); processStartBO.setName(name); String cedName = ObjectUtil.isEmpty(stateProject) ? "" : stateProject.getDepartment(); String remark = String.format("【镇/街】:%s,【征收实施单位】:%s", stateHousehold.getBelongingStreetTown(), cedName); processStartBO.setRemark(remark); Map variable = new HashMap<>(); variable.put("stateHouseholdId", stateHousehold.getId()); processStartBO.setVariable(variable); //启动工作流 stateProcessTemplateService.start(processStartBO); } return AjaxResult.success(stateAgreementService.saveOrUpdateBatch(agreementList)); } }