diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/purchase/PurchaseDto.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/purchase/PurchaseDto.java index 5f0644ff..3810fe8a 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/purchase/PurchaseDto.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/purchase/PurchaseDto.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import java.math.BigDecimal; import java.util.Date; @@ -19,6 +20,7 @@ import java.util.List; @Builder @AllArgsConstructor @NoArgsConstructor +@Accessors(chain = true) public class PurchaseDto { private Long id; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrBoxController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrBoxController.java index 723070e7..026b0d24 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrBoxController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrBoxController.java @@ -7,6 +7,7 @@ import com.bonus.common.log.annotation.SysLog; import com.bonus.common.log.enums.OperaType; import com.bonus.common.security.annotation.RequiresPermissions; import com.bonus.material.basic.domain.BmQrBoxInfo; +import com.bonus.material.basic.domain.dto.BoxBindWarehouseDto; import com.bonus.material.basic.service.BmQrBoxService; import com.bonus.material.common.annotation.PreventRepeatSubmit; import com.bonus.material.ma.domain.TypeKeeper; @@ -130,6 +131,18 @@ public class BmQrBoxController extends BaseController { return qrBoxService.getBoxBindListByCode(bmQrBoxInfo); } + /** + * APP -- 新购入库 -- 确认入库标准箱 + */ + @ApiOperation(value = "APP -- 新购入库 -- 确认入库标准箱") + @PreventRepeatSubmit + //@RequiresPermissions("basic:qrBox:edit") + @SysLog(title = "APP-二维码标准箱管理", businessType = OperaType.UPDATE, logType = 1,module = "仓储管理->APP扫码创建标准箱") + @PostMapping("/app_warehouse") + public AjaxResult appWarehouse(@RequestBody @NotNull(message = "参数不能为空") BoxBindWarehouseDto boxBindWarehouseDto) { + return qrBoxService.appWarehouse(boxBindWarehouseDto); + } + /** * APP -- 扫码绑定机具 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/dto/BoxBindWarehouseDto.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/dto/BoxBindWarehouseDto.java new file mode 100644 index 00000000..11d30763 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/dto/BoxBindWarehouseDto.java @@ -0,0 +1,38 @@ +package com.bonus.material.basic.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author : 阮世耀 + * @version : 1.0 + * @PackagePath: com.bonus.material.basic.domain.dto + * @CreateTime: 2024-12-20 15:18 + * @Description: 标准箱绑定DTO + */ +@Data +@Accessors(chain = true) +public class BoxBindWarehouseDto { + + @ApiModelProperty(value = "标准箱ID") + private Long boxId; + + @ApiModelProperty(value = "标准箱编码") + private String boxCode; + + @ApiModelProperty(value = "任务ID") + private Long taskId; + + @ApiModelProperty(value = "机具ID") + private Long maId; + + @ApiModelProperty(value = "机具编号") + private String maCode; + + @ApiModelProperty(value = "机具类型ID") + private Long maTypeId; + + @ApiModelProperty(value = "机具状态") + private String maStatus; +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/BmQrBoxService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/BmQrBoxService.java index 5aa3ff41..e4618cfa 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/BmQrBoxService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/BmQrBoxService.java @@ -2,6 +2,7 @@ package com.bonus.material.basic.service; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.material.basic.domain.BmQrBoxInfo; +import com.bonus.material.basic.domain.dto.BoxBindWarehouseDto; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -28,6 +29,12 @@ public interface BmQrBoxService { */ AjaxResult getBoxInfoBindListByCode(BmQrBoxInfo bmQrBoxInfo); + /** + * APP -- 新购入库扫码 -- 确认入库 + * @param boxBindWarehouseDto 入库信息 + */ + AjaxResult appWarehouse(BoxBindWarehouseDto boxBindWarehouseDto); + /** * 下载二维码标准箱 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java index 527e25e7..2824cf36 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java @@ -4,18 +4,24 @@ import cn.hutool.core.collection.CollectionUtil; 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.domain.purchase.PurchaseDto; import com.bonus.common.biz.enums.HttpCodeEnum; import com.bonus.common.biz.enums.MaMachineStatusEnum; +import com.bonus.common.biz.enums.PurchaseTaskStatusEnum; import com.bonus.common.biz.enums.QrBoxStatusEnum; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.basic.domain.BmQrBoxInfo; +import com.bonus.material.basic.domain.dto.BoxBindWarehouseDto; import com.bonus.material.basic.domain.vo.BoxInfoBindVo; import com.bonus.material.basic.mapper.BmQrBoxMapper; import com.bonus.material.basic.service.BmQrBoxService; import com.bonus.material.ma.domain.vo.MachineVo; import com.bonus.material.ma.mapper.MachineMapper; +import com.bonus.material.purchase.domain.vo.PurchaseVo; +import com.bonus.material.purchase.mapper.PurchaseBindMapper; +import com.bonus.material.purchase.mapper.PurchaseStorageMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -25,6 +31,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; +import java.math.BigDecimal; import java.util.*; /** @@ -41,6 +48,12 @@ public class BmQrBoxServiceImpl implements BmQrBoxService { @Resource private MachineMapper machineMapper; + @Resource + private PurchaseBindMapper purchaseBindMapper; + + @Resource + private PurchaseStorageMapper purchaseStorageMapper; + /** * 查询二维码标准箱管理列表 */ @@ -96,13 +109,73 @@ public class BmQrBoxServiceImpl implements BmQrBoxService { boxBindList.removeIf(Objects::isNull); boxInfoBindVo.setBindMaTotal(boxBindList.size()); boxBindList.removeIf(item -> item.getMaStatus() == null); - boxBindList.removeIf(item -> !item.getMaStatus().equals(MaMachineStatusEnum.IN_STORE.getStatus().toString()) && - !item.getMaStatus().equals(MaMachineStatusEnum.NEW_PURCHASE.getStatus().toString())); - boxBindList.removeIf(item -> item.getMaTypeId() == null || !Objects.equals(item.getMaTypeId(), bmQrBoxInfo.getMaTypeId())); + boxBindList.removeIf(item -> !item.getMaStatus().equals(MaMachineStatusEnum.NEW_PURCHASE.getStatus().toString())); + if (Objects.nonNull(bmQrBoxInfo.getMaTypeId())) { + boxBindList.removeIf(item -> item.getMaTypeId() == null || !Objects.equals(item.getMaTypeId(), bmQrBoxInfo.getMaTypeId())); + } boxInfoBindVo.setSuccessMaTotal(boxBindList.size()); return AjaxResult.success(boxInfoBindVo); } + /** + * APP -- 新购入库扫码 -- 确认入库 + * + * @param boxBindWarehouseDto 入库信息 + */ + @Override + public AjaxResult appWarehouse(BoxBindWarehouseDto boxBindWarehouseDto) { + // -------------- 标准箱状态校验 ------------------------- + if (boxBindWarehouseDto.getBoxCode() == null) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "请输入标准箱编码"); + } + if (boxBindWarehouseDto.getTaskId() == null || boxBindWarehouseDto.getMaTypeId() == null) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "请输入任务ID和入库的物资类型ID"); + } + List boxInfos = bmQrBoxMapper.findBoxInfoByKey(new BmQrBoxInfo().setBoxCode(boxBindWarehouseDto.getBoxCode())); + boxInfos.removeIf(Objects::isNull); + if (boxInfos.isEmpty()) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "标准箱编码不存在"); + } else if (boxInfos.size() == 1) { + if (boxInfos.get(0).getBoxId() == null || boxInfos.get(0).getBoxCode() == null) { + boxBindWarehouseDto.setBoxId(boxInfos.get(0).getBoxId()); + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "标准箱信息异常,请联系运维人员处理"); + } + } else { + return AjaxResult.warn("该二维码已绑定多个标准箱,请联系运维人员处理"); + } + + // -------------- 标准箱绑定的机具明细校验 ------------------------- + List boxBindList = bmQrBoxMapper.getBoxBindList(boxBindWarehouseDto.getBoxId()); + boxBindList.removeIf(Objects::isNull); + boxBindList.removeIf(item -> item.getMaStatus() == null); + boxBindList.removeIf(item -> !item.getMaStatus().equals(MaMachineStatusEnum.NEW_PURCHASE.getStatus().toString())); + boxBindList.removeIf(item -> item.getMaTypeId() == null || !Objects.equals(item.getMaTypeId(), boxBindWarehouseDto.getMaTypeId())); + + + // ----------------- 进行入库操作 ------------------------------- + Long purchaseDetailId = purchaseStorageMapper.selectIdByTaskId(boxBindWarehouseDto.getTaskId(), boxBindWarehouseDto.getMaTypeId()); + if (purchaseDetailId == null || purchaseDetailId == 0) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "新购任务不存在此物资类型,请确认录入是否正确"); + } + // 更新入库数量 + purchaseStorageMapper.updateNum(String.valueOf(purchaseDetailId), BigDecimal.valueOf(boxBindList.size())); + // 更新物资类型库存数量 + purchaseStorageMapper.updateStorageNum(BigDecimal.valueOf(boxBindList.size()), Math.toIntExact(boxBindWarehouseDto.getMaTypeId())); + // 更新物资设备状态 + boxBindList.forEach(item -> { + item.setMaStatus(MaMachineStatusEnum.IN_STORE.getStatus().toString()); + purchaseStorageMapper.updateMachineByCode(new PurchaseDto() + .setMaCode(item.getMaCode()) + .setTypeId(Math.toIntExact(boxBindWarehouseDto.getMaTypeId())) + ); + }); + // 更新新购验收明细状态 + purchaseStorageMapper.updateStatusById(PurchaseTaskStatusEnum.IN_STORE.getStatus(), Math.toIntExact(purchaseDetailId)); + + // ---------------- 返回前端 ------------------------------------- + return AjaxResult.success("入库成功"); + } + /** * 下载二维码标准箱 * @param response 响应对象 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseStorageMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseStorageMapper.java index f360d197..f20fb1a8 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseStorageMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseStorageMapper.java @@ -72,4 +72,6 @@ public interface PurchaseStorageMapper { * @return */ int updateMachineByCode(PurchaseDto dto); + + Long selectIdByTaskId(@Param("taskId") Long taskId, @Param("typeId") Long typeId); } diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseStorageMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseStorageMapper.xml index 4874b789..74e76281 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseStorageMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseStorageMapper.xml @@ -144,4 +144,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where pcd.task_id = #{taskId} + \ No newline at end of file