1.调整盘点转单功能

feature-order-fix
x_z 2 years ago
parent f2b7d009da
commit 29a33df20e

@ -81,4 +81,12 @@ public interface InvCountCodesDao {
* @return
*/
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
*/
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;
/**
* 0 1 2
*/
private Integer status;
}

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

@ -75,27 +75,31 @@ public class InvCountCodesServiceImpl implements InvCountCodesService {
public BaseResponse addCode(InvCountCodes invCountCodes) {
//解析条码
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
if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) {
Long count = invCountCodesDao.selectCountByCodeAndOrderId(invCountCodes.getCode(), invCountCodes.getOrderIdFk());
if (count > 0) {
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()));
invCountCodes.setProductId(invCountOrderDetail.getProductId());
invCountCodes.setBatchNo(udi.getBatchNo());
invCountOrderDetailDao.updateByPrimaryKey(invCountOrderDetail);
invCountCodesDao.insert(invCountCodes);
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.WarehouseEntity;
import com.glxp.api.admin.entity.inventory.*;
import com.glxp.api.admin.req.inventory.FilterInvCountCodesRequest;
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.req.inventory.*;
import com.glxp.api.admin.res.inventory.InvCountOrderResponse;
import com.glxp.api.admin.service.auth.CustomerService;
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())) {
//生成单据号
String orderId = gennerOrderUtils.createStOrderNo(new OrderNoTypeBean(Constant.COUNT_ORDER, "yyyyMMdd"));
invCountOrder.setOrderId(orderId); //盘点单号
//盘点单号
invCountOrder.setOrderId(orderId);
AuthAdmin user = customerService.getUserBean();
invCountOrder.setCreateUser(user.getUserName());
invCountOrder.setCreateTime(DateUtil.date().toString(DatePattern.NORM_DATETIME_PATTERN));
@ -158,12 +157,15 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
int diff = invCountOrderDetail.getInvNum() - invCountOrderDetail.getCountNum();
if (diff > 0) {
invCountOrderDetail.setLossNum(Math.abs(diff));
invCountOrderDetail.setStatus(0); //盘亏
//盘亏
invCountOrderDetail.setStatus(0);
} else if (diff < 0) {
invCountOrderDetail.setProfitNum(Math.abs(diff));
invCountOrderDetail.setStatus(1); //盘盈
//盘盈
invCountOrderDetail.setStatus(1);
} else {
invCountOrderDetail.setStatus(2); //平
//平衡
invCountOrderDetail.setStatus(2);
}
//查询此产品的条码列表,判断此产品在库存中是多还是少
@ -244,56 +246,68 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
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> outOrderCodes = new ArrayList<>();
//查询库存详情表此产品的条码信息
for (String productId : countProductIds) {
FilterInvCountOrderDetailRequest detailRequest = new FilterInvCountOrderDetailRequest();
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();
invProductDetailRequest.setProductIdFk(productId);
invProductDetailRequest.setInvStorageCode(invCountOrder.getInvStorageCode());
invProductDetailRequest.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
if (invCountOrder.getCountType() == 1) {
//按照货位盘点,查询库存详情添加货位条件
invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvSpaceCode());
}
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest);
if (CollUtil.isEmpty(invProductDetailEntities)) {
log.info("产品:" + productId + " 非当前仓库产品,添加到盘点入库单条码中");
//将此条码添加到入库单据条码中
codesList.forEach(invCountCodes -> {
if (invCountCodes.getProductId().equals(productId) && !verifyCodeExist(outOrderCodes, invCountCodes.getCode())) {
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId());
int count = invCountCodesService.getActCount(warehouseEntity.getNameCode());
warehouseEntity.setCount(count);
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())) {
for (InvCountOrderDetail invCountOrderDetail : detailList) {
//查询库存详情
invProductDetailRequest.setProductIdFk(invCountOrderDetail.getProductId());
invProductDetailRequest.setBatchNo(invCountOrderDetail.getBatchNo());
//库存早于或等于盘点时间的库存数据,锁库存
invProductDetailRequest.setUpdateTime(invCountOrder.getCreateTime());
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest);
//查询盘点码明细
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
codesRequest.setProductId(invCountOrderDetail.getProductId());
codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
List<String> 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());
int count = invCountCodesService.getActCount(warehouseEntity.getNameCode());
warehouseEntity.setCount(count);
warehouseEntity.setReCount(count);
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);
if (CollUtil.isNotEmpty(inOrderCodes)) {
@ -369,6 +383,8 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
warehouseEntity.setExpireDate(udi.getExpireDate());
warehouseEntity.setSerialNo(udi.getSerialNo());
warehouseEntity.setNameCode(udi.getUdi());
warehouseEntity.setCount(1);
warehouseEntity.setReCount(1);
return warehouseEntity;
}

@ -216,4 +216,19 @@
where orderIdFk = #{orderIdFk}
and productId = #{productId}
</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>

@ -356,4 +356,17 @@
status = null
where orderIdFk = #{orderId}
</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>

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

Loading…
Cancel
Save