diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStageEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStageEnum.java new file mode 100644 index 00000000..51ae6cda --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStageEnum.java @@ -0,0 +1,37 @@ +package com.bonus.common.biz.enums; + +import lombok.Getter; + +/** + * @author : 阮世耀 + * @version : 1.0 + * @PackagePath: com.bonus.common.biz.enums + * @CreateTime: 2024-12-23 10:42 + * @Description: 新购任务阶段枚举 + */ +@Getter +public enum PurchaseTaskStageEnum { + + MANAGE(1, "管理"), + CHECK(2, "验收"), + BIND(3, "绑定"), + STORE(4, "入库"); + + private final int code; + private final String name; + + PurchaseTaskStageEnum(int code, String name) { + this.code = code; + this.name = name; + } + + public static PurchaseTaskStageEnum getByCode(int code) { + for (PurchaseTaskStageEnum stageEnum : PurchaseTaskStageEnum.values()) { + if (stageEnum.getCode() == code) { + return stageEnum; + } + } + return null; + } + +} diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStatusEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStatusEnum.java index 4096a158..1e6d4ecb 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStatusEnum.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStatusEnum.java @@ -2,31 +2,57 @@ package com.bonus.common.biz.enums; import lombok.Getter; +import java.util.List; +import java.util.Objects; + /** * @author bonus */ @Getter public enum PurchaseTaskStatusEnum { - TO_NOTICE(1, "待通知"), - TO_CHECK(2, "待验收"), - TO_BIND(3, "待绑定"), - TO_STORE(4, "待入库"), - TO_CHECK_AFTER_REJECT(12, "待验收(驳回后)"), - TO_BIND_AFTER_REJECT(13, "待绑定(驳回后)"), - TO_STORE_AFTER_REJECT(14, "待入库(驳回后)"), - IN_STORE(19, "已入库"), - TASK_IN_PROGRESS(21, "入库进行中"), - TASK_FINISHED(22, "入库已完成"); + TO_NOTICE(1, "待通知", PurchaseTaskStageEnum.MANAGE.getCode()), + TO_CHECK(2, "待验收", PurchaseTaskStageEnum.CHECK.getCode()), + TO_BIND(3, "待绑定", PurchaseTaskStageEnum.BIND.getCode()), + TO_STORE(4, "待入库", PurchaseTaskStageEnum.STORE.getCode()), + TO_CHECK_AFTER_REJECT(12, "待验收(驳回后)", PurchaseTaskStageEnum.CHECK.getCode()), + TO_BIND_AFTER_REJECT(13, "待绑定(驳回后)", PurchaseTaskStageEnum.BIND.getCode()), + TO_STORE_AFTER_REJECT(14, "待入库(驳回后)", PurchaseTaskStageEnum.STORE.getCode()), + IN_STORE(19, "已入库", PurchaseTaskStageEnum.STORE.getCode()), + TASK_IN_PROGRESS(21, "入库进行中", PurchaseTaskStageEnum.STORE.getCode()), + TASK_FINISHED(22, "入库已完成", PurchaseTaskStageEnum.STORE.getCode()); private final Integer status; private final String statusName; + // 新购任务阶段 + private final Integer stage; - PurchaseTaskStatusEnum(Integer status, String statusName) { + PurchaseTaskStatusEnum(Integer status, String statusName, Integer stage) { this.status = status; this.statusName = statusName; + this.stage = stage; } + // 判断任务状态是否为此阶段所属状态 + public static boolean isStatusOfStage(Integer status, PurchaseTaskStageEnum stageEnum) { + PurchaseTaskStatusEnum findEnum = null; + for (PurchaseTaskStatusEnum statusEnum : values()) { + if (statusEnum.status.equals(status)) { + findEnum = statusEnum; + break; + } + } + + if (findEnum == null || stageEnum == null) { + return false; + } else { + // 如果是最后的入库完成,那么说明流程已走完,不需要再判断了 + if (Objects.equals(findEnum.getStage(), TASK_FINISHED.getStage())) { + return false; + } + return findEnum.getStage().equals(stageEnum.getCode()); + } + } public static PurchaseTaskStatusEnum getByStatus(Integer status) { for (PurchaseTaskStatusEnum statusEnum : values()) { @@ -37,11 +63,4 @@ public enum PurchaseTaskStatusEnum { return null; } - public Integer getStatus() { - return status; - } - - public String getStatusName() { - return statusName; - } } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/PurchaseCheckInfo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/PurchaseCheckInfo.java index 1d704511..cef76dd5 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/PurchaseCheckInfo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/PurchaseCheckInfo.java @@ -37,6 +37,9 @@ public class PurchaseCheckInfo extends BaseEntity { @ApiModelProperty(value = "任务状态") private Integer taskStatus; + @ApiModelProperty(value = "任务状态名称,未完成/已完成") + private String taskStatusName; + @Excel(name = "采购单号", sort = 2) @ApiModelProperty(value = "采购单号") private String code; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/dto/PurchaseQueryDto.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/dto/PurchaseQueryDto.java index 04f822f9..4637fdb7 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/dto/PurchaseQueryDto.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/dto/PurchaseQueryDto.java @@ -26,9 +26,15 @@ public class PurchaseQueryDto { @ApiModelProperty(value = "任务id") private Long taskId; + @ApiModelProperty(value = "登录用户id") + private Long userId; + @ApiModelProperty(value = "任务单号") private String code; + @ApiModelProperty(value = "任务阶段,对应新购阶段枚举") + private Integer taskStage; + @ApiModelProperty(value = "开始时间") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startTime; 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 ce508709..193380d9 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 @@ -37,7 +37,7 @@ public interface PurchaseCheckDetailsMapper { * 根据任务id查询新购验收任务详细列表--Join查询 * @param taskId 任务id */ - List selectPurchaseCheckDetailsListByTaskId(@Param("taskId") Long taskId, @Param("status") Integer status); + List selectPurchaseCheckDetailsListByTaskId(@Param("taskId") Long taskId, @Param("status") Integer status, @Param("userId") Long userId); /** * 根据任务id查询新购验收任务详细列表--Join查询 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 01d8de0d..c4de9f2a 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 @@ -6,8 +6,11 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; + +import cn.hutool.core.map.MapUtil; import com.bonus.common.biz.constant.BmConfigItems; 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.TmTaskTypeEnum; import com.bonus.common.core.exception.ServiceException; @@ -65,6 +68,12 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService { @Resource 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; + /** * 查询新购验收任务 * @@ -73,6 +82,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService { */ @Override public PurchaseCheckDto selectPurchaseCheckInfoById(PurchaseQueryDto purchaseQueryDto) { + purchaseQueryDto.setUserId(SecurityUtils.getUserId()); PurchaseCheckDto purchaseCheckDtoResult = new PurchaseCheckDto(); PurchaseCheckInfo purchaseCheckInfo = purchaseCheckInfoMapper.selectPurchaseCheckInfoById(purchaseQueryDto.getId()); if (purchaseCheckInfo != null) { @@ -129,40 +139,76 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService { */ @Override public List selectPurchaseCheckInfoList(PurchaseQueryDto purchaseQueryDto) { + // TODO 引入采购任务阶段管理、先写死 后期由前端传入 + // purchaseQueryDto.setTaskStage(PurchaseTaskStageEnum.CHECK.getCode()); + List purchaseCheckInfos = purchaseCheckInfoMapper.selectPurchaseCheckInfoJoinList(purchaseQueryDto); + if (CollectionUtils.isEmpty(purchaseCheckInfos) ) {return Collections.emptyList();} + AtomicReference loginUserId = new AtomicReference<>(SecurityUtils.getUserId()); + if (Objects.isNull(loginUserId.get()) || Objects.isNull(purchaseQueryDto.getTaskStage())) {return Collections.emptyList();} + List purchaseCheckInfoResult = new ArrayList<>(); - if (CollectionUtils.isEmpty(purchaseCheckInfos)) { - return purchaseCheckInfoResult; - } boolean isAllowPartTransfer = bmConfigService.isBmConfigEnabledWithDefaultFalse(BmConfigItems.BOOLEAN_ALLOW_PURCHASE_PART_TRANSFER); + for (PurchaseCheckInfo purchaseInfo : purchaseCheckInfos) { - List purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(purchaseInfo.getTaskId(), null); - // 筛除:绑定状态 + 数量设备 + // 获取采购物资明细、2024-12-23日修改by阮世耀 根据当前库管员绑定物资来查询 不展示非本角色管理的物资类型 + List purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(purchaseInfo.getTaskId(), null, loginUserId.get()); + if (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()); + OptionalInt minStatus = purchaseCheckDetails.stream().mapToInt(PurchaseCheckDetails::getStatus).min(); if (isAllowPartTransfer) { - if (!CollectionUtils.isEmpty(purchaseQueryDto.getStatusList())) { - purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> purchaseQueryDto.getStatusList().contains(o.getStatus())).collect(Collectors.toList()); + // 过滤由前端传入的物资所属状态 + // TODO 2024-12-23日 取消状态过滤,修改由任务阶段来过滤 --- by 阮世耀 +// if (!CollectionUtils.isEmpty(purchaseQueryDto.getStatusList())) { +// purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> purchaseQueryDto.getStatusList().contains(o.getStatus())).collect(Collectors.toList()); +// } + 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())).collect(Collectors.toList()); + break; + case PURCHASE_TASK_STAGE_BIND: + purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> + !PurchaseTaskStatusEnum.TO_NOTICE.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_CHECK.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus().equals(o.getStatus()) + ).collect(Collectors.toList()); + break; + case PURCHASE_TASK_STAGE_STORE: + purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> + !PurchaseTaskStatusEnum.TO_NOTICE.getStatus().equals(o.getStatus()) && !PurchaseTaskStatusEnum.TO_CHECK.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus().equals(o.getStatus()) && !PurchaseTaskStatusEnum.TO_BIND.getStatus().equals(o.getStatus()) && + !PurchaseTaskStatusEnum.TO_BIND_AFTER_REJECT.getStatus().equals(o.getStatus()) + ).collect(Collectors.toList()); + break; + default: + return Collections.emptyList(); } purchaseInfo.setPurchaseMaTypeName(purchaseCheckDetailsMapper.selectMaTypeNameByTaskAndStatusList(purchaseInfo.getTaskId(), purchaseQueryDto.getStatusList())); } else { purchaseInfo.setPurchaseMaTypeName(purchaseCheckDetailsMapper.selectMaTypeNameByTaskAndStatusList(purchaseInfo.getTaskId(), new ArrayList<>())); } if (!CollectionUtils.isEmpty(purchaseCheckDetails)) { - BigDecimal purchaseMaTotalNumber = BigDecimal.ZERO; - BigDecimal checkMaTotalNumber = BigDecimal.ZERO; - BigDecimal bindMaTotalNumber = BigDecimal.ZERO; - BigDecimal inputMaTotalNumber = BigDecimal.ZERO; + BigDecimal purchaseMaTotalNumber = BigDecimal.ZERO, checkMaTotalNumber = BigDecimal.ZERO, bindMaTotalNumber = BigDecimal.ZERO, inputMaTotalNumber = BigDecimal.ZERO; AtomicReference purchaseMaTotalPrice = new AtomicReference<>(BigDecimal.ZERO); + + boolean isIncludeStage = false; for (PurchaseCheckDetails detail : purchaseCheckDetails) { - if (detail.getPurchaseNum() == null || detail.getPurchasePrice() == null) { - continue; - } + if (detail.getPurchaseNum() == null || detail.getPurchasePrice() == null) {continue;} if (detail.getPurchaseNum().compareTo(BigDecimal.ZERO) < 0 || detail.getPurchasePrice().compareTo(BigDecimal.ZERO) < 0) { throw new IllegalArgumentException("采购数量和价格必须为非负数"); } + if (!isIncludeStage) { + isIncludeStage = PurchaseTaskStatusEnum.isStatusOfStage(detail.getStatus(), PurchaseTaskStageEnum.getByCode(purchaseQueryDto.getTaskStage())); + } + // 更新 purchaseMaTotalNumber purchaseMaTotalNumber = purchaseMaTotalNumber.add(Optional.of(detail.getPurchaseNum()).orElse(BigDecimal.ZERO)); checkMaTotalNumber = checkMaTotalNumber.add(Optional.ofNullable(detail.getCheckNum()).orElse(BigDecimal.ZERO)); @@ -179,16 +225,20 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService { if (purchaseInfo.getTaxRate() != null && purchaseInfo.getPurchasePrice() != null) { purchaseInfo.setPurchaseTaxPrice(calculateTaxPrice(purchaseMaTotalPrice.get(), purchaseInfo.getTaxRate())); } + // 设置外层任务状态:入库待开始、入库进行中、入库已完成 TmTask tmTask = tmTaskMapper.selectTmTaskByTaskId(purchaseInfo.getTaskId()); + purchaseInfo.setTaskStatusName(isIncludeStage ? "未完成" : "已完成"); purchaseInfo.setTaskStatus(tmTask.getTaskStatus()); + // 设置外层任务列表 if (isAllowPartTransfer) { purchaseCheckInfoResult.add(purchaseInfo); - } else if (minStatus.isPresent() && purchaseQueryDto.getStatusList().contains(Integer.valueOf(minStatus.getAsInt()))) { + } else if (minStatus.isPresent() && purchaseQueryDto.getStatusList().contains(minStatus.getAsInt())) { // 当不允许部分物资状态流转时,例如内部状态含(2,12,3,13),其中最小的状态值(2),当等于传入的状态值(2,12)时,才显示外面的列表 purchaseCheckInfoResult.add(purchaseInfo); } + } } return purchaseCheckInfoResult; @@ -232,7 +282,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService { int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId()); String taskCode = genderTaskCode(thisMonthMaxOrder); TmTask tmTask = new TmTask(null, TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId(), - PurchaseTaskStatusEnum.TASK_IN_PROGRESS.getStatus(), + PurchaseTaskStatusEnum.TO_NOTICE.getStatus(), purchaseCheckInfo.getPurchaseCheckInfo().getCompanyId(), thisMonthMaxOrder + 1, taskCode); tmTask.setCreateTime(DateUtils.getNowDate()); tmTaskMapper.insertTmTask(tmTask); @@ -370,7 +420,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService { if (result != null) { // 执行SQL查询内层信息 - List purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(taskId, null); + List purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(taskId, null, SecurityUtils.getUserId()); // 过滤掉空数据 purchaseCheckDetails.removeIf(Objects::isNull); result.setMaterialList(purchaseCheckDetails); 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 235ed967..f6dabdd6 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 @@ -90,6 +90,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + right join ma_type_keeper mtk ON mtk.type_id = mt.type_id AND mtk.user_id = #{userId} + where pcd.task_id = #{taskId} and pcd.type_id = #{typeId} @@ -111,12 +117,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and pcd.production_time between #{startTime} and #{endTime} - - and pcd.status in - - #{item} - - + + + + + + and (mt.type_name like concat('%', #{keyWord}, '%') or mt.unit_name like concat('%', #{keyWord}, '%')