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

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.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;

View File

@ -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 -- 扫码绑定机具
*/

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.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);
/**
* 下载二维码标准箱
*/

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.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.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<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 响应对象

View File

@ -72,4 +72,6 @@ public interface PurchaseStorageMapper {
* @return
*/
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}
</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>