You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

339 lines
14 KiB

package jnpf.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.xuyanwu.spring.file.storage.FileInfo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jnpf.base.ActionResult;
import jnpf.base.UserInfo;
import jnpf.base.vo.DownloadVO;
import jnpf.base.vo.PageListVO;
import jnpf.base.vo.PaginationVO;
import jnpf.constant.FileTypeConstant;
import jnpf.controller.util.SwapUtil;
import jnpf.entity.BiddingProjectSubscribeEntity;
import jnpf.exception.DataException;
import jnpf.file.FileApi;
import jnpf.file.FileUploadApi;
import jnpf.model.bidding_project_subscribe.*;
import jnpf.model.dto.BiddingProjectDto;
import jnpf.permission.entity.UserEntity;
import jnpf.service.BiddingProjectSubscribeService;
import jnpf.util.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* bidding_project_subscribe
*
* @版本: V3.5
* @版权: 引迈信息技术有限公司(https://www.jnpfsoft.com)
* @作者: JNPF开发平台组
* @日期: 2024-06-11
*/
@Slf4j
@RestController
@Tag(name = "bidding_project_subscribe", description = "example")
@RequestMapping("/Bidding_project_subscribe")
@AllArgsConstructor
public class BiddingProjectSubscribeController {
private final SwapUtil generaterSwapUtil;
private final FileApi fileApi;
private final FileUploadApi fileUploadApi;
private final UserProvider userProvider;
private final BiddingProjectSubscribeService biddingProjectSubscribeService;
/**
* 列表
*
* @param biddingProjectSubscribePagination
* @return
*/
@Operation(summary = "获取列表")
@PostMapping("/getList")
public ActionResult list(@RequestBody BiddingProjectSubscribePagination biddingProjectSubscribePagination) throws IOException {
List<BiddingProjectSubscribeEntity> list = biddingProjectSubscribeService.getList(biddingProjectSubscribePagination);
List<Map<String, Object>> realList = new ArrayList<>();
// // 方式一:使用fastjson
// SerializeConfig config = new SerializeConfig();
// config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
for (BiddingProjectSubscribeEntity entity : list) {
Map<String, Object> bidding_project_subscribeMap = JsonUtil.entityToMap(entity);
// Map<String, Object> bidding_project_subscribeMap= JSON.parseObject(text,Map.class);
bidding_project_subscribeMap.put("id", bidding_project_subscribeMap.get("id"));
//副表数据
//子表数据
realList.add(bidding_project_subscribeMap);
}
//数据转换
realList = generaterSwapUtil.swapDataList(realList, BiddingProjectSubscribeConstant.getFormData(), BiddingProjectSubscribeConstant.getColumnData(), biddingProjectSubscribePagination.getModuleId(), false);
// // 创建ObjectMapper实例
// ObjectMapper objectMapper = new ObjectMapper();
//
// // 配置ObjectMapper将驼峰转换为下划线
// objectMapper.setPropertyNamingStrategy(Pro pertyNamingStrategies.SNAKE_CASE);
//
// // 禁用默认的换行输出
// objectMapper.configure(SerializationFeature.INDENT_OUTPUT, false);
// for (Map<String, Object> map : realList) {
// String json = objectMapper.writeValueAsString(map);
// System.out.println(json);
// }
//返回对象
PageListVO vo = new PageListVO();
vo.setList(realList);
PaginationVO page = JsonUtil.getJsonToBean(biddingProjectSubscribePagination, PaginationVO.class);
vo.setPagination(page);
return ActionResult.success(vo);
}
/**
* 创建
*
* @param bidding_project_subscribeForm
* @return
*/
@PostMapping()
@Transactional
@Operation(summary = "创建")
public ActionResult create(@RequestBody @Valid BiddingProjectSubscribeForm bidding_project_subscribeForm) throws DataException {
String b = biddingProjectSubscribeService.checkForm(bidding_project_subscribeForm, 0);
if (StringUtil.isNotEmpty(b)) {
return ActionResult.fail(b);
}
String oldBidOpeningTime = bidding_project_subscribeForm.getBidOpeningTime();
String mainId = RandomUtil.uuId();
UserInfo userInfo = userProvider.get();
UserEntity userEntity = generaterSwapUtil.getUser(userInfo.getUserId());
bidding_project_subscribeForm = JsonUtil.getJsonToBean(
SwapUtil.swapDatetime(BiddingProjectSubscribeConstant.getFormData(), bidding_project_subscribeForm), BiddingProjectSubscribeForm.class);
BiddingProjectSubscribeEntity entity = JsonUtil.getJsonToBean(bidding_project_subscribeForm, BiddingProjectSubscribeEntity.class);
entity.setPlanSubmissionTime(new Date());
if (bidding_project_subscribeForm.getManagementStyle().equals("2")) {
entity.setResultReportingTime(new Date());
entity.setIsApproval(true);
}
entity.setFlowtaskid(mainId);
if (StrUtil.isNotBlank(oldBidOpeningTime)) {
entity.setBidOpeningTime(new Date(Long.parseLong(oldBidOpeningTime)));
}
entity.setCreateTime(LocalDateTime.now());
entity.setUpdateTime(LocalDateTime.now());
checkProjectAmount(entity);
biddingProjectSubscribeService.saveOrUpdate(entity);
if (StringUtil.equals(bidding_project_subscribeForm.getSaveType(), "1")) {
//修改流程 查询领导 新增子单数据 记录流程
biddingProjectSubscribeService.updateFlow(userEntity, entity, true);
} else {
biddingProjectSubscribeService.temporaryStorage(userEntity, entity);
}
return ActionResult.success("创建成功");
}
private void checkProjectAmount(BiddingProjectSubscribeEntity entity) {
if (null==entity.getWinningBidderInfo())return;
if (StrUtil.isBlank(entity.getWinningBidderType()))return;
switch (entity.getWinningBidderType()){
case "1":
entity.setProjectAmount(entity.getWinningBidderInfo().stream()
.map(BiddingProjectDto.WinningBidderParam::getAmount)
.mapToDouble(Double::parseDouble)
.sum());
break;
case "2":
Double top = entity.getWinningBidderInfo().stream()
.map(BiddingProjectDto.WinningBidderParam::getAmount)
.mapToDouble(Double::parseDouble)
.sum();
for (BiddingProjectDto.WinningBidderParam winningBidderParam : entity.getWinningBidderInfo()) {
if (CollectionUtil.isEmpty(winningBidderParam.getChildren()))continue;
top+=winningBidderParam.getChildren().stream()
.map(BiddingProjectDto.BaseWinningBidderParam::getAmount)
.mapToDouble(Double::parseDouble)
.sum();
}
entity.setProjectAmount(top);
break;
default:
return;
}
}
@Operation(summary = "审核")
@PostMapping("/auditing")
public ActionResult auditing(@RequestBody BiddingProjectDto.AuditingParam param) throws IOException {
biddingProjectSubscribeService.auditing(param);
return ActionResult.success("审核成功");
}
@Operation(summary = "归档")
@PostMapping("/archivist")
public ActionResult archivist(@RequestBody BiddingProjectDto.ArchivistParam param) throws IOException {
biddingProjectSubscribeService.archivist(param);
return ActionResult.success("归档完成");
}
@Operation(summary = "获取当前人层级层级")
@GetMapping("/obtainHierarchy")
public ActionResult obtainHierarchy() throws IOException {
String hierarchy = biddingProjectSubscribeService.obtainHierarchy();
return ActionResult.success(hierarchy);
}
@Operation(summary = "获取招标填报人员层级")
@GetMapping("/obtainHierarchyOfCreate")
public ActionResult obtainHierarchyOfCreate(@RequestParam String id) throws IOException {
String hierarchy = biddingProjectSubscribeService.obtainHierarchyOfCreate(id);
return ActionResult.success(hierarchy);
}
@Operation(summary = "终止项目")
@PostMapping("/termination")
public ActionResult termination(@RequestParam String id) throws IOException {
biddingProjectSubscribeService.termination(id);
return ActionResult.success("操作成功");
}
@Operation(summary = "获取全部文件")
@GetMapping("/getAllFileInfo")
public ActionResult getAllFileInfo(@RequestParam String id) throws IOException {
return ActionResult.success(biddingProjectSubscribeService.getAllFileInfo(id));
}
/**
* 编辑
*
* @param id
* @param bidding_project_subscribeForm
* @return
*/
@PutMapping("/{id}")
@Transactional
@Operation(summary = "更新")
public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid BiddingProjectSubscribeForm bidding_project_subscribeForm) throws DataException {
String b = biddingProjectSubscribeService.checkForm(bidding_project_subscribeForm, 1);
if (StringUtil.isNotEmpty(b)) {
return ActionResult.fail(b);
}
String oldBidOpeningTime = bidding_project_subscribeForm.getBidOpeningTime();
UserInfo userInfo = userProvider.get();
BiddingProjectSubscribeEntity entity = biddingProjectSubscribeService.getInfo(id);
if (entity != null) {
bidding_project_subscribeForm = JsonUtil.getJsonToBean(
generaterSwapUtil.swapDatetime(BiddingProjectSubscribeConstant.getFormData(), bidding_project_subscribeForm), BiddingProjectSubscribeForm.class);
BiddingProjectSubscribeEntity subentity = JsonUtil.getJsonToBean(bidding_project_subscribeForm, BiddingProjectSubscribeEntity.class);
if (StrUtil.isNotBlank(oldBidOpeningTime)) {
entity.setBidOpeningTime(new Date(Long.parseLong(oldBidOpeningTime)));
}
subentity.setUpdateTime(LocalDateTime.now());
subentity.setCreateTime(entity.getCreateTime());
checkProjectAmount(subentity);
// subentity.setWinningBidderInfo(entity.getWinningBidderInfo());
// subentity.setWinningBidderType(entity.getWinningBidderType());
boolean b1 = biddingProjectSubscribeService.updateById(subentity);
if (!b1) {
return ActionResult.fail("当前表单原数据已被调整,请重新进入该页面编辑并提交数据");
}
biddingProjectSubscribeService.updateFlowByUser(entity);
return ActionResult.success("更新成功");
} else {
return ActionResult.fail("更新失败,数据不存在");
}
}
/**
* 删除
*
* @param id
* @return
*/
@Operation(summary = "删除")
@DeleteMapping("/{id}")
@Transactional
public ActionResult delete(@PathVariable("id") String id) {
BiddingProjectSubscribeEntity entity = biddingProjectSubscribeService.getInfo(id);
if (entity != null) {
//主表数据删除
biddingProjectSubscribeService.delete(entity);
}
return ActionResult.success("删除成功");
}
/**
* 获取详情(编辑页)
* 编辑页面使用-不转换数据
*
* @param id
* @return
*/
@Operation(summary = "信息")
@GetMapping("/{id}")
public ActionResult info(@PathVariable("id") String id) {
BiddingProjectSubscribeEntity entity = biddingProjectSubscribeService.getInfo(id);
if (entity == null) {
return ActionResult.fail("表单数据不存在!");
}
Map<String, Object> bidding_project_subscribeMap = JsonUtil.entityToMap(entity);
bidding_project_subscribeMap.put("id", bidding_project_subscribeMap.get("id"));
//副表数据
//子表数据
bidding_project_subscribeMap = generaterSwapUtil.swapDataForm(bidding_project_subscribeMap, BiddingProjectSubscribeConstant.getFormData(), BiddingProjectSubscribeConstant.TABLEFIELDKEY, BiddingProjectSubscribeConstant.TABLERENAMES);
return ActionResult.success(bidding_project_subscribeMap);
}
/**
* @param type 1-备案表 2-审批 3-结果
* @return
*/
@Operation(summary = "下载文件")
@GetMapping("/download/{id}/{type}")
public ActionResult download(@PathVariable("id") String id, @PathVariable("type") String type) {
DownloadVO vo = DownloadVO.builder().build();
MultipartFile multipartFile = biddingProjectSubscribeService.download(id, type);
String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY);
FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, multipartFile.getOriginalFilename());
vo.setName(fileInfo.getFilename());
vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + multipartFile.getOriginalFilename());
return ActionResult.success(vo);
}
@Operation(summary = "下载文件")
@PostMapping("/download/{id}/{type}")
public ActionResult download2(@PathVariable("id") String id, @PathVariable("type") String type,@RequestBody BiddingProjectSubscribeForm form) {
DownloadVO vo = DownloadVO.builder().build();
BiddingProjectSubscribeEntity entity = JsonUtil.getJsonToBean(form, BiddingProjectSubscribeEntity.class);
MultipartFile multipartFile = biddingProjectSubscribeService.download(id, type,entity);
String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY);
FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, multipartFile.getOriginalFilename());
vo.setName(fileInfo.getFilename());
vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + multipartFile.getOriginalFilename());
return ActionResult.success(vo);
}
}