From 61aeb35cdbfcaacdbee02248730d8ee23cfbd070 Mon Sep 17 00:00:00 2001 From: mashuai Date: Tue, 19 Aug 2025 17:42:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E8=B4=AD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SelectServiceImpl.java | 2 - .../ma/controller/SupplierInfoController.java | 3 +- .../controller/PurchaseBindController.java | 34 +- .../mapper/PurchaseCheckDetailsMapper.java | 15 + .../service/IPurchaseBindService.java | 17 + .../service/impl/PurchaseBindServiceImpl.java | 343 +++++++++++++++++- .../impl/PurchaseCheckInfoServiceImpl.java | 2 +- .../purchase/PurchaseCheckDetailsMapper.xml | 37 ++ 8 files changed, 446 insertions(+), 7 deletions(-) diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java index 3e1e737c..4cf61075 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java @@ -1,10 +1,8 @@ package com.bonus.material.common.service.impl; -import cn.hutool.core.bean.BeanUtil; import com.alibaba.nacos.common.utils.StringUtils; import com.bonus.common.biz.config.DateTimeHelper; import com.bonus.common.biz.domain.*; -import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.back.domain.BackApplyInfo; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/controller/SupplierInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/controller/SupplierInfoController.java index 78927ab3..63ad7e39 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/controller/SupplierInfoController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/controller/SupplierInfoController.java @@ -7,7 +7,6 @@ import com.bonus.common.log.enums.OperaType; import com.bonus.material.common.annotation.PreventRepeatSubmit; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -53,7 +52,7 @@ public class SupplierInfoController extends BaseController { * 查询物资厂家--下拉框--不分页 */ @ApiOperation(value = "查询物资厂家下拉框--不分页") - @RequiresPermissions("ma:info:list") + //@RequiresPermissions("ma:info:list") @GetMapping("/select") public TableDataInfo select(SupplierInfo supplierInfo) { List list = supplierInfoService.selectSupplierInfoList(supplierInfo); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/controller/PurchaseBindController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/controller/PurchaseBindController.java index 83915036..28497fc1 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/controller/PurchaseBindController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/controller/PurchaseBindController.java @@ -1,14 +1,18 @@ package com.bonus.material.purchase.controller; +import cn.hutool.core.convert.Convert; +import com.bonus.common.biz.config.ListPagingUtil; +import com.bonus.common.core.utils.ServletUtils; 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.core.web.page.TableDataInfo; import com.bonus.common.log.annotation.SysLog; import com.bonus.common.log.enums.OperaType; import com.bonus.material.common.annotation.PreventRepeatSubmit; import com.bonus.common.security.annotation.RequiresPermissions; import com.bonus.common.biz.domain.purchase.PurchaseDto; +import com.bonus.material.purchase.domain.PurchaseCheckInfo; +import com.bonus.material.purchase.domain.dto.PurchaseQueryDto; import com.bonus.material.purchase.service.IPurchaseBindService; import com.bonus.material.purchase.domain.vo.PurchaseVo; import io.swagger.annotations.Api; @@ -20,6 +24,9 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import java.util.List; +import static com.bonus.common.core.web.page.TableSupport.PAGE_NUM; +import static com.bonus.common.core.web.page.TableSupport.PAGE_SIZE; + /** * 新购验收绑定接口 * @Author ma_sh @@ -33,6 +40,31 @@ public class PurchaseBindController extends BaseController { @Resource private IPurchaseBindService purchaseBindService; + /** + * 查询新购验收绑定任务列表 + * @param purchaseQueryDto + * @return + */ + @ApiOperation("查询新购验收绑定任务列表") + @GetMapping("/list") + public AjaxResult list(PurchaseQueryDto purchaseQueryDto) { + final List list = purchaseBindService.selectPurchaseCheckInfoList(purchaseQueryDto); + final Integer pageIndex = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1); + final Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10); + return AjaxResult.success(ListPagingUtil.paging(pageIndex, pageSize, list)); + } + + /** + * 获取新购验收任务详细信息 + * @param purchaseQueryDto + * @return + */ + @ApiOperation("获取新购验收任务详细信息") + @GetMapping(value = "/getInfo") + public AjaxResult getInfo(@NotNull(message = "请求对象不能为空") PurchaseQueryDto purchaseQueryDto) { + return success(purchaseBindService.getSelectPurchaseCheckInfoById(purchaseQueryDto)); + } + /** * 绑定 * @param dto diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseCheckDetailsMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseCheckDetailsMapper.java index 194956ee..d7ac14e9 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseCheckDetailsMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseCheckDetailsMapper.java @@ -129,4 +129,19 @@ public interface PurchaseCheckDetailsMapper { * @return */ int deleteDetails(Long[] ids); + + /** + * 批量查询多个任务的验收任务详细列表 + * @param taskIds + * @param userId + * @return + */ + List selectBindList(@Param("taskIds") List taskIds, @Param("userId") Long userId); + + /** + * 根据任务id查询新购验收任务详细列表--Join查询 + * @param purchaseQueryDto + * @return + */ + List selectPurchaseCheckDetailsListById(PurchaseQueryDto purchaseQueryDto); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/IPurchaseBindService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/IPurchaseBindService.java index 2ee3d216..f138e97b 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/IPurchaseBindService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/IPurchaseBindService.java @@ -2,6 +2,9 @@ package com.bonus.material.purchase.service; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.biz.domain.purchase.PurchaseDto; +import com.bonus.material.purchase.domain.PurchaseCheckInfo; +import com.bonus.material.purchase.domain.dto.PurchaseCheckDto; +import com.bonus.material.purchase.domain.dto.PurchaseQueryDto; import com.bonus.material.purchase.domain.vo.PurchaseVo; import javax.servlet.http.HttpServletResponse; @@ -60,4 +63,18 @@ public interface IPurchaseBindService { AjaxResult inventoryBind(PurchaseVo dto); AjaxResult getInventoryInfo(PurchaseDto dto); + + /** + * 查询新购验收绑定任务列表 + * @param purchaseQueryDto + * @return + */ + List selectPurchaseCheckInfoList(PurchaseQueryDto purchaseQueryDto); + + /** + * 获取新购验收任务详细信息 + * @param purchaseQueryDto + * @return + */ + PurchaseCheckDto getSelectPurchaseCheckInfoById(PurchaseQueryDto purchaseQueryDto); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseBindServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseBindServiceImpl.java index aa3993b5..c9710a89 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseBindServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseBindServiceImpl.java @@ -3,26 +3,36 @@ package com.bonus.material.purchase.service.impl; import com.bonus.common.biz.config.BackstageApplication; import com.bonus.common.biz.config.DateTimeHelper; import com.bonus.common.biz.config.QrCodeUtils; -import com.bonus.common.biz.constant.MaterialConstants; +import com.bonus.common.biz.constant.BmConfigItems; +import com.bonus.common.biz.domain.BmFileInfo; import com.bonus.common.biz.enums.HttpCodeEnum; import com.bonus.common.biz.enums.MaTypeManageTypeEnum; +import com.bonus.common.biz.enums.PurchaseTaskStageEnum; import com.bonus.common.biz.enums.PurchaseTaskStatusEnum; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.basic.mapper.BmFileInfoMapper; +import com.bonus.material.basic.service.IBmConfigService; import com.bonus.material.codeCollection.domain.WsMaInfo; import com.bonus.material.codeCollection.mapper.WsMaInfoMapper; import com.bonus.material.purchase.config.RemoteConfig; import com.bonus.common.biz.domain.purchase.PurchaseDto; import com.bonus.material.purchase.domain.PurchaseCheckDetails; import com.bonus.material.purchase.domain.PurchaseCheckInfo; +import com.bonus.material.purchase.domain.dto.PurchaseCheckDto; +import com.bonus.material.purchase.domain.dto.PurchaseQueryDto; import com.bonus.material.purchase.mapper.PurchaseBindMapper; import com.bonus.material.purchase.mapper.PurchaseCheckDetailsMapper; +import com.bonus.material.purchase.mapper.PurchaseCheckInfoMapper; import com.bonus.material.purchase.mapper.PurchaseStorageMapper; import com.bonus.material.purchase.service.IPurchaseBindService; import com.bonus.material.purchase.domain.vo.PurchaseVo; +import com.bonus.material.task.domain.TmTask; +import com.bonus.material.task.mapper.TmTaskMapper; +import com.bonus.system.api.model.LoginUser; import com.google.zxing.WriterException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -32,7 +42,10 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -56,9 +69,27 @@ public class PurchaseBindServiceImpl implements IPurchaseBindService { @Resource private PurchaseCheckDetailsMapper purchaseCheckDetailsMapper; + @Resource + private PurchaseCheckInfoMapper purchaseCheckInfoMapper; + @Resource private WsMaInfoMapper mapper; + @Resource + private TmTaskMapper tmTaskMapper; + + @Resource + private IBmConfigService bmConfigService; + + @Resource + private BmFileInfoMapper bmFileInfoMapper; + + // 引入新购任务阶段常量 + private static final int PURCHASE_TASK_STAGE_MANAGE = 1; + private static final int PURCHASE_TASK_STAGE_CHECK = 2; + private static final int PURCHASE_TASK_STAGE_BIND = 3; + private static final int PURCHASE_TASK_STAGE_STORE = 4; + /** * 查询所有绑定信息 @@ -558,4 +589,314 @@ public class PurchaseBindServiceImpl implements IPurchaseBindService { } return AjaxResult.success(vo); } + + /** + * 查询新购验收绑定任务列表 + * @param purchaseQueryDto + * @return + */ + @Override + public List selectPurchaseCheckInfoList(PurchaseQueryDto purchaseQueryDto) { + log.info("=== MaterialLeaseInfoServiceImpl.selectPurchaseCheckInfoList开始执行,purchaseQueryDto: {}", purchaseQueryDto); + + final List purchaseCheckInfos = purchaseCheckInfoMapper.selectPurchaseCheckInfoJoinList(purchaseQueryDto); + if (org.springframework.util.CollectionUtils.isEmpty(purchaseCheckInfos)) { + return Collections.emptyList(); + } + + // 检查 SecurityUtils.getLoginUser() 是否为 null + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser == null) { + log.error("当前用户未登录或登录信息丢失,无法获取用户ID"); + return Collections.emptyList(); + } + + final Long loginUserId = loginUser.getUserid(); + if (Objects.isNull(loginUserId) || Objects.isNull(purchaseQueryDto.getTaskStage())) { + return Collections.emptyList(); + } + + // 提取所有任务ID,用于批量查询 + List taskIds = purchaseCheckInfos.stream() + .map(PurchaseCheckInfo::getTaskId) + .collect(Collectors.toList()); + + // 批量查询所有任务的明细信息 + List allDetails = purchaseCheckDetailsMapper.selectBindList(taskIds, loginUserId); + Map> detailsMap = allDetails.stream() + .filter(detail -> detail.getTaskId() != null) + .collect(Collectors.groupingBy(PurchaseCheckDetails::getTaskId)); + + // 批量查询任务状态信息 + List tmTasks = tmTaskMapper.selectTmTaskByTaskIdsBatch(taskIds); + Map taskMap = tmTasks.stream() + .filter(task -> task.getTaskId() != null) + .collect(Collectors.toMap(TmTask::getTaskId, Function.identity())); + + // 批量查询物资类型名称 + final boolean isAllowPartTransfer = bmConfigService.isBmConfigEnabledWithDefaultFalse(BmConfigItems.BOOLEAN_ALLOW_PURCHASE_PART_TRANSFER); + List maTypeNames; + if (isAllowPartTransfer) { + maTypeNames = purchaseCheckDetailsMapper.selectMaTypeNameByTaskIdsBatch(taskIds, purchaseQueryDto.getStatusList()); + } else { + maTypeNames = purchaseCheckDetailsMapper.selectMaTypeNameByTaskIdsBatch(taskIds, Collections.emptyList()); + } + Map maTypeNameMap = maTypeNames.stream() + .filter(info -> info.getTaskId() != null) + .collect(Collectors.toMap(PurchaseCheckInfo::getTaskId, + info -> info.getPurchaseMaTypeName() != null ? info.getPurchaseMaTypeName() : "")); + + List purchaseCheckInfoResult = new ArrayList<>(); + for (final PurchaseCheckInfo purchaseInfo : purchaseCheckInfos) { + Long taskId = purchaseInfo.getTaskId(); + + // 获取采购物资明细 + List purchaseCheckDetails = detailsMap.getOrDefault(taskId, Collections.emptyList()); + if (org.springframework.util.CollectionUtils.isEmpty(purchaseCheckDetails)) { + continue; + } + + // 过滤掉数量管理并且是待绑定状态或者驳回后待绑定状态的物资 + purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> + !(MaTypeManageTypeEnum.NUMBER_DEVICE.getTypeId().equals(o.getManageType()) && + (o.getStatus().equals(PurchaseTaskStatusEnum.TO_BIND.getStatus()) || + o.getStatus().equals(PurchaseTaskStatusEnum.TO_BIND_AFTER_REJECT.getStatus())))).collect(Collectors.toList()); + + if (isAllowPartTransfer) { + // 根据任务阶段过滤 + switch (purchaseQueryDto.getTaskStage()) { + case PURCHASE_TASK_STAGE_MANAGE: + // 新购管理阶段展示全部任务、不进行过滤 + break; + case PURCHASE_TASK_STAGE_CHECK: + purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> + !PurchaseTaskStatusEnum.TO_NOTICE.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus().equals(o.getStatus())).collect(Collectors.toList()); + break; + case PURCHASE_TASK_STAGE_BIND: + purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> + !PurchaseTaskStatusEnum.TO_NOTICE.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_CHECK.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_BIND_AFTER_REJECT.getStatus().equals(o.getStatus()) + ).collect(Collectors.toList()); + break; + case PURCHASE_TASK_STAGE_STORE: + purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> + PurchaseTaskStatusEnum.IN_STORE.getStatus().equals(o.getStatus()) || + PurchaseTaskStatusEnum.TO_STORE.getStatus().equals(o.getStatus()) || + PurchaseTaskStatusEnum.TASK_FINISHED.getStatus().equals(o.getStatus()) || + (PurchaseTaskStatusEnum.TO_BIND.getStatus().equals(o.getStatus()) && null != o.getBindNum() && 0 < o.getBindNum().compareTo(BigDecimal.ZERO)) || + (PurchaseTaskStatusEnum.TO_STORE_AFTER_REJECT.getStatus().equals(o.getStatus()) && null != o.getBindNum() && 0 < o.getBindNum().compareTo(BigDecimal.ZERO)) + ).collect(Collectors.toList()); + break; + default: + System.err.println("未知的新购任务阶段:" + purchaseQueryDto.getTaskStage()); + return Collections.emptyList(); + } + } + + // 设置物资类型名称 + purchaseInfo.setPurchaseMaTypeName(maTypeNameMap.get(taskId)); + + if (!org.springframework.util.CollectionUtils.isEmpty(purchaseCheckDetails)) { + // 计算数量和金额 + BigDecimal purchaseMaTotalNumber = BigDecimal.ZERO; + BigDecimal checkMaTotalNumber = BigDecimal.ZERO; + BigDecimal bindMaTotalNumber = BigDecimal.ZERO; + BigDecimal inputMaTotalNumber = BigDecimal.ZERO; + BigDecimal purchaseMaTotalPrice = BigDecimal.ZERO; + BigDecimal purchaseTaxPriceTotal = BigDecimal.ZERO; + + boolean isIncludeStage = false; + for (final PurchaseCheckDetails detail : purchaseCheckDetails) { + if (null == detail.getPurchaseNum() || null == detail.getPurchasePrice()) { + continue; + } + if (0 > detail.getPurchaseNum().compareTo(BigDecimal.ZERO) || 0 > detail.getPurchasePrice().compareTo(BigDecimal.ZERO)) { + throw new IllegalArgumentException("采购数量和价格必须为非负数"); + } + if (!isIncludeStage) { + isIncludeStage = PurchaseTaskStatusEnum.isStatusOfStage(detail.getStatus(), PurchaseTaskStageEnum.getByCode(purchaseQueryDto.getTaskStage()), detail.getManageType()); + } + + purchaseMaTotalNumber = purchaseMaTotalNumber.add(Optional.of(detail.getPurchaseNum()).orElse(BigDecimal.ZERO)); + checkMaTotalNumber = checkMaTotalNumber.add(Optional.ofNullable(detail.getCheckNum()).orElse(BigDecimal.ZERO)); + bindMaTotalNumber = bindMaTotalNumber.add(Optional.ofNullable(detail.getBindNum()).orElse(BigDecimal.ZERO)); + inputMaTotalNumber = inputMaTotalNumber.add(Optional.ofNullable(detail.getInputNum()).orElse(BigDecimal.ZERO)); + purchaseMaTotalPrice = purchaseMaTotalPrice.add(detail.getPurchaseNum().multiply(detail.getPurchasePrice()).setScale(10, RoundingMode.HALF_DOWN)); + purchaseTaxPriceTotal = purchaseTaxPriceTotal.add(detail.getPurchaseNum().multiply(detail.getPurchaseTaxPrice()).setScale(10, RoundingMode.HALF_DOWN)); + } + + purchaseInfo.setPurchaseMaNumber(purchaseMaTotalNumber); + purchaseInfo.setPurchasePrice(purchaseMaTotalPrice); + purchaseInfo.setPurchaseTaxPrice(purchaseTaxPriceTotal); + purchaseInfo.setBindMaNumber(bindMaTotalNumber); + purchaseInfo.setCheckMaNumber(checkMaTotalNumber); + purchaseInfo.setInputMaNumber(inputMaTotalNumber); + purchaseInfo.setWaitInputNumber(purchaseMaTotalNumber.subtract(inputMaTotalNumber)); + + // 设置任务状态 + final TmTask tmTask = taskMap.get(taskId); + purchaseInfo.setTaskStatusName(isIncludeStage ? "未完成" : "已完成"); + if (null != purchaseQueryDto.getIsFinish()) { + if (1 == purchaseQueryDto.getIsFinish()) { + if (isIncludeStage) {continue;} + } else { + if (!isIncludeStage) {continue;} + } + } + + // 设置采购状态 + List statusList = purchaseCheckDetails.stream() + .map(PurchaseCheckDetails::getStatus) + .collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(statusList)) { + if (statusList.contains(PurchaseTaskStatusEnum.TO_BIND.getStatus()) || + statusList.contains(PurchaseTaskStatusEnum.TO_STORE.getStatus()) || + statusList.contains(PurchaseTaskStatusEnum.TO_BIND_AFTER_REJECT.getStatus()) || + statusList.contains(PurchaseTaskStatusEnum.TO_STORE_AFTER_REJECT.getStatus())) { + purchaseInfo.setPurchaseStatus(PurchaseTaskStatusEnum.TO_BIND.getStatus()); + } else if (statusList.contains(PurchaseTaskStatusEnum.IN_STORE.getStatus()) || + statusList.contains(PurchaseTaskStatusEnum.TASK_IN_PROGRESS.getStatus()) || + statusList.contains(PurchaseTaskStatusEnum.TASK_FINISHED.getStatus())) { + purchaseInfo.setPurchaseStatus(PurchaseTaskStatusEnum.IN_STORE.getStatus()); + } else { + purchaseInfo.setPurchaseStatus(0); + } + } + + if (tmTask != null) { + purchaseInfo.setTaskStatus(tmTask.getTaskStatus()); + } + + // 检查是否应该加入结果列表 + if (isAllowPartTransfer) { + purchaseCheckInfoResult.add(purchaseInfo); + } else { + final OptionalInt minStatus = purchaseCheckDetails.stream().mapToInt(PurchaseCheckDetails::getStatus).min(); + if (minStatus.isPresent() && purchaseQueryDto.getStatusList().contains(minStatus.getAsInt())) { + purchaseCheckInfoResult.add(purchaseInfo); + } + } + } + } + + if (!CollectionUtils.isEmpty(purchaseCheckInfoResult)) { + // 关键字过滤 + String keyWord = purchaseQueryDto.getKeyWord(); + if (!StringUtils.isBlank(keyWord)) { + purchaseCheckInfoResult = purchaseCheckInfoResult.stream() + .filter(item -> containsKeyword(item, keyWord)) + .collect(Collectors.toList()); + } + } + + return purchaseCheckInfoResult; + } + + /** + * 获取新购验收任务详细信息 + * @param purchaseQueryDto + * @return + */ + @Override + public PurchaseCheckDto getSelectPurchaseCheckInfoById(PurchaseQueryDto purchaseQueryDto) { + purchaseQueryDto.setUserId(SecurityUtils.getLoginUser().getUserid()); + PurchaseCheckDto purchaseCheckDtoResult = new PurchaseCheckDto(); + PurchaseCheckInfo purchaseCheckInfo = purchaseCheckInfoMapper.selectPurchaseCheckInfoById(purchaseQueryDto.getId()); + if (null != purchaseCheckInfo) { + purchaseCheckDtoResult.setPurchaseCheckInfo(purchaseCheckInfo); + List purchaseCheckDetailsList = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListById(purchaseQueryDto); + if (null != purchaseQueryDto.getTaskStage()) { + // 根据阶段来过滤详情数据 + switch (purchaseQueryDto.getTaskStage()) { + case PURCHASE_TASK_STAGE_MANAGE: + // 新购管理阶段展示全部任务、不进行过滤 + break; + case PURCHASE_TASK_STAGE_CHECK: + purchaseCheckDetailsList = purchaseCheckDetailsList.stream().filter(o -> !PurchaseTaskStatusEnum.TO_NOTICE.getStatus().equals(o.getStatus())).collect(Collectors.toList()); + break; + case PURCHASE_TASK_STAGE_BIND: + purchaseCheckDetailsList = purchaseCheckDetailsList.stream().filter(o -> + !PurchaseTaskStatusEnum.TO_NOTICE.getStatus().equals(o.getStatus()) && !PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_CHECK.getStatus().equals(o.getStatus()) && !PurchaseTaskStatusEnum.TO_BIND_AFTER_REJECT.getStatus().equals(o.getStatus()) + ).collect(Collectors.toList()); + break; + case PURCHASE_TASK_STAGE_STORE: + purchaseCheckDetailsList = purchaseCheckDetailsList.stream().filter(o -> + PurchaseTaskStatusEnum.IN_STORE.getStatus().equals(o.getStatus()) || + PurchaseTaskStatusEnum.TO_STORE.getStatus().equals(o.getStatus()) || + PurchaseTaskStatusEnum.TASK_FINISHED.getStatus().equals(o.getStatus()) || + (PurchaseTaskStatusEnum.TO_BIND.getStatus().equals(o.getStatus()) && null != o.getBindNum() && 0 < o.getBindNum().compareTo(BigDecimal.ZERO)) || + (PurchaseTaskStatusEnum.TO_STORE_AFTER_REJECT.getStatus().equals(o.getStatus()) && null != o.getBindNum() && 0 < o.getBindNum().compareTo(BigDecimal.ZERO)) + ).collect(Collectors.toList()); + break; + default: + System.err.println("未知的新购任务阶段:" + purchaseQueryDto.getTaskStage()); + } + } + //查询是否存在附件,给前端用于文件颜色判断 + extractedExitFile(purchaseCheckDetailsList); + //针对于app查询可能存在的验收图片 + extractedFile(purchaseCheckDetailsList); + purchaseCheckDtoResult.setPurchaseCheckDetailsList(purchaseCheckDetailsList); + } + return purchaseCheckDtoResult; + } + + /** + * 提取app新购验收文件信息 + * @param purchaseCheckDetailsList 新购验收明细列表 + */ + private void extractedFile(List purchaseCheckDetailsList) { + if (!org.springframework.util.CollectionUtils.isEmpty(purchaseCheckDetailsList)) { + for (PurchaseCheckDetails purchaseCheckDetails : purchaseCheckDetailsList) { + final BmFileInfo fileInfo = new BmFileInfo(); + fileInfo.setTaskType(10); + fileInfo.setModelId(purchaseCheckDetails.getId()); + fileInfo.setTaskId(purchaseCheckDetails.getTaskId()); + final List bmFileInfoList = bmFileInfoMapper.selectBmFileInfoList(fileInfo); + if (!org.springframework.util.CollectionUtils.isEmpty(bmFileInfoList)) { + purchaseCheckDetails.setBmFileInfos(bmFileInfoList); + } + } + } + } + + /** + * 查询是否存在附件,给前端用于文件颜色判断 + * @param purchaseCheckDetailsList 新购验收明细列表 + */ + private void extractedExitFile(List purchaseCheckDetailsList) { + if (!org.springframework.util.CollectionUtils.isEmpty(purchaseCheckDetailsList)) { + for (PurchaseCheckDetails purchaseCheckDetails : purchaseCheckDetailsList) { + final BmFileInfo fileInfo = new BmFileInfo(); + fileInfo.setTaskType(0); + fileInfo.setModelId(purchaseCheckDetails.getTypeId()); + fileInfo.setTaskId(purchaseCheckDetails.getTaskId()); + final List bmFileInfoList = bmFileInfoMapper.selectBmFileInfoList(fileInfo); + if (!org.springframework.util.CollectionUtils.isEmpty(bmFileInfoList)) { + purchaseCheckDetails.setIsExitFile(0); + purchaseCheckDetails.setBmFileInfos(bmFileInfoList); + }else { + purchaseCheckDetails.setIsExitFile(1); + } + } + } + } + + /** + * 关键字搜索 + * @param item + * @param keyWord + * @return + */ + private boolean containsKeyword(PurchaseCheckInfo item, String keyWord) { + return (item.getPurchaseMaTypeName() != null && item.getPurchaseMaTypeName().contains(keyWord)) || + (item.getCode() != null && item.getCode().contains(keyWord)) || + (item.getSupplier() != null && item.getSupplier().contains(keyWord)) || + (item.getCreateBy() != null && item.getCreateBy().contains(keyWord)); + } } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseCheckInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseCheckInfoServiceImpl.java index de54b601..3dfabbaa 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseCheckInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseCheckInfoServiceImpl.java @@ -8,7 +8,6 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import java.util.stream.Collectors; -import com.bonus.common.biz.config.DateTimeHelper; import com.bonus.common.biz.constant.BmConfigItems; import com.bonus.common.biz.enums.MaTypeManageTypeEnum; import com.bonus.common.biz.enums.PurchaseTaskStageEnum; @@ -652,6 +651,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService { @Transactional(rollbackFor = Exception.class) public AjaxResult insertPurchaseCheckInfo(PurchaseCheckDto purchaseCheckInfo) { purchaseCheckInfo.getPurchaseCheckInfo().setCreateTime(DateUtils.getNowDate()); + purchaseCheckInfo.getPurchaseCheckInfo().setPurchaseTime(DateUtils.getNowDate()); purchaseCheckInfo.getPurchaseCheckInfo().setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName()); try { final int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId()); diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseCheckDetailsMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseCheckDetailsMapper.xml index 67bdba2f..d76b756e 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseCheckDetailsMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseCheckDetailsMapper.xml @@ -432,4 +432,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and (del_flag = '0' or del_flag is null) and task_id = #{taskId} + + + +