diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/HttpCodeEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/HttpCodeEnum.java index 5ec8f10b..e87832a5 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/HttpCodeEnum.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/HttpCodeEnum.java @@ -12,6 +12,8 @@ public enum HttpCodeEnum { SUCCESS(200, "操作成功"), //失败 FAIL(400, "操作失败,请联系管理员"), + // SQL查询数据为空 + QUERY_DATA_NULL(404, "查询数据为空"), // 登录 NEED_LOGIN(401, "需要登录后操作"), TO_PARAM_NULL(1007, "参数为空"), diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesDetails.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesDetails.java index 0c924f8c..3e4a0213 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesDetails.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesDetails.java @@ -4,6 +4,8 @@ import com.bonus.common.core.web.domain.BaseEntity; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import java.util.Date; @@ -12,7 +14,9 @@ import java.util.Date; * @Author ma_sh * @create 2024/12/26 13:49 */ +@EqualsAndHashCode(callSuper = true) @Data +@Accessors(chain = true) public class ArchivesDetails extends BaseEntity { @ApiModelProperty(value = "id") diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesInfo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesInfo.java index 7be4e697..e43545ea 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesInfo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesInfo.java @@ -3,6 +3,7 @@ package com.bonus.material.archives.domain; import com.bonus.common.core.web.domain.BaseEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.experimental.Accessors; /** * 档案分类表 @@ -10,6 +11,7 @@ import lombok.Data; * @create 2024/12/26 9:29 */ @Data +@Accessors(chain = true) public class ArchivesInfo extends BaseEntity { @ApiModelProperty(value = "infoId") @@ -18,6 +20,9 @@ public class ArchivesInfo extends BaseEntity { @ApiModelProperty(value = "档案名称") private String archivesName; + @ApiModelProperty(value = "档案所属唯一键值") + private String archivesValue; + @ApiModelProperty(value = "父级id") private Long parentId; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesVo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesVo.java index ce4234d0..73ac2d61 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesVo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/domain/ArchivesVo.java @@ -19,4 +19,7 @@ public class ArchivesVo { private List detailsIdList; private String ids; + + // 是否检查名称是否重复 + private boolean enableCheckNameExist = true; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/mapper/ArchivesMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/mapper/ArchivesMapper.java index eb3f7e36..b6de73cf 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/mapper/ArchivesMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/mapper/ArchivesMapper.java @@ -22,12 +22,29 @@ public interface ArchivesMapper { List getTypeList(ArchivesInfo archiveInfo); /** - * 根据名称查询电子档案分类 + * 根据(名称及父级id)查询电子档案分类 * @param archiveInfo * @return */ ArchivesInfo selectByName(ArchivesInfo archiveInfo); + /** + * 根据(名称及level级别)查询电子档案分类 + * @param name 节点名称 + * @param level 节点层级 + * @return list列表 + */ + ArchivesInfo selectInfoListByNameAndLevel(@Param("name") String name, @Param("level") Integer level); + + + /** + * 根据档案details表文件夹类型的节点id(档案文件名 + 档案level + 档案所属info的value) + * @param name 档案文件名 + * @param value 档案所属info表的value(同类型同层级唯一键值) + * @return 档案details表主键 + */ + Integer selectDetailsNodeIdByDocNameAndInfoValue(@Param("name") String name, @Param("level") Integer level, @Param("value") Integer value); + /** * 新增电子档案分类 * @param archiveInfo diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/service/ArchivesService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/service/ArchivesService.java index bb6aa936..6b4944e2 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/service/ArchivesService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/service/ArchivesService.java @@ -5,6 +5,8 @@ import com.bonus.material.archives.domain.ArchivesDetails; import com.bonus.material.archives.domain.ArchivesInfo; import com.bonus.material.archives.domain.ArchivesVo; import com.bonus.material.archives.domain.ElcSignatureInfo; +import com.bonus.material.basic.domain.BmProject; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -17,6 +19,27 @@ import java.util.List; */ public interface ArchivesService { + /** + * 上传档案工程信息类型的附件 + * @param fromProjectFileType 上传文件所属工程文件类型(领料单、退料单、业务联系单) + * @param fileName 文件名称 + * @param filePath 文件地址 + * @return 结果 + */ + AjaxResult uploadArchivesProjectPdf(String fromProjectFileType, String fileName, String filePath, Integer projectId); + + /** + * 获取文件大小(MB格式返回) + * @param multipartFile 文件 + * @return 示例(返回1.2) + */ + String getFileSizeInMb(MultipartFile multipartFile); + + /** + * 工程新增事件--处理档案库对应数据 + */ + AjaxResult projectAddEventCope(BmProject projectInfo); + /** * 获取电子档案分类树 * @param archiveInfo diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/service/impl/ArchivesServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/service/impl/ArchivesServiceImpl.java index f9b480bc..ca09a0bc 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/service/impl/ArchivesServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/archives/service/impl/ArchivesServiceImpl.java @@ -1,6 +1,7 @@ package com.bonus.material.archives.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; import com.bonus.common.biz.config.DateTimeHelper; import com.bonus.common.biz.config.FileCompressor; import com.bonus.common.biz.domain.FileInfo; @@ -19,11 +20,13 @@ import com.bonus.material.archives.domain.ArchivesVo; import com.bonus.material.archives.domain.ElcSignatureInfo; import com.bonus.material.archives.mapper.ArchivesMapper; import com.bonus.material.archives.service.ArchivesService; +import com.bonus.material.basic.domain.BmProject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.tomcat.util.http.fileupload.IOUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; @@ -35,8 +38,11 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.text.DecimalFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -50,9 +56,95 @@ import java.util.zip.ZipOutputStream; @Slf4j public class ArchivesServiceImpl implements ArchivesService { + // 工程档案等级及档案类型名称 + public static final Integer PROJECT_TYPE_ARCHIVES_LEVEL = 1; + public static final Long PROJECT_YEAR_ARCHIVES_LEVEL = 2L; + public static final String PROJECT_TYPE_ARCHIVES_NAME = "工程项目材料"; + @Resource private ArchivesMapper archivesMapper; + /** + * 上传档案工程信息类型的附件 + * + * @param fromProjectFileType 上传文件所属工程文件类型(领料单、退料单、业务联系单) + * @param fileName 文件名称 + * @param filePath 文件地址 + * @param projectId 工程id(表内唯一键值key) + * @return 结果 + */ + @Override + public AjaxResult uploadArchivesProjectPdf(String fromProjectFileType, String fileName, String filePath, Integer projectId) { + Integer leaseFolderNodeId = archivesMapper.selectDetailsNodeIdByDocNameAndInfoValue(fromProjectFileType, PROJECT_YEAR_ARCHIVES_LEVEL.intValue(), projectId); + if (null == leaseFolderNodeId || 0 == leaseFolderNodeId) { + return AjaxResult.error("未查询到工程所属档案文件夹信息"); + } + ArchivesDetails archivesDetails = new ArchivesDetails(); + archivesDetails.setInfoId(Long.valueOf(projectId)); + archivesDetails.setParentId(Long.valueOf(leaseFolderNodeId)); + archivesDetails.setLevel(Long.toString(PROJECT_YEAR_ARCHIVES_LEVEL)); + archivesDetails.setDocName(fileName); + archivesDetails.setDocType("pdf"); + archivesDetails.setDocUrl(filePath.contains("http") ? filePath : "https://xiyunwangcn.oss-cn-hangzhou.aliyuncs.com/" + filePath); + archivesDetails.setDelFlag("0"); + archivesDetails.setCreateTime(DateUtils.getNowDate()); + archivesDetails.setCreateBy(SecurityUtils.getUsername()); + int insertArchivesDetailsResult = archivesMapper.insertDetails(archivesDetails); + return 0 < insertArchivesDetailsResult ? AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg()) : AjaxResult.error(HttpCodeEnum.FAIL.getMsg()); + } + + + /** + * 工程新增事件--处理档案库对应数据 + * + * @param projectInfo 新建的工程信息 + */ + @Override + public AjaxResult projectAddEventCope(BmProject projectInfo) { + if (Objects.isNull(projectInfo) || Objects.isNull(projectInfo.getProId()) || Objects.isNull(projectInfo.getProName())) { + log.error("工程新增事件--处理档案库对应数据-工程信息不能为空"); + return AjaxResult.error(HttpCodeEnum.TO_PARAM_NULL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg()); + } + // 查询工程类型的档案信息 + ArchivesInfo projectTypeNodeInfo = archivesMapper.selectInfoListByNameAndLevel(PROJECT_TYPE_ARCHIVES_NAME,PROJECT_TYPE_ARCHIVES_LEVEL); + if (Objects.isNull(projectTypeNodeInfo) || Objects.isNull(projectTypeNodeInfo.getInfoId())) { + log.error("工程新增事件--处理档案库对应数据-工程档案类型信息不存在"); + return AjaxResult.error(HttpCodeEnum.QUERY_DATA_NULL.getCode(), "工程档案类型信息不存在"); + } + // 获取当前年份 + String currentYear = DateUtils.getCurrentYear(); + ArchivesInfo currentYearArchivesNodeInfo = archivesMapper.selectByName(new ArchivesInfo().setArchivesName(currentYear).setParentId(projectTypeNodeInfo.getInfoId())); + // 判断当前年份的工程档案节点是否存在 + if (Objects.isNull(currentYearArchivesNodeInfo) || Objects.isNull(currentYearArchivesNodeInfo.getInfoId())) { + log.error("工程新增事件--处理档案库对应数据-工程档案当前年份节点不存在"); + return AjaxResult.error(HttpCodeEnum.QUERY_DATA_NULL.getCode(), "工程档案当前年份节点不存在"); + } + + ArchivesInfo currentProjectNodeInfo = new ArchivesInfo().setArchivesName(projectInfo.getProName()).setParentId(currentYearArchivesNodeInfo.getInfoId()).setLevel(Long.toString(PROJECT_YEAR_ARCHIVES_LEVEL)); + currentProjectNodeInfo.setArchivesValue(String.valueOf(projectInfo.getProId())); + currentProjectNodeInfo.setCreateTime(DateUtils.getNowDate()); + currentProjectNodeInfo.setCreateBy(SecurityUtils.getUsername()); + int insertCurrentProjectNodeResult = archivesMapper.insertInfo(currentProjectNodeInfo); + //AjaxResult insertNodeInfoResult = this.add(currentProjectNodeInfo); + if (insertCurrentProjectNodeResult > 0) { + // 判断新增的工程节点信息是否完善 + if (ObjectUtil.isEmpty(currentProjectNodeInfo) || ObjectUtil.isEmpty(currentProjectNodeInfo.getInfoId())) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); + } + // 增加详情节点 + ArchivesDetails details1 = new ArchivesDetails().setInfoId(currentProjectNodeInfo.getInfoId()).setParentId(0L).setLevel("1").setDocName("领料单").setDocType("文件夹"); + ArchivesDetails details2 = new ArchivesDetails().setInfoId(currentProjectNodeInfo.getInfoId()).setParentId(0L).setLevel("1").setDocName("退料单").setDocType("文件夹"); + ArchivesDetails details3 = new ArchivesDetails().setInfoId(currentProjectNodeInfo.getInfoId()).setParentId(0L).setLevel("1").setDocName("业务联系单").setDocType("文件夹"); + List archivesNodeDetailsList = new ArrayList<>(Arrays.asList(details1, details2, details3)); + ArchivesVo archivesVo = new ArchivesVo(); + archivesVo.setArchivesDetailsList(archivesNodeDetailsList); + archivesVo.setEnableCheckNameExist(false); + return this.addDetails(archivesVo); + } else { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); + } + } + /** * 获取电子档案分类树 * @param archiveInfo @@ -61,7 +153,7 @@ public class ArchivesServiceImpl implements ArchivesService { @Override public AjaxResult getTypeList(ArchivesInfo archiveInfo) { List groupList = new ArrayList<>(); - List list = new ArrayList<>(); + List list; try { list = archivesMapper.getTypeList(archiveInfo); if (CollectionUtils.isNotEmpty(list)) { @@ -94,7 +186,7 @@ public class ArchivesServiceImpl implements ArchivesService { archiveInfo.setParentId(archiveInfo.getInfoId() != null ? archiveInfo.getInfoId() : 0L); archiveInfo.setLevel((StringUtils.isNotBlank(archiveInfo.getLevel())) ? String.valueOf(Integer.parseInt(archiveInfo.getLevel()) + 1) : "1"); int result = archivesMapper.insertInfo(archiveInfo); - if (result > 0) { + if (0 < result) { return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg(), result); } return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); @@ -158,6 +250,27 @@ public class ArchivesServiceImpl implements ArchivesService { return archivesMapper.selectDetailsList(archivesDetails); } + /** + * 获取文件大小 + * @param multipartFile 文件 + * @return MB格式(例如: 18.23) + */ + @Override + public String getFileSizeInMb(MultipartFile multipartFile) { + if (null == multipartFile || multipartFile.isEmpty()) { + return "0"; + } + try { + long fileSizeInBytes = multipartFile.getSize(); + double fileSizeInMb = (double) fileSizeInBytes / (1024 * 1024); + DecimalFormat df = new DecimalFormat("#.00"); + return df.format(fileSizeInMb); + } catch (Exception e) { + return "0"; + } + } + + /** * 新增电子档案右侧类型 * @param archivesVo @@ -184,10 +297,12 @@ public class ArchivesServiceImpl implements ArchivesService { } // 如果有多条数据 if (CollectionUtils.isNotEmpty(archivesVo.getArchivesDetailsList())) { - // 检查是否有重复名称 - for (ArchivesDetails archivesDetails : archivesVo.getArchivesDetailsList()) { - if (isNameDuplicate(archivesDetails)) { - return AjaxResult.error(HttpCodeEnum.NAME_DUPLICATE.getCode(), HttpCodeEnum.NAME_DUPLICATE.getMsg()); + if (archivesVo.isEnableCheckNameExist()) { + // 检查是否有重复名称 + for (ArchivesDetails archivesDetails : archivesVo.getArchivesDetailsList()) { + if (isNameDuplicate(archivesDetails)) { + return AjaxResult.error(HttpCodeEnum.NAME_DUPLICATE.getCode(), HttpCodeEnum.NAME_DUPLICATE.getMsg()); + } } } // 插入所有不重复的档案详情 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/controller/BackApplyInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/controller/BackApplyInfoController.java index 793994ce..9dccad9a 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/controller/BackApplyInfoController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/controller/BackApplyInfoController.java @@ -2,6 +2,8 @@ package com.bonus.material.back.controller; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import javax.validation.constraints.NotNull; @@ -10,6 +12,7 @@ import cn.hutool.core.convert.Convert; import com.bonus.common.biz.config.ListPagingUtil; import com.bonus.common.core.utils.ServletUtils; import com.bonus.common.log.enums.OperaType; +import com.bonus.material.archives.service.ArchivesService; import com.bonus.material.back.domain.BackApplyDetails; import com.bonus.material.back.domain.MaCode; import com.bonus.material.back.domain.vo.BackAppRequestVo; @@ -17,6 +20,7 @@ import com.bonus.material.back.domain.vo.BackApplyInfoVo; import com.bonus.material.back.domain.vo.BackApplyRequestVo; import com.bonus.material.back.domain.vo.BackApplyVo; import com.bonus.material.common.annotation.PreventRepeatSubmit; +import com.bonus.system.api.RemoteFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +32,7 @@ import com.bonus.material.back.service.IBackApplyInfoService; import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.utils.poi.ExcelUtil; +import org.springframework.web.multipart.MultipartFile; /** * 退料任务Controller @@ -39,9 +44,16 @@ import com.bonus.common.core.utils.poi.ExcelUtil; @RestController @RequestMapping("/back_apply_info") public class BackApplyInfoController extends BaseController { + @Autowired private IBackApplyInfoService backApplyInfoService; + @Resource + private RemoteFileService sysFileService; + + @Resource + private ArchivesService archivesService; + /** * 查询退料任务列表 */ @@ -56,6 +68,30 @@ public class BackApplyInfoController extends BaseController { return AjaxResult.success(ListPagingUtil.paging(pageIndex, pageSize, list)); } + /** + * 上传退料单PDF文件 + */ + @PostMapping("/uploadPdf") + @SysLog(title = "上传退料单PDF", businessType = OperaType.INSERT, module = "仓储管理->上传退料单PDF") + public AjaxResult uploadPdf(@RequestParam("file") MultipartFile file, @RequestParam("id") Long id) { + try { + AjaxResult result = sysFileService.upload(file); + if (!result.isSuccess()) { + return AjaxResult.error("SysFile文件服务上传失败:" + result.get("msg")); + } + + @SuppressWarnings("unchecked") + Map jsonObject = (Map) result.get("data"); + String fileName = file.getOriginalFilename(); + String filePath = jsonObject.get("url").toString(); + + return archivesService.uploadArchivesProjectPdf("退料单", fileName, filePath, Math.toIntExact(id)); + } catch (Exception e) { + logger.error("上传退料单PDF文件失败", e); + return AjaxResult.error("领料单档案保存失败:" + e.getMessage()); + } + } + /** * 查询修试查询-退料查询列表 * @param dto diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmProjectServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmProjectServiceImpl.java index 5d0e5a1f..dd248440 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmProjectServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmProjectServiceImpl.java @@ -14,6 +14,7 @@ import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.encryption.Sm4Utils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.archives.service.ArchivesService; import com.bonus.material.basic.domain.BmAgreementInfo; import com.bonus.material.basic.mapper.BmAgreementInfoMapper; import com.bonus.material.purchase.config.RemoteConfig; @@ -48,12 +49,16 @@ public class BmProjectServiceImpl implements IBmProjectService @Resource private RemoteDeptService remoteDeptService; + @Resource + private ArchivesService archivesService; + @Resource private RemoteConfig remoteConfig; @Resource private BmAgreementInfoMapper bmAgreementInfoMapper; + /** * 查询标段工程管理 * @@ -113,6 +118,7 @@ public class BmProjectServiceImpl implements IBmProjectService } } } catch (NumberFormatException e) { + project.setTelphone(""); log.error("远程调用查询失败:", e.getMessage()); } } @@ -128,9 +134,7 @@ public class BmProjectServiceImpl implements IBmProjectService { List list = bmProjectMapper.selectBmProjectList(bmProject); if (CollectionUtils.isNotEmpty(list)) { - list.forEach(item -> { - extractedImpUnit(item); - }); + list.forEach(this::extractedImpUnit); extracted(list); } return list; @@ -199,6 +203,15 @@ public class BmProjectServiceImpl implements IBmProjectService bmProject.setTelphone(telPhone); int result = bmProjectMapper.insertBmProject(bmProject); if (result > 0) { + // 工程标段添加成功 + try { + AjaxResult projectAddEventCopeResult = archivesService.projectAddEventCope(bmProject); + if (projectAddEventCopeResult.isSuccess()) { + log.info("工程标段添加成功,且档案事件处理成功"); + } + } catch (Exception e) { + log.error("工程标段添加成功,但档案事件处理失败,触发异常:" + e.getMessage()); + } return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg(), result); } return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseApplyInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseApplyInfoController.java index 0397de97..91654c8c 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseApplyInfoController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseApplyInfoController.java @@ -1,6 +1,7 @@ package com.bonus.material.lease.controller; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; import com.bonus.common.biz.annotation.StoreLog; import com.bonus.common.biz.config.ListPagingUtil; import com.bonus.common.biz.domain.lease.LeaseOutDetails; @@ -9,7 +10,9 @@ import com.bonus.common.core.utils.poi.ExcelUtil; import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.log.annotation.SysLog; +import com.bonus.common.log.enums.BusinessType; import com.bonus.common.log.enums.OperaType; +import com.bonus.material.archives.service.ArchivesService; import com.bonus.material.basic.domain.BmQrcodeInfo; import com.bonus.material.common.annotation.PreventRepeatSubmit; import com.bonus.common.biz.domain.lease.LeaseApplyInfo; @@ -17,13 +20,19 @@ import com.bonus.material.lease.domain.LeaseApplyDetails; import com.bonus.material.lease.domain.vo.LeaseApplyRequestVo; import com.bonus.common.biz.domain.lease.LeaseOutRequestVo; import com.bonus.material.lease.service.ILeaseApplyInfoService; +import com.bonus.system.api.RemoteFileService; +import com.bonus.system.api.domain.SysFile; +import com.google.gson.JsonObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import java.util.List; +import java.util.Map; /** * 领料任务Controller @@ -39,6 +48,12 @@ public class LeaseApplyInfoController extends BaseController { @Resource private ILeaseApplyInfoService leaseApplyInfoService; + @Resource + private RemoteFileService sysFileService; + + @Resource + private ArchivesService archivesService; + /** * 查询领料任务列表 */ @@ -52,6 +67,29 @@ public class LeaseApplyInfoController extends BaseController { return AjaxResult.success(ListPagingUtil.paging(pageIndex, pageSize, list)); } + /** + * 上传领料单PDF文件 + */ + @PostMapping("/uploadPdf") + @SysLog(title = "上传领料单PDF", businessType = OperaType.INSERT, module = "仓储管理->上传领料单PDF") + public AjaxResult uploadPdf(@RequestParam("file") MultipartFile file, @RequestParam("id") Long id) { + try { + AjaxResult result = sysFileService.upload(file); + if (!result.isSuccess()) { + return AjaxResult.error("SysFile文件服务上传失败:" + result.get("msg")); + } + + @SuppressWarnings("unchecked") + Map jsonObject = (Map) result.get("data"); + String fileName = file.getOriginalFilename(); + String filePath = jsonObject.get("url").toString(); + return archivesService.uploadArchivesProjectPdf("领料单", fileName, filePath, Math.toIntExact(id)); + } catch (Exception e) { + logger.error("上传领料单PDF文件失败", e); + return AjaxResult.error("上传领料单PDF文件失败:" + e.getMessage()); + } + } + /** * 导出领料任务列表 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseTaskController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseTaskController.java index cf6f649f..bd4f3210 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseTaskController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseTaskController.java @@ -11,6 +11,7 @@ import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.log.annotation.SysLog; import com.bonus.common.log.enums.OperaType; +import com.bonus.material.archives.service.ArchivesService; import com.bonus.material.common.annotation.PreventRepeatSubmit; import com.bonus.material.lease.domain.LeaseApplyDetails; import com.bonus.material.lease.domain.LeasePublishDetails; @@ -53,6 +54,9 @@ public class LeaseTaskController extends BaseController { @Resource private RemoteFileService sysFileService; + @Resource + private ArchivesService archivesService; + /** * 新增领用任务 */ @@ -92,6 +96,30 @@ public class LeaseTaskController extends BaseController { } } + /** + * 上传业务联系单PDF文件 + */ + @PostMapping("/uploadPdf") + @SysLog(title = "上传业务联系单PDF", businessType = OperaType.INSERT, module = "仓储管理->上传业务联系单PDF") + public AjaxResult uploadPdf(@RequestParam("file") MultipartFile file, @RequestParam("id") Long id) { + try { + AjaxResult result = sysFileService.upload(file); + if (!result.isSuccess()) { + return AjaxResult.error("SysFile文件服务上传失败:" + result.get("msg")); + } + + @SuppressWarnings("unchecked") + Map jsonObject = (Map) result.get("data"); + String fileName = file.getOriginalFilename(); + String filePath = jsonObject.get("url").toString(); + + return archivesService.uploadArchivesProjectPdf("业务联系单", fileName, filePath, Math.toIntExact(id)); + } catch (Exception e) { + logger.error("上传业务联系单PDF文件失败", e); + return AjaxResult.error("上传业务联系单PDF文件失败:" + e.getMessage()); + } + } + /** * 导出领料记录查询 * @param response diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/ILeaseApplyInfoService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/ILeaseApplyInfoService.java index ea78b725..f9c71504 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/ILeaseApplyInfoService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/ILeaseApplyInfoService.java @@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletResponse; * @date 2024-10-16 */ public interface ILeaseApplyInfoService { + /** * 查询领料任务 * diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/Archives/ArchivesMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/Archives/ArchivesMapper.xml index bf786dbe..fb3b41a6 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/Archives/ArchivesMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/Archives/ArchivesMapper.xml @@ -164,10 +164,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where user_id = #{userId} - + insert into archives_record_info archives_name, + archives_value, parent_id, level, create_by, @@ -176,6 +177,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{archivesName}, + #{archivesValue}, #{parentId}, #{level}, #{createBy}, @@ -261,4 +263,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" set del_flag = '1' where details_id = #{detailsId} + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmProjectMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmProjectMapper.xml index 9d239b47..3e5eb462 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmProjectMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmProjectMapper.xml @@ -106,7 +106,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + insert into bm_project pro_id,