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<Boolean> createAgreement(@RequestBody StateAgreementSaveBO saveBO) {
|
//根据协议类型和房产id进行排重 每个协议只能存在一份
|
LambdaQueryWrapper<StateAgreement> 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<Boolean> updateAgreement(@RequestBody UpdateAgreementBO bo) {
|
return AjaxResult.success(stateAgreementService.updateStateAgreement(bo.getHouseId()));
|
}
|
// 更新协议
|
@PostMapping(UrlConstants.STATE_AGREEMENT_UPDATE_AGREEMENT)
|
public AjaxResult<StateAgreementSaveBO> 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<Boolean> deleteAgreement(@RequestParam String agreementId) {
|
StateAgreement stateAgreement = stateAgreementService.getById(agreementId);
|
if (ObjectUtil.isNull(stateAgreement)) {
|
throw new GlobalException("该协议不存在");
|
}
|
List<Integer> 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<StateAgreement> 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<PageInfo<StateAgreementVO>> listStateAgreement(@RequestBody StateAgreementBO request) {
|
return AjaxResult.success(stateAgreementService.listDataByCondition(request));
|
}
|
// 协议详情
|
@GetMapping(UrlConstants.STATE_AGREEMENT_DETAIL)
|
public AjaxResult<List<AgreementDetailVO>> 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<String, Object> wordData = stateAgreementService.getWordData(stateHouseholdId, stateAgreementId);
|
LambdaQueryWrapper<StateAgreement> 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<Boolean> submitAgreement(@RequestParam List<String> agreementId) {
|
if (CollectionUtils.isEmpty(agreementId)) {
|
return AjaxResult.success(Boolean.FALSE);
|
}
|
List<StateAgreement> 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<String, Object> variable = new HashMap<>();
|
variable.put("stateHouseholdId", stateHousehold.getId());
|
processStartBO.setVariable(variable);
|
stateProcessTemplateService.start(processStartBO);
|
}
|
return AjaxResult.success(stateAgreementService.saveOrUpdateBatch(agreementList));
|
}
|
}
|