feat(contract): 完善合同模版管理功能

- 移除示例模块依赖配置,优化项目结构
- 调整Admin模块控制器依赖顺序,修正模块引用错误
- 更新开发环境数据库配置,调整连接信息及资源路径
- 新增合同模版及打印模版实体、Mapper接口和Service接口
- 实现合同模版管理服务,包括列表查询、详情、创建、编辑、删除功能
- 新增合同模版控制器,提供REST接口支持前端访问
- 实现合同模版表单验证,包含唯一性和必填字段校验
- 支持合同打印模版子表数据的增删改操作
- 增加分页、排序及复杂条件查询支持,兼容PC与APP端数据过滤
- 完善合同模版数据转换和返回,支持多端数据交换和展示
This commit is contained in:
2026-05-21 16:21:22 +08:00
parent f81ecf9316
commit 06f5fec8d2
29 changed files with 1197 additions and 290 deletions

View File

@@ -0,0 +1,269 @@
package com.yunzhupaas.cm.controller;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.exception.DataException;
import com.yunzhupaas.permission.entity.UserEntity;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.cm.service.*;
import com.yunzhupaas.cm.entity.*;
import com.yunzhupaas.util.*;
import com.yunzhupaas.cm.model.contracttemp.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yunzhupaas.flowable.entity.TaskEntity;
import jakarta.validation.Valid;
import java.util.*;
import com.yunzhupaas.model.ExcelModel;
import com.yunzhupaas.excel.ExcelExportStyler;
import com.yunzhupaas.excel.ExcelHelper;
import com.yunzhupaas.annotation.YunzhupaasField;
import com.yunzhupaas.base.vo.PageListVO;
import com.yunzhupaas.base.vo.PaginationVO;
import com.yunzhupaas.base.vo.DownloadVO;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.base.entity.ProvinceEntity;
import java.io.IOException;
import java.util.stream.Collectors;
import com.yunzhupaas.flowable.entity.TaskEntity;
import com.yunzhupaas.exception.WorkFlowException;
import com.yunzhupaas.model.visualJson.UploaderTemplateModel;
import com.yunzhupaas.base.util.FormExecelUtils;
import org.springframework.transaction.annotation.Transactional;
/**
* 合同模版管理
* @版本: V5.2.7
* @版权: Copyright @ 2025 深圳市乐程软件有限公司版权所有
* @作者: 深圳市乐程软件有限公司
* @日期: 2026-05-21
*/
@Slf4j
@RestController
@Tag(name = "合同模版管理", description = "合同模版管理")
@RequestMapping("/api/cm/ContractTemp")
public class ContractTempController {
@Autowired
private GeneraterSwapUtil generaterSwapUtil;
@Autowired
private UserProvider userProvider;
@Autowired
private ContractTempService contractTempService;
@Autowired
private ContractPrintingTempService contractPrintingTempService;
/**
* 列表
*
* @param contractTempPagination
* @return
*/
@Operation(summary = "获取列表")
@PostMapping("/getList")
public ActionResult list(@RequestBody ContractTempPagination contractTempPagination) throws Exception {
List<ContractTempEntity> list = contractTempService.getList(contractTempPagination);
List<Map<String, Object>> realList = new ArrayList<>();
for (ContractTempEntity entity : list) {
Map<String, Object> contractTempMap = JsonUtil.entityToMap(entity);
contractTempMap.put("id", contractTempMap.get("contract_temp_id"));
// 副表数据
// 子表数据
List<ContractPrintingTempEntity> contractPrintingTempList = entity.getContractPrintingTemp();
contractTempMap.put("tablePrintingTemp",
JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(contractPrintingTempList)));
contractTempMap.put("contractPrintingTempList",
JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(contractPrintingTempList)));
realList.add(contractTempMap);
}
// 数据转换
boolean isPc = "pc".equals(ServletUtil.getHeader("yunzhupaas-origin"));
realList = generaterSwapUtil.swapDataList(realList, ContractTempConstant.getFormData(),
ContractTempConstant.getColumnData(), contractTempPagination.getModuleId(), isPc ? false : false);
// 返回对象
PageListVO vo = new PageListVO();
vo.setList(realList);
PaginationVO page = JsonUtil.getJsonToBean(contractTempPagination, PaginationVO.class);
vo.setPagination(page);
return ActionResult.success(vo);
}
/**
* 创建
*
* @param contractTempForm
* @return
*/
@PostMapping()
@Operation(summary = "创建")
public ActionResult create(@RequestBody @Valid ContractTempForm contractTempForm) {
String b = contractTempService.checkForm(contractTempForm, 0);
if (StringUtil.isNotEmpty(b)) {
return ActionResult.fail(b);
}
try {
contractTempService.saveOrUpdate(contractTempForm, null, true);
} catch (Exception e) {
log.error("【合同模版创建接口异常】参数:{}", contractTempForm, e);
return ActionResult.fail(MsgCode.FA028.get());
}
return ActionResult.success(MsgCode.SU001.get());
}
/**
* 删除
*
* @param id
* @return
*/
@Operation(summary = "删除")
@DeleteMapping("/{id}")
@Transactional
public ActionResult delete(@PathVariable("id") String id,
@RequestParam(name = "forceDel", defaultValue = "false") boolean forceDel) throws Exception {
ContractTempEntity entity = contractTempService.getInfo(id);
if (entity != null) {
// 主表数据删除
contractTempService.delete(entity);
QueryWrapper<ContractPrintingTempEntity> queryWrapperContractPrintingTemp = new QueryWrapper<>();
queryWrapperContractPrintingTemp.lambda().eq(ContractPrintingTempEntity::getContractTempId,
entity.getContractTempCode());
// 子表数据删除
contractPrintingTempService.remove(queryWrapperContractPrintingTemp);
}
return ActionResult.success(MsgCode.SU003.get());
}
/**
* 批量删除
*
* @param obj
* @return
*/
@DeleteMapping("/batchRemove")
@Transactional
@Operation(summary = "批量删除")
public ActionResult batchRemove(@RequestBody Object obj) {
Map<String, Object> objectMap = JsonUtil.entityToMap(obj);
List<String> idList = JsonUtil.getJsonToList(objectMap.get("ids"), String.class);
String errInfo = "";
List<String> successList = new ArrayList<>();
for (String allId : idList) {
try {
this.delete(allId, false);
successList.add(allId);
} catch (Exception e) {
errInfo = e.getMessage();
}
}
if (successList.size() == 0 && StringUtil.isNotEmpty(errInfo)) {
return ActionResult.fail(errInfo);
}
return ActionResult.success(MsgCode.SU003.get());
}
/**
* 编辑
*
* @param id
* @param contractTempForm
* @return
*/
@PutMapping("/{id}")
@Operation(summary = "更新")
public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid ContractTempForm contractTempForm,
@RequestParam(value = "isImport", required = false) boolean isImport) {
ContractTempEntity entity = contractTempService.getInfo(id);
if (entity != null) {
contractTempForm.setContractTempId(String.valueOf(entity.getContractTempId()));
if (!isImport) {
String b = contractTempService.checkForm(contractTempForm, 1);
if (StringUtil.isNotEmpty(b)) {
return ActionResult.fail(b);
}
}
try {
contractTempService.saveOrUpdate(contractTempForm, id, false);
} catch (DataException e1) {
return ActionResult.fail(e1.getMessage());
} catch (Exception e) {
log.error("【合同模版编辑接口异常】参数:{}", contractTempForm, e);
return ActionResult.fail(MsgCode.FA029.get());
}
return ActionResult.success(MsgCode.SU004.get());
} else {
return ActionResult.fail(MsgCode.FA002.get());
}
}
/**
* 表单信息(详情页)
* 详情页面使用-转换数据
*
* @param id
* @return
*/
@Operation(summary = "表单信息(详情页)")
@GetMapping("/detail/{id}")
public ActionResult detailInfo(@PathVariable("id") String id) {
ContractTempEntity entity = contractTempService.getInfo(id);
if (entity == null) {
return ActionResult.fail(MsgCode.FA001.get());
}
Map<String, Object> contractTempMap = JsonUtil.entityToMap(entity);
contractTempMap.put("id", contractTempMap.get("contract_temp_id"));
// 副表数据
// 子表数据
List<ContractPrintingTempEntity> contractPrintingTempList = entity.getContractPrintingTemp();
contractTempMap.put("tablePrintingTemp",
JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(contractPrintingTempList)));
contractTempMap.put("contractPrintingTempList",
JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(contractPrintingTempList)));
boolean isPc = "pc".equals(ServletUtil.getHeader("yunzhupaas-origin"));
contractTempMap = generaterSwapUtil.swapDataDetail(contractTempMap, ContractTempConstant.getFormData(),
"826534292984170373", isPc ? false : false);
// 子表数据
contractTempMap.put("contractPrintingTempList", contractTempMap.get("tablePrintingTemp"));
return ActionResult.success(contractTempMap);
}
/**
* 获取详情(编辑页)
* 编辑页面使用-不转换数据
*
* @param id
* @return
*/
@Operation(summary = "信息")
@GetMapping("/{id}")
public ActionResult info(@PathVariable("id") String id) {
ContractTempEntity entity = contractTempService.getInfo(id);
if (entity == null) {
return ActionResult.fail(MsgCode.FA001.get());
}
Map<String, Object> contractTempMap = JsonUtil.entityToMap(entity);
contractTempMap.put("id", contractTempMap.get("contract_temp_id"));
// 副表数据
// 子表数据
List<ContractPrintingTempEntity> contractPrintingTempList = entity.getContractPrintingTemp();
contractTempMap.put("tablePrintingTemp",
JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(contractPrintingTempList)));
contractTempMap.put("contractPrintingTempList",
JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(contractPrintingTempList)));
contractTempMap = generaterSwapUtil.swapDataForm(contractTempMap, ContractTempConstant.getFormData(),
ContractTempConstant.TABLEFIELDKEY, ContractTempConstant.TABLERENAMES);
return ActionResult.success(contractTempMap);
}
}