二维码标准箱--扫码入库机具

This commit is contained in:
syruan 2024-12-20 16:44:12 +08:00
parent fbf72c2f89
commit 5dc324fa62
7 changed files with 141 additions and 3 deletions

View File

@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@ -19,6 +20,7 @@ import java.util.List;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Accessors(chain = true)
public class PurchaseDto { public class PurchaseDto {
private Long id; private Long id;

View File

@ -7,6 +7,7 @@ import com.bonus.common.log.annotation.SysLog;
import com.bonus.common.log.enums.OperaType; import com.bonus.common.log.enums.OperaType;
import com.bonus.common.security.annotation.RequiresPermissions; import com.bonus.common.security.annotation.RequiresPermissions;
import com.bonus.material.basic.domain.BmQrBoxInfo; 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.basic.service.BmQrBoxService;
import com.bonus.material.common.annotation.PreventRepeatSubmit; import com.bonus.material.common.annotation.PreventRepeatSubmit;
import com.bonus.material.ma.domain.TypeKeeper; import com.bonus.material.ma.domain.TypeKeeper;
@ -130,6 +131,18 @@ public class BmQrBoxController extends BaseController {
return qrBoxService.getBoxBindListByCode(bmQrBoxInfo); 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 -- 扫码绑定机具 * APP -- 扫码绑定机具
*/ */

View File

@ -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;
}

View File

@ -2,6 +2,7 @@ package com.bonus.material.basic.service;
import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.basic.domain.BmQrBoxInfo; import com.bonus.material.basic.domain.BmQrBoxInfo;
import com.bonus.material.basic.domain.dto.BoxBindWarehouseDto;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
@ -28,6 +29,12 @@ public interface BmQrBoxService {
*/ */
AjaxResult getBoxInfoBindListByCode(BmQrBoxInfo bmQrBoxInfo); AjaxResult getBoxInfoBindListByCode(BmQrBoxInfo bmQrBoxInfo);
/**
* APP -- 新购入库扫码 -- 确认入库
* @param boxBindWarehouseDto 入库信息
*/
AjaxResult appWarehouse(BoxBindWarehouseDto boxBindWarehouseDto);
/** /**
* 下载二维码标准箱 * 下载二维码标准箱
*/ */

View File

@ -4,18 +4,24 @@ import cn.hutool.core.collection.CollectionUtil;
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.domain.purchase.PurchaseDto;
import com.bonus.common.biz.enums.HttpCodeEnum; import com.bonus.common.biz.enums.HttpCodeEnum;
import com.bonus.common.biz.enums.MaMachineStatusEnum; 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.biz.enums.QrBoxStatusEnum;
import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.DateUtils;
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.domain.BmQrBoxInfo; 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.domain.vo.BoxInfoBindVo;
import com.bonus.material.basic.mapper.BmQrBoxMapper; import com.bonus.material.basic.mapper.BmQrBoxMapper;
import com.bonus.material.basic.service.BmQrBoxService; import com.bonus.material.basic.service.BmQrBoxService;
import com.bonus.material.ma.domain.vo.MachineVo; import com.bonus.material.ma.domain.vo.MachineVo;
import com.bonus.material.ma.mapper.MachineMapper; 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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -25,6 +31,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
/** /**
@ -41,6 +48,12 @@ public class BmQrBoxServiceImpl implements BmQrBoxService {
@Resource @Resource
private MachineMapper machineMapper; private MachineMapper machineMapper;
@Resource
private PurchaseBindMapper purchaseBindMapper;
@Resource
private PurchaseStorageMapper purchaseStorageMapper;
/** /**
* 查询二维码标准箱管理列表 * 查询二维码标准箱管理列表
*/ */
@ -96,13 +109,73 @@ public class BmQrBoxServiceImpl implements BmQrBoxService {
boxBindList.removeIf(Objects::isNull); boxBindList.removeIf(Objects::isNull);
boxInfoBindVo.setBindMaTotal(boxBindList.size()); boxInfoBindVo.setBindMaTotal(boxBindList.size());
boxBindList.removeIf(item -> item.getMaStatus() == null); boxBindList.removeIf(item -> item.getMaStatus() == null);
boxBindList.removeIf(item -> !item.getMaStatus().equals(MaMachineStatusEnum.IN_STORE.getStatus().toString()) && boxBindList.removeIf(item -> !item.getMaStatus().equals(MaMachineStatusEnum.NEW_PURCHASE.getStatus().toString()));
!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())); boxBindList.removeIf(item -> item.getMaTypeId() == null || !Objects.equals(item.getMaTypeId(), bmQrBoxInfo.getMaTypeId()));
}
boxInfoBindVo.setSuccessMaTotal(boxBindList.size()); boxInfoBindVo.setSuccessMaTotal(boxBindList.size());
return AjaxResult.success(boxInfoBindVo); 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<BmQrBoxInfo> 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<BmQrBoxInfo> 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 响应对象 * @param response 响应对象

View File

@ -72,4 +72,6 @@ public interface PurchaseStorageMapper {
* @return * @return
*/ */
int updateMachineByCode(PurchaseDto dto); int updateMachineByCode(PurchaseDto dto);
Long selectIdByTaskId(@Param("taskId") Long taskId, @Param("typeId") Long typeId);
} }

View File

@ -144,4 +144,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where pcd.task_id = #{taskId} where pcd.task_id = #{taskId}
</select> </select>
<select id="selectIdByTaskId" resultType="java.lang.Long">
SELECT id FROM purchase_check_details WHERE task_id = #{taskId} and type_id = #{typeId} limit 1
</select>
</mapper> </mapper>