新购优化
This commit is contained in:
parent
51ec281b35
commit
61aeb35cdb
|
|
@ -1,10 +1,8 @@
|
||||||
package com.bonus.material.common.service.impl;
|
package com.bonus.material.common.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
|
||||||
import com.alibaba.nacos.common.utils.StringUtils;
|
import com.alibaba.nacos.common.utils.StringUtils;
|
||||||
import com.bonus.common.biz.config.DateTimeHelper;
|
import com.bonus.common.biz.config.DateTimeHelper;
|
||||||
import com.bonus.common.biz.domain.*;
|
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.core.web.domain.AjaxResult;
|
||||||
import com.bonus.common.security.utils.SecurityUtils;
|
import com.bonus.common.security.utils.SecurityUtils;
|
||||||
import com.bonus.material.back.domain.BackApplyInfo;
|
import com.bonus.material.back.domain.BackApplyInfo;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import com.bonus.common.log.enums.OperaType;
|
||||||
import com.bonus.material.common.annotation.PreventRepeatSubmit;
|
import com.bonus.material.common.annotation.PreventRepeatSubmit;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
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.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
|
@ -53,7 +52,7 @@ public class SupplierInfoController extends BaseController {
|
||||||
* 查询物资厂家--下拉框--不分页
|
* 查询物资厂家--下拉框--不分页
|
||||||
*/
|
*/
|
||||||
@ApiOperation(value = "查询物资厂家下拉框--不分页")
|
@ApiOperation(value = "查询物资厂家下拉框--不分页")
|
||||||
@RequiresPermissions("ma:info:list")
|
//@RequiresPermissions("ma:info:list")
|
||||||
@GetMapping("/select")
|
@GetMapping("/select")
|
||||||
public TableDataInfo select(SupplierInfo supplierInfo) {
|
public TableDataInfo select(SupplierInfo supplierInfo) {
|
||||||
List<SupplierInfo> list = supplierInfoService.selectSupplierInfoList(supplierInfo);
|
List<SupplierInfo> list = supplierInfoService.selectSupplierInfoList(supplierInfo);
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,18 @@
|
||||||
package com.bonus.material.purchase.controller;
|
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.utils.poi.ExcelUtil;
|
||||||
import com.bonus.common.core.web.controller.BaseController;
|
import com.bonus.common.core.web.controller.BaseController;
|
||||||
import com.bonus.common.core.web.domain.AjaxResult;
|
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.annotation.SysLog;
|
||||||
import com.bonus.common.log.enums.OperaType;
|
import com.bonus.common.log.enums.OperaType;
|
||||||
import com.bonus.material.common.annotation.PreventRepeatSubmit;
|
import com.bonus.material.common.annotation.PreventRepeatSubmit;
|
||||||
import com.bonus.common.security.annotation.RequiresPermissions;
|
import com.bonus.common.security.annotation.RequiresPermissions;
|
||||||
import com.bonus.common.biz.domain.purchase.PurchaseDto;
|
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.service.IPurchaseBindService;
|
||||||
import com.bonus.material.purchase.domain.vo.PurchaseVo;
|
import com.bonus.material.purchase.domain.vo.PurchaseVo;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
|
|
@ -20,6 +24,9 @@ import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.List;
|
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
|
* @Author ma_sh
|
||||||
|
|
@ -33,6 +40,31 @@ public class PurchaseBindController extends BaseController {
|
||||||
@Resource
|
@Resource
|
||||||
private IPurchaseBindService purchaseBindService;
|
private IPurchaseBindService purchaseBindService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询新购验收绑定任务列表
|
||||||
|
* @param purchaseQueryDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@ApiOperation("查询新购验收绑定任务列表")
|
||||||
|
@GetMapping("/list")
|
||||||
|
public AjaxResult list(PurchaseQueryDto purchaseQueryDto) {
|
||||||
|
final List<PurchaseCheckInfo> 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
|
* @param dto
|
||||||
|
|
|
||||||
|
|
@ -129,4 +129,19 @@ public interface PurchaseCheckDetailsMapper {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int deleteDetails(Long[] ids);
|
int deleteDetails(Long[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量查询多个任务的验收任务详细列表
|
||||||
|
* @param taskIds
|
||||||
|
* @param userId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PurchaseCheckDetails> selectBindList(@Param("taskIds") List<Long> taskIds, @Param("userId") Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据任务id查询新购验收任务详细列表--Join查询
|
||||||
|
* @param purchaseQueryDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PurchaseCheckDetails> selectPurchaseCheckDetailsListById(PurchaseQueryDto purchaseQueryDto);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,9 @@ package com.bonus.material.purchase.service;
|
||||||
|
|
||||||
import com.bonus.common.core.web.domain.AjaxResult;
|
import com.bonus.common.core.web.domain.AjaxResult;
|
||||||
import com.bonus.common.biz.domain.purchase.PurchaseDto;
|
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 com.bonus.material.purchase.domain.vo.PurchaseVo;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
@ -60,4 +63,18 @@ public interface IPurchaseBindService {
|
||||||
AjaxResult inventoryBind(PurchaseVo dto);
|
AjaxResult inventoryBind(PurchaseVo dto);
|
||||||
|
|
||||||
AjaxResult getInventoryInfo(PurchaseDto dto);
|
AjaxResult getInventoryInfo(PurchaseDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询新购验收绑定任务列表
|
||||||
|
* @param purchaseQueryDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PurchaseCheckInfo> selectPurchaseCheckInfoList(PurchaseQueryDto purchaseQueryDto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取新购验收任务详细信息
|
||||||
|
* @param purchaseQueryDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
PurchaseCheckDto getSelectPurchaseCheckInfoById(PurchaseQueryDto purchaseQueryDto);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,26 +3,36 @@ package com.bonus.material.purchase.service.impl;
|
||||||
import com.bonus.common.biz.config.BackstageApplication;
|
import com.bonus.common.biz.config.BackstageApplication;
|
||||||
import com.bonus.common.biz.config.DateTimeHelper;
|
import com.bonus.common.biz.config.DateTimeHelper;
|
||||||
import com.bonus.common.biz.config.QrCodeUtils;
|
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.HttpCodeEnum;
|
||||||
import com.bonus.common.biz.enums.MaTypeManageTypeEnum;
|
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.biz.enums.PurchaseTaskStatusEnum;
|
||||||
import com.bonus.common.core.exception.ServiceException;
|
import com.bonus.common.core.exception.ServiceException;
|
||||||
import com.bonus.common.core.utils.DateUtils;
|
import com.bonus.common.core.utils.DateUtils;
|
||||||
import com.bonus.common.core.utils.StringUtils;
|
import com.bonus.common.core.utils.StringUtils;
|
||||||
import com.bonus.common.core.web.domain.AjaxResult;
|
import com.bonus.common.core.web.domain.AjaxResult;
|
||||||
import com.bonus.common.security.utils.SecurityUtils;
|
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.domain.WsMaInfo;
|
||||||
import com.bonus.material.codeCollection.mapper.WsMaInfoMapper;
|
import com.bonus.material.codeCollection.mapper.WsMaInfoMapper;
|
||||||
import com.bonus.material.purchase.config.RemoteConfig;
|
import com.bonus.material.purchase.config.RemoteConfig;
|
||||||
import com.bonus.common.biz.domain.purchase.PurchaseDto;
|
import com.bonus.common.biz.domain.purchase.PurchaseDto;
|
||||||
import com.bonus.material.purchase.domain.PurchaseCheckDetails;
|
import com.bonus.material.purchase.domain.PurchaseCheckDetails;
|
||||||
import com.bonus.material.purchase.domain.PurchaseCheckInfo;
|
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.PurchaseBindMapper;
|
||||||
import com.bonus.material.purchase.mapper.PurchaseCheckDetailsMapper;
|
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.mapper.PurchaseStorageMapper;
|
||||||
import com.bonus.material.purchase.service.IPurchaseBindService;
|
import com.bonus.material.purchase.service.IPurchaseBindService;
|
||||||
import com.bonus.material.purchase.domain.vo.PurchaseVo;
|
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 com.google.zxing.WriterException;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
|
@ -32,7 +42,10 @@ import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
|
@ -56,9 +69,27 @@ public class PurchaseBindServiceImpl implements IPurchaseBindService {
|
||||||
@Resource
|
@Resource
|
||||||
private PurchaseCheckDetailsMapper purchaseCheckDetailsMapper;
|
private PurchaseCheckDetailsMapper purchaseCheckDetailsMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PurchaseCheckInfoMapper purchaseCheckInfoMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private WsMaInfoMapper mapper;
|
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);
|
return AjaxResult.success(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询新购验收绑定任务列表
|
||||||
|
* @param purchaseQueryDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<PurchaseCheckInfo> selectPurchaseCheckInfoList(PurchaseQueryDto purchaseQueryDto) {
|
||||||
|
log.info("=== MaterialLeaseInfoServiceImpl.selectPurchaseCheckInfoList开始执行,purchaseQueryDto: {}", purchaseQueryDto);
|
||||||
|
|
||||||
|
final List<PurchaseCheckInfo> 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<Long> taskIds = purchaseCheckInfos.stream()
|
||||||
|
.map(PurchaseCheckInfo::getTaskId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 批量查询所有任务的明细信息
|
||||||
|
List<PurchaseCheckDetails> allDetails = purchaseCheckDetailsMapper.selectBindList(taskIds, loginUserId);
|
||||||
|
Map<Long, List<PurchaseCheckDetails>> detailsMap = allDetails.stream()
|
||||||
|
.filter(detail -> detail.getTaskId() != null)
|
||||||
|
.collect(Collectors.groupingBy(PurchaseCheckDetails::getTaskId));
|
||||||
|
|
||||||
|
// 批量查询任务状态信息
|
||||||
|
List<TmTask> tmTasks = tmTaskMapper.selectTmTaskByTaskIdsBatch(taskIds);
|
||||||
|
Map<Long, TmTask> 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<PurchaseCheckInfo> maTypeNames;
|
||||||
|
if (isAllowPartTransfer) {
|
||||||
|
maTypeNames = purchaseCheckDetailsMapper.selectMaTypeNameByTaskIdsBatch(taskIds, purchaseQueryDto.getStatusList());
|
||||||
|
} else {
|
||||||
|
maTypeNames = purchaseCheckDetailsMapper.selectMaTypeNameByTaskIdsBatch(taskIds, Collections.emptyList());
|
||||||
|
}
|
||||||
|
Map<Long, String> maTypeNameMap = maTypeNames.stream()
|
||||||
|
.filter(info -> info.getTaskId() != null)
|
||||||
|
.collect(Collectors.toMap(PurchaseCheckInfo::getTaskId,
|
||||||
|
info -> info.getPurchaseMaTypeName() != null ? info.getPurchaseMaTypeName() : ""));
|
||||||
|
|
||||||
|
List<PurchaseCheckInfo> purchaseCheckInfoResult = new ArrayList<>();
|
||||||
|
for (final PurchaseCheckInfo purchaseInfo : purchaseCheckInfos) {
|
||||||
|
Long taskId = purchaseInfo.getTaskId();
|
||||||
|
|
||||||
|
// 获取采购物资明细
|
||||||
|
List<PurchaseCheckDetails> 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<Integer> 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<PurchaseCheckDetails> 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<PurchaseCheckDetails> 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<BmFileInfo> bmFileInfoList = bmFileInfoMapper.selectBmFileInfoList(fileInfo);
|
||||||
|
if (!org.springframework.util.CollectionUtils.isEmpty(bmFileInfoList)) {
|
||||||
|
purchaseCheckDetails.setBmFileInfos(bmFileInfoList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询是否存在附件,给前端用于文件颜色判断
|
||||||
|
* @param purchaseCheckDetailsList 新购验收明细列表
|
||||||
|
*/
|
||||||
|
private void extractedExitFile(List<PurchaseCheckDetails> 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<BmFileInfo> 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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.bonus.common.biz.config.DateTimeHelper;
|
|
||||||
import com.bonus.common.biz.constant.BmConfigItems;
|
import com.bonus.common.biz.constant.BmConfigItems;
|
||||||
import com.bonus.common.biz.enums.MaTypeManageTypeEnum;
|
import com.bonus.common.biz.enums.MaTypeManageTypeEnum;
|
||||||
import com.bonus.common.biz.enums.PurchaseTaskStageEnum;
|
import com.bonus.common.biz.enums.PurchaseTaskStageEnum;
|
||||||
|
|
@ -652,6 +651,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public AjaxResult insertPurchaseCheckInfo(PurchaseCheckDto purchaseCheckInfo) {
|
public AjaxResult insertPurchaseCheckInfo(PurchaseCheckDto purchaseCheckInfo) {
|
||||||
purchaseCheckInfo.getPurchaseCheckInfo().setCreateTime(DateUtils.getNowDate());
|
purchaseCheckInfo.getPurchaseCheckInfo().setCreateTime(DateUtils.getNowDate());
|
||||||
|
purchaseCheckInfo.getPurchaseCheckInfo().setPurchaseTime(DateUtils.getNowDate());
|
||||||
purchaseCheckInfo.getPurchaseCheckInfo().setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
|
purchaseCheckInfo.getPurchaseCheckInfo().setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
|
||||||
try {
|
try {
|
||||||
final int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId());
|
final int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId());
|
||||||
|
|
|
||||||
|
|
@ -432,4 +432,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
and (del_flag = '0' or del_flag is null)
|
and (del_flag = '0' or del_flag is null)
|
||||||
and task_id = #{taskId}
|
and task_id = #{taskId}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectBindList" resultMap="PurchaseCheckDetailsResult">
|
||||||
|
<include refid="selectPurchaseCheckDetailsJoinVo"/>
|
||||||
|
<if test="userId != null">
|
||||||
|
right join ma_type_repair mtr ON mtr.type_id = mt.type_id AND mtr.user_id = #{userId}
|
||||||
|
</if>
|
||||||
|
where 1=1
|
||||||
|
<if test="taskIds != null and taskIds.size() > 0">
|
||||||
|
and pcd.task_id in
|
||||||
|
<foreach item="taskId" collection="taskIds" open="(" separator="," close=")">
|
||||||
|
#{taskId}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
order by pcd.task_id, pcd.id
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectPurchaseCheckDetailsListById" resultType="com.bonus.material.purchase.domain.PurchaseCheckDetails" resultMap="PurchaseCheckDetailsResult">
|
||||||
|
<include refid="selectPurchaseCheckDetailsJoinVo"/>
|
||||||
|
<if test="userId != null">
|
||||||
|
right join ma_type_repair mtr ON mtr.type_id = mt.type_id AND mtr.user_id = #{userId}
|
||||||
|
</if>
|
||||||
|
where pcd.task_id = #{taskId}
|
||||||
|
<if test="typeId != null">
|
||||||
|
and pcd.type_id = #{typeId}
|
||||||
|
</if>
|
||||||
|
<if test="supplierId != null">
|
||||||
|
and pcd.supplier_id = #{supplierId}
|
||||||
|
</if>
|
||||||
|
<if test="productionTime != null">
|
||||||
|
and pcd.production_time = #{productionTime}
|
||||||
|
</if>
|
||||||
|
<if test="keyWord != null and keyWord != ''">
|
||||||
|
and (mt.type_name like concat('%', #{keyWord}, '%')
|
||||||
|
or mt.unit_name like concat('%', #{keyWord}, '%')
|
||||||
|
or mtp.type_name like concat('%', #{keyWord}, '%'))
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue