diff --git a/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvMAOrderController.java b/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvMAOrderController.java new file mode 100644 index 00000000..693e7ed9 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvMAOrderController.java @@ -0,0 +1,16 @@ +package com.glxp.api.admin.controller.inventory; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +/** + * 库存养护记录接口 + */ +@Slf4j +@RestController +public class InvMAOrderController { + + + + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvMAOrderDetailController.java b/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvMAOrderDetailController.java new file mode 100644 index 00000000..7addb013 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvMAOrderDetailController.java @@ -0,0 +1,16 @@ +package com.glxp.api.admin.controller.inventory; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +/** + * 库存养护记录详情接口 + */ +@Slf4j +@RestController +public class InvMAOrderDetailController { + + + + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvSubWarehouseController.java b/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvSubWarehouseController.java index badeeaf2..4649cd86 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvSubWarehouseController.java +++ b/api-admin/src/main/java/com/glxp/api/admin/controller/inventory/InvSubWarehouseController.java @@ -78,7 +78,7 @@ public class InvSubWarehouseController { AuthAdmin authAdmin = customerService.getUserBean(); if (filterInvWarehouseRequest.getFilter() == null || filterInvWarehouseRequest.getFilter() == 1 || StrUtil.isNotEmpty(filterInvWarehouseRequest.getPcode())) { - if (authAdmin.getCustomerId().equals("110")) + if (null != authAdmin.getCustomerId() && authAdmin.getCustomerId() == 110) filterInvWarehouseRequest.setUserId(authAdmin.getId().intValue()); else{ filterInvWarehouseRequest.setSpUse(true); diff --git a/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvMAOrderRequest.java b/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvMAOrderRequest.java new file mode 100644 index 00000000..b265c55a --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvMAOrderRequest.java @@ -0,0 +1,34 @@ +package com.glxp.api.admin.req.inventory; + +import com.glxp.api.admin.req.ListPageRequest; +import lombok.Data; + +/** + * 养护记录查询参数 + */ +@Data +public class FilterInvMAOrderRequest extends ListPageRequest { + + private Integer id; + + /** + * 记录ID + */ + private String orderId; + + /** + * 分库号 + */ + private String invWarehouseCode; + + /** + * 货位号 + */ + private String invSpaceCode; + + /** + * 状态 0:草稿 1:未审核 2:已完成 + */ + private Integer status; + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/res/inventory/InvMAOrderDetailResponse.java b/api-admin/src/main/java/com/glxp/api/admin/res/inventory/InvMAOrderDetailResponse.java new file mode 100644 index 00000000..539eed0f --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/res/inventory/InvMAOrderDetailResponse.java @@ -0,0 +1,17 @@ +package com.glxp.api.admin.res.inventory; + +import com.glxp.api.admin.entity.inventory.InvMaintenanceOrderDetailEntity; +import lombok.Data; + +/** + * 养护记录详情接口结果封装类 + */ +@Data +public class InvMAOrderDetailResponse extends InvMaintenanceOrderDetailEntity { + + /** + * 产品名称 + */ + private String productName; + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/res/inventory/InvMAOrderResponse.java b/api-admin/src/main/java/com/glxp/api/admin/res/inventory/InvMAOrderResponse.java new file mode 100644 index 00000000..f4a69ed4 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/res/inventory/InvMAOrderResponse.java @@ -0,0 +1,22 @@ +package com.glxp.api.admin.res.inventory; + +import com.glxp.api.admin.entity.inventory.InvMaintenanceOrderEntity; +import lombok.Data; + +/** + * 养护记录接口返回结果 + */ +@Data +public class InvMAOrderResponse extends InvMaintenanceOrderEntity { + + /** + * 分库名称 + */ + private String invWarehouseName; + + /** + * 货位名称 + */ + private String invSpaceName; + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/InvMAOrderDetailService.java b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/InvMAOrderDetailService.java new file mode 100644 index 00000000..c1f002e7 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/InvMAOrderDetailService.java @@ -0,0 +1,7 @@ +package com.glxp.api.admin.service.inventory; + +/** + * 库存养护记录详情Service + */ +public interface InvMAOrderDetailService { +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/InvMAOrderService.java b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/InvMAOrderService.java new file mode 100644 index 00000000..1701c7e6 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/InvMAOrderService.java @@ -0,0 +1,7 @@ +package com.glxp.api.admin.service.inventory; + +/** + * 库存养护记录Service + */ +public interface InvMAOrderService { +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountCodesServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountCodesServiceImpl.java index 244c929e..bd905db5 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountCodesServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountCodesServiceImpl.java @@ -101,11 +101,13 @@ public class InvCountCodesServiceImpl implements InvCountCodesService { if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) { //条码为标准条码,批次号和序列号都存在,条码重复 return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!"); - } else { + } else if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo()) || (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())))) { //批次号或序列号,其中一个字段为空,直接修改数量 InvCountCodes countCodes = codesList.get(0); countCodes.setCount(countCodes.getCount() + 1); invCountCodesDao.updateByPrimaryKey(countCodes); + } else { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!"); } } diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountOrderServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountOrderServiceImpl.java index 341f6574..d01d875a 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountOrderServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountOrderServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.glxp.api.admin.constant.Constant; @@ -189,7 +190,10 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { } else { //审核通过 //根据单据详情生成相关单据 - countOrderTransfer(invCountOrder); + log.info("单据审核通过,开始生成扫码单据"); + ThreadUtil.execAsync(() -> { + countOrderTransfer(invCountOrder); + }); } invCountOrderDao.updateByPrimaryKey(invCountOrder); return ResultVOUtils.success(); @@ -273,24 +277,44 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { codesRequest.setProductId(invCountOrderDetail.getProductId()); codesRequest.setBatchNo(invCountOrderDetail.getBatchNo()); List countCodesList = invCountCodesDao.selectCodes(codesRequest); - for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) { - if (!countCodesList.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) { - //生成码详情 - WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk()); - //判断此条码,是否有批次号和序列号 - UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntity.getOriginCode()); - if (StrUtil.isBlank(udi.getBatchNo()) || StrUtil.isBlank(udi.getSerialNo())) { - //修改码数量 - int actCount = invCountCodesService.getActCount(udi.getUdi()); - //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量 - int codeNum = invCountOrderDetail.getLossNum() / actCount; - warehouseEntity.setCount(codeNum); - warehouseEntity.setReCount(codeNum); + List invProductCodes = invProductDetailEntities.stream().map(InvProductDetailEntity::getOriginCode).collect(Collectors.toList()); + List lossCodes = CollUtil.subtractToList(invProductCodes, countCodesList); + if (CollUtil.isNotEmpty(countCodesList) && CollUtil.isEmpty(lossCodes)) { + //盘点的码不为空,但是盘点数量和库存数量不一样,比对差集结果为空,说明是同一个条码,数量不同,直接根据盘亏数量计算生成一个扫码单据的码明细 + //生成码详情 + WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntities.get(0).getCode(), invProductDetailEntities.get(0).getProductIdFk()); + //判断此条码,是否有批次号和序列号 + UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntities.get(0).getOriginCode()); + //修改码数量 + int actCount = invCountCodesService.getActCount(udi.getUdi()); + //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量 + int codeNum = invCountOrderDetail.getLossNum() / actCount; + warehouseEntity.setCount(codeNum); + warehouseEntity.setReCount(codeNum); + + //设置供应商信息 + setSupInfo(warehouseEntity); + outOrderCodes.add(warehouseEntity); + } else { + for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) { + if (!countCodesList.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) { + //生成码详情 + WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk()); + //判断此条码,是否有批次号和序列号 + UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntity.getOriginCode()); + if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())) || (StrUtil.isBlank(udi.getSerialNo()) && StrUtil.isNotBlank(udi.getBatchNo()))) { + //修改码数量 + int actCount = invCountCodesService.getActCount(udi.getUdi()); + //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量 + int codeNum = invCountOrderDetail.getLossNum() / actCount; + warehouseEntity.setCount(codeNum); + warehouseEntity.setReCount(codeNum); + } + + //设置供应商信息 + setSupInfo(warehouseEntity); + outOrderCodes.add(warehouseEntity); } - - //设置供应商信息 - setSupInfo(warehouseEntity); - outOrderCodes.add(warehouseEntity); } } } @@ -316,22 +340,41 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { codesRequest.setBatchNo(invCountOrderDetail.getBatchNo()); List countCodesList = invCountCodesDao.selectCodes(codesRequest); List invProductCodeList = invProductDetailEntities.stream().map(InvProductDetailEntity::getOriginCode).collect(Collectors.toList()); - for (String code : countCodesList) { - if (!invProductCodeList.contains(code) && !verifyCodeExist(inOrderCodes, code)) { - //生成码详情 - WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, code, invCountOrderDetail.getProductId()); - //判断此条码,是否有批次号和序列号 - UdiEntity udi = FilterUdiUtils.getUdi(code); - if (StrUtil.isBlank(udi.getBatchNo()) || StrUtil.isBlank(udi.getSerialNo())) { - //修改码数量 - int actCount = invCountCodesService.getActCount(udi.getUdi()); - //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量 - int codeNum = invCountOrderDetail.getProfitNum() / actCount; - warehouseEntity.setCount(codeNum); - warehouseEntity.setReCount(codeNum); + List profitCodes = CollUtil.subtractToList(countCodesList, invProductCodeList); //计算盘盈的条码 + if (CollUtil.isNotEmpty(invProductCodeList) && CollUtil.isEmpty(profitCodes)) { + /** + * 盘点条码不为空,且库存条码也不为空,但是计算的条码差集为空 + * 说明盘点的条码和库存的条码是相同的条码,直接根据盘盈数量计算出扫码数量,生成一个条码即可 + */ + WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, countCodesList.get(0), invCountOrderDetail.getProductId()); + //判断此条码,是否有批次号和序列号 + UdiEntity udi = FilterUdiUtils.getUdi(countCodesList.get(0)); + //修改码数量 + int actCount = invCountCodesService.getActCount(udi.getUdi()); + //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量 + int codeNum = invCountOrderDetail.getProfitNum() / actCount; + warehouseEntity.setCount(codeNum); + warehouseEntity.setReCount(codeNum); + setSupInfo(warehouseEntity); + inOrderCodes.add(warehouseEntity); + } else { + for (String code : profitCodes) { + if (!verifyCodeExist(inOrderCodes, code)) { + //生成码详情 + WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, code, invCountOrderDetail.getProductId()); + //判断此条码,是否有批次号和序列号 + UdiEntity udi = FilterUdiUtils.getUdi(code); + if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())) || (StrUtil.isBlank(udi.getSerialNo()) && StrUtil.isNotBlank(udi.getBatchNo()))) { + //修改码数量 + int actCount = invCountCodesService.getActCount(udi.getUdi()); + //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量 + int codeNum = invCountOrderDetail.getProfitNum() / actCount; + warehouseEntity.setCount(codeNum); + warehouseEntity.setReCount(codeNum); + } + setSupInfo(warehouseEntity); + inOrderCodes.add(warehouseEntity); } - setSupInfo(warehouseEntity); - inOrderCodes.add(warehouseEntity); } } } @@ -393,7 +436,7 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { if (StrUtil.isNotEmpty(supId)) { warehouseEntity.setSupId(supId); //查询供应商名称 - String name = unitMaintainDao.selectNameByErpId(supId); + String name = unitMaintainDao.selectNameByErpId(supId); warehouseEntity.setSupName(name); } } @@ -406,9 +449,10 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { * @return */ private boolean verifyCodeExist(List codes, String code) { - List codesList = codes.stream().map(WarehouseEntity::getCode).collect(Collectors.toList()); - if (codesList.contains(code)) { - return true; + for (WarehouseEntity warehouseEntity : codes) { + if (warehouseEntity.getCode().equals(code)) { + return true; + } } return false; } diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvMAOrderDetailServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvMAOrderDetailServiceImpl.java new file mode 100644 index 00000000..11c4ffc2 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvMAOrderDetailServiceImpl.java @@ -0,0 +1,22 @@ +package com.glxp.api.admin.service.inventory.impl; + +import com.glxp.api.admin.dao.inventory.InvMaintenanceOrderDetailDao; +import com.glxp.api.admin.service.inventory.InvMAOrderDetailService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class InvMAOrderDetailServiceImpl implements InvMAOrderDetailService { + + @Resource + private InvMaintenanceOrderDetailDao invMAOrderDetailDao; + + + + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvMAOrderServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvMAOrderServiceImpl.java new file mode 100644 index 00000000..d848c8ac --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvMAOrderServiceImpl.java @@ -0,0 +1,20 @@ +package com.glxp.api.admin.service.inventory.impl; + +import com.glxp.api.admin.dao.inventory.InvMaintenanceOrderDao; +import com.glxp.api.admin.service.inventory.InvMAOrderService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class InvMAOrderServiceImpl implements InvMAOrderService { + + @Resource + private InvMaintenanceOrderDao invMAOrderDao; + + +} diff --git a/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDetailDao.xml b/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDetailDao.xml index 1d570e25..4959ec2a 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDetailDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDetailDao.xml @@ -64,7 +64,7 @@ - AND updateTime = ]]> #{updateTime} + AND updateTime #{updateTime} @@ -383,7 +383,7 @@ from inv_product_detail where invStorageCode = #{invStorageCode} and invWarehouseCode = #{invWarehouseCode} - and code in + and originCode in #{item} @@ -403,7 +403,7 @@ from inv_product_detail where invStorageCode = #{invStorageCode} and invWarehouseCode = #{invWarehouseCode} - and code = #{code} + and originCode = #{code} limit 1