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 list = biddingProjectSubscribeService.getList(biddingProjectSubscribePagination); List> realList = new ArrayList<>(); // // 方式一:使用fastjson // SerializeConfig config = new SerializeConfig(); // config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase; for (BiddingProjectSubscribeEntity entity : list) { Map bidding_project_subscribeMap = JsonUtil.entityToMap(entity); // Map 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 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 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); } }