1.调整盘点转单功能

wms_pzh
x_z 3 years ago
parent 2590935346
commit 15fc169e2d

@ -81,4 +81,12 @@ public interface InvCountCodesDao {
* @return * @return
*/ */
List<InvCountCodes> selectByOrderIdAndProductId(@Param("orderIdFk") String orderIdFk, @Param("productId") String productId); List<InvCountCodes> selectByOrderIdAndProductId(@Param("orderIdFk") String orderIdFk, @Param("productId") String productId);
/**
*
*
* @param codesRequest
* @return
*/
List<String> selectCodes(FilterInvCountCodesRequest codesRequest);
} }

@ -89,4 +89,12 @@ public interface InvCountOrderDetailDao {
* @param orderId * @param orderId
*/ */
void resetCountFiledValue(@Param("orderId") String orderId); void resetCountFiledValue(@Param("orderId") String orderId);
/**
*
*
* @param detailRequest
* @return
*/
List<InvCountOrderDetail> selectDetailList(FilterInvCountOrderDetailRequest detailRequest);
} }

@ -16,4 +16,9 @@ public class FilterInvCountOrderDetailRequest extends ListPageRequest {
*/ */
private String orderIdFk; private String orderIdFk;
/**
* 0 1 2
*/
private Integer status;
} }

@ -32,6 +32,9 @@ public class FilterInvProductDetailRequest extends ListPageRequest {
private String invSpaceCode; private String invSpaceCode;
private List<String> invCodes; private List<String> invCodes;
//更新时间
private String updateTime;
/** /**
* ID * ID
*/ */

@ -75,27 +75,31 @@ public class InvCountCodesServiceImpl implements InvCountCodesService {
public BaseResponse addCode(InvCountCodes invCountCodes) { public BaseResponse addCode(InvCountCodes invCountCodes) {
//解析条码 //解析条码
UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode()); UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode());
//查询此条码是否重复 //查询此条码是否重复
//查询单据详情,是否包含此产品
InvCountOrderDetail invCountOrderDetail = invCountOrderDetailDao.selectOrderDetail(invCountCodes.getOrderIdFk(), udi.getUdi(), udi.getBatchNo(), udi.getProduceDate(), udi.getExpireDate());
if (null == invCountOrderDetail) {
return ResultVOUtils.error(ResultEnum.DATA_NOT, "当前仓库或货位不存在此产品");
}
//判断此产品是否有批次号如果没有批次号则直接在单据详情的盘点数量上加1 //判断此产品是否有批次号如果没有批次号则直接在单据详情的盘点数量上加1
if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) { if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) {
Long count = invCountCodesDao.selectCountByCodeAndOrderId(invCountCodes.getCode(), invCountCodes.getOrderIdFk()); Long count = invCountCodesDao.selectCountByCodeAndOrderId(invCountCodes.getCode(), invCountCodes.getOrderIdFk());
if (count > 0) { if (count > 0) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!"); return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!");
} else {
//新增条码
invCountCodes.setProductId(invCountOrderDetail.getProductId());
invCountCodes.setBatchNo(udi.getBatchNo());
invCountCodesDao.insert(invCountCodes);
} }
} }
//修改码明细
//查询单据详情,单据详情添加
InvCountOrderDetail invCountOrderDetail = invCountOrderDetailDao.selectOrderDetail(invCountCodes.getOrderIdFk(), udi.getUdi(), udi.getBatchNo(), udi.getProduceDate(),udi.getExpireDate());
if (null == invCountOrderDetail) {
return ResultVOUtils.error(ResultEnum.DATA_NOT, "当前仓库或货位不存在此产品");
}
invCountOrderDetail.setCountNum(invCountOrderDetail.getCountNum() + getActCount(udi.getUdi())); invCountOrderDetail.setCountNum(invCountOrderDetail.getCountNum() + getActCount(udi.getUdi()));
invCountCodes.setProductId(invCountOrderDetail.getProductId());
invCountCodes.setBatchNo(udi.getBatchNo());
invCountOrderDetailDao.updateByPrimaryKey(invCountOrderDetail); invCountOrderDetailDao.updateByPrimaryKey(invCountOrderDetail);
invCountCodesDao.insert(invCountCodes);
return ResultVOUtils.success(); return ResultVOUtils.success();
} }

@ -22,10 +22,7 @@ import com.glxp.api.admin.entity.basic.UnitMaintainEntity;
import com.glxp.api.admin.entity.inout.OrderEntity; import com.glxp.api.admin.entity.inout.OrderEntity;
import com.glxp.api.admin.entity.inout.WarehouseEntity; import com.glxp.api.admin.entity.inout.WarehouseEntity;
import com.glxp.api.admin.entity.inventory.*; import com.glxp.api.admin.entity.inventory.*;
import com.glxp.api.admin.req.inventory.FilterInvCountCodesRequest; import com.glxp.api.admin.req.inventory.*;
import com.glxp.api.admin.req.inventory.FilterInvCountOrderRequest;
import com.glxp.api.admin.req.inventory.FilterInvCountOrderSaveRequest;
import com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest;
import com.glxp.api.admin.res.inventory.InvCountOrderResponse; import com.glxp.api.admin.res.inventory.InvCountOrderResponse;
import com.glxp.api.admin.service.auth.CustomerService; import com.glxp.api.admin.service.auth.CustomerService;
import com.glxp.api.admin.service.inventory.InvCountCodesService; import com.glxp.api.admin.service.inventory.InvCountCodesService;
@ -110,12 +107,14 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
} }
//封装相关数据 //封装相关数据
invCountOrder.setStatus(0); //未提交 //未提交
invCountOrder.setStatus(0);
if (StrUtil.isBlank(invCountOrder.getOrderId())) { if (StrUtil.isBlank(invCountOrder.getOrderId())) {
//生成单据号 //生成单据号
String orderId = gennerOrderUtils.createStOrderNo(new OrderNoTypeBean(Constant.COUNT_ORDER, "yyyyMMdd")); String orderId = gennerOrderUtils.createStOrderNo(new OrderNoTypeBean(Constant.COUNT_ORDER, "yyyyMMdd"));
invCountOrder.setOrderId(orderId); //盘点单号 //盘点单号
invCountOrder.setOrderId(orderId);
AuthAdmin user = customerService.getUserBean(); AuthAdmin user = customerService.getUserBean();
invCountOrder.setCreateUser(user.getUserName()); invCountOrder.setCreateUser(user.getUserName());
invCountOrder.setCreateTime(DateUtil.date().toString(DatePattern.NORM_DATETIME_PATTERN)); invCountOrder.setCreateTime(DateUtil.date().toString(DatePattern.NORM_DATETIME_PATTERN));
@ -158,12 +157,15 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
int diff = invCountOrderDetail.getInvNum() - invCountOrderDetail.getCountNum(); int diff = invCountOrderDetail.getInvNum() - invCountOrderDetail.getCountNum();
if (diff > 0) { if (diff > 0) {
invCountOrderDetail.setLossNum(Math.abs(diff)); invCountOrderDetail.setLossNum(Math.abs(diff));
invCountOrderDetail.setStatus(0); //盘亏 //盘亏
invCountOrderDetail.setStatus(0);
} else if (diff < 0) { } else if (diff < 0) {
invCountOrderDetail.setProfitNum(Math.abs(diff)); invCountOrderDetail.setProfitNum(Math.abs(diff));
invCountOrderDetail.setStatus(1); //盘盈 //盘盈
invCountOrderDetail.setStatus(1);
} else { } else {
invCountOrderDetail.setStatus(2); //平 //平衡
invCountOrderDetail.setStatus(2);
} }
//查询此产品的条码列表,判断此产品在库存中是多还是少 //查询此产品的条码列表,判断此产品在库存中是多还是少
@ -244,56 +246,68 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
return; return;
} }
//根据盘点单据号,查询此盘点单的条码信息 //出入库码明细列表
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
List<InvCountCodes> codesList = invCountCodesDao.filterList(codesRequest);
List<String> countProductIds = codesList.stream().map(InvCountCodes::getProductId).collect(Collectors.toList());
//出入库单据条码
List<WarehouseEntity> inOrderCodes = new ArrayList<>(); List<WarehouseEntity> inOrderCodes = new ArrayList<>();
List<WarehouseEntity> outOrderCodes = new ArrayList<>(); List<WarehouseEntity> outOrderCodes = new ArrayList<>();
//查询库存详情表此产品的条码信息 FilterInvCountOrderDetailRequest detailRequest = new FilterInvCountOrderDetailRequest();
for (String productId : countProductIds) { detailRequest.setOrderIdFk(invCountOrder.getOrderId());
//查询亏损单据详情
detailRequest.setStatus(0);
List<InvCountOrderDetail> detailList = invCountOrderDetailDao.selectDetailList(detailRequest);
if (CollUtil.isNotEmpty(detailList)) {
log.info("开始生成盘亏单据码明细");
log.info("查询盘亏产品码详情");
FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest(); FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest();
invProductDetailRequest.setProductIdFk(productId);
invProductDetailRequest.setInvStorageCode(invCountOrder.getInvStorageCode()); invProductDetailRequest.setInvStorageCode(invCountOrder.getInvStorageCode());
invProductDetailRequest.setInvWarehouseCode(invCountOrder.getInvWarehouseCode()); invProductDetailRequest.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
if (invCountOrder.getCountType() == 1) { if (invCountOrder.getCountType() == 1) {
//按照货位盘点,查询库存详情添加货位条件 //按照货位盘点,查询库存详情添加货位条件
invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvSpaceCode()); invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvSpaceCode());
} }
for (InvCountOrderDetail invCountOrderDetail : detailList) {
//查询库存详情
invProductDetailRequest.setProductIdFk(invCountOrderDetail.getProductId());
invProductDetailRequest.setBatchNo(invCountOrderDetail.getBatchNo());
//库存早于或等于盘点时间的库存数据,锁库存
invProductDetailRequest.setUpdateTime(invCountOrder.getCreateTime());
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest); List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest);
if (CollUtil.isEmpty(invProductDetailEntities)) { //查询盘点码明细
log.info("产品:" + productId + " 非当前仓库产品,添加到盘点入库单条码中"); FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
//将此条码添加到入库单据条码中 codesRequest.setOrderIdFk(invCountOrder.getOrderId());
codesList.forEach(invCountCodes -> { codesRequest.setProductId(invCountOrderDetail.getProductId());
if (invCountCodes.getProductId().equals(productId) && !verifyCodeExist(outOrderCodes, invCountCodes.getCode())) { codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId()); List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest);
int count = invCountCodesService.getActCount(warehouseEntity.getNameCode()); for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) {
warehouseEntity.setCount(count); if (!countCodesList.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) {
warehouseEntity.setReCount(count);
inOrderCodes.add(warehouseEntity);
}
});
} else {
//库存中存在此产品,筛选出盘点中不存在的条码,添加到盘点出库条码中
List<String> countCodes = codesList.stream().map(InvCountCodes::getCode).collect(Collectors.toList());
invProductDetailEntities.forEach(invProductDetailEntity -> {
if (!countCodes.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) {
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk()); WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk());
int count = invCountCodesService.getActCount(warehouseEntity.getNameCode());
warehouseEntity.setCount(count);
warehouseEntity.setReCount(count);
outOrderCodes.add(warehouseEntity); outOrderCodes.add(warehouseEntity);
} }
});
} }
} }
log.info("盘亏单据码明细生成完毕");
}
//查询盘盈的条码明细
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
//码状态标记为多码的数据
codesRequest.setStatus(1);
List<InvCountCodes> invCountCodesList = invCountCodesDao.filterList(codesRequest);
if (CollUtil.isNotEmpty(invCountCodesList)) {
log.info("开始生成盘盈单据码明细");
for (InvCountCodes invCountCodes : invCountCodesList) {
if (!verifyCodeExist(inOrderCodes, invCountCodes.getCode())) {
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId());
inOrderCodes.add(warehouseEntity);
}
}
log.info("盘盈单据码明细生成完毕");
}
InvCountSettingEntity invCountSettingEntity = list.get(0); InvCountSettingEntity invCountSettingEntity = list.get(0);
if (CollUtil.isNotEmpty(inOrderCodes)) { if (CollUtil.isNotEmpty(inOrderCodes)) {
@ -369,6 +383,8 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
warehouseEntity.setExpireDate(udi.getExpireDate()); warehouseEntity.setExpireDate(udi.getExpireDate());
warehouseEntity.setSerialNo(udi.getSerialNo()); warehouseEntity.setSerialNo(udi.getSerialNo());
warehouseEntity.setNameCode(udi.getUdi()); warehouseEntity.setNameCode(udi.getUdi());
warehouseEntity.setCount(1);
warehouseEntity.setReCount(1);
return warehouseEntity; return warehouseEntity;
} }

@ -216,4 +216,19 @@
where orderIdFk = #{orderIdFk} where orderIdFk = #{orderIdFk}
and productId = #{productId} and productId = #{productId}
</select> </select>
<select id="selectCodes" resultType="java.lang.String">
select code from inv_count_codes
<where>
<if test="orderIdFk != null and orderIdFk != ''">
AND orderIdFk = #{orderIdFk}
</if>
<if test="productId != null and productId != ''">
AND productId = #{productId}
</if>
<if test="batchNo != null and batchNo != ''">
AND batchNo = #{batchNo}
</if>
</where>
</select>
</mapper> </mapper>

@ -356,4 +356,17 @@
status = null status = null
where orderIdFk = #{orderId} where orderIdFk = #{orderId}
</update> </update>
<select id="selectDetailList" resultMap="BaseResultMap">
select <include refid="Base_Column_List" />
from inv_count_order_detail
<where>
<if test="orderIdFk != null and orderIdFk != ''">
AND orderIdFk = #{orderIdFk}
</if>
<if test="status != null">
AND status = #{status}
</if>
</where>
</select>
</mapper> </mapper>

@ -63,6 +63,9 @@
#{item} #{item}
</foreach> </foreach>
</if> </if>
<if test="updateTime != null and updateTime != ''">
AND updateTime <![CDATA[ >= ]]> #{updateTime}
</if>
</where> </where>
</select> </select>
<select id="filterJoinInvProduct" parameterType="com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest" <select id="filterJoinInvProduct" parameterType="com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest"

Loading…
Cancel
Save