1.修复盘点转单问题

feature-order-fix
x_z 3 years ago
parent 76ceab7a45
commit 425752bfd9

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

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

@ -78,7 +78,7 @@ public class InvSubWarehouseController {
AuthAdmin authAdmin = customerService.getUserBean(); AuthAdmin authAdmin = customerService.getUserBean();
if (filterInvWarehouseRequest.getFilter() == null || filterInvWarehouseRequest.getFilter() == 1 || StrUtil.isNotEmpty(filterInvWarehouseRequest.getPcode())) { 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()); filterInvWarehouseRequest.setUserId(authAdmin.getId().intValue());
else{ else{
filterInvWarehouseRequest.setSpUse(true); filterInvWarehouseRequest.setSpUse(true);

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

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

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

@ -0,0 +1,7 @@
package com.glxp.api.admin.service.inventory;
/**
* Service
*/
public interface InvMAOrderDetailService {
}

@ -0,0 +1,7 @@
package com.glxp.api.admin.service.inventory;
/**
* Service
*/
public interface InvMAOrderService {
}

@ -101,11 +101,13 @@ public class InvCountCodesServiceImpl implements InvCountCodesService {
if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) { if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) {
//条码为标准条码,批次号和序列号都存在,条码重复 //条码为标准条码,批次号和序列号都存在,条码重复
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!"); 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); InvCountCodes countCodes = codesList.get(0);
countCodes.setCount(countCodes.getCount() + 1); countCodes.setCount(countCodes.getCount() + 1);
invCountCodesDao.updateByPrimaryKey(countCodes); invCountCodesDao.updateByPrimaryKey(countCodes);
} else {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!");
} }
} }

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.glxp.api.admin.constant.Constant; import com.glxp.api.admin.constant.Constant;
@ -189,7 +190,10 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
} else { } else {
//审核通过 //审核通过
//根据单据详情生成相关单据 //根据单据详情生成相关单据
countOrderTransfer(invCountOrder); log.info("单据审核通过,开始生成扫码单据");
ThreadUtil.execAsync(() -> {
countOrderTransfer(invCountOrder);
});
} }
invCountOrderDao.updateByPrimaryKey(invCountOrder); invCountOrderDao.updateByPrimaryKey(invCountOrder);
return ResultVOUtils.success(); return ResultVOUtils.success();
@ -273,24 +277,44 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
codesRequest.setProductId(invCountOrderDetail.getProductId()); codesRequest.setProductId(invCountOrderDetail.getProductId());
codesRequest.setBatchNo(invCountOrderDetail.getBatchNo()); codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest); List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest);
for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) { List<String> invProductCodes = invProductDetailEntities.stream().map(InvProductDetailEntity::getOriginCode).collect(Collectors.toList());
if (!countCodesList.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) { List<String> lossCodes = CollUtil.subtractToList(invProductCodes, countCodesList);
//生成码详情 if (CollUtil.isNotEmpty(countCodesList) && CollUtil.isEmpty(lossCodes)) {
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk()); //盘点的码不为空,但是盘点数量和库存数量不一样,比对差集结果为空,说明是同一个条码,数量不同,直接根据盘亏数量计算生成一个扫码单据的码明细
//判断此条码,是否有批次号和序列号 //生成码详情
UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntity.getOriginCode()); WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntities.get(0).getCode(), invProductDetailEntities.get(0).getProductIdFk());
if (StrUtil.isBlank(udi.getBatchNo()) || StrUtil.isBlank(udi.getSerialNo())) { //判断此条码,是否有批次号和序列号
//修改码数量 UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntities.get(0).getOriginCode());
int actCount = invCountCodesService.getActCount(udi.getUdi()); //修改码数量
//使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量 int actCount = invCountCodesService.getActCount(udi.getUdi());
int codeNum = invCountOrderDetail.getLossNum() / actCount; //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量
warehouseEntity.setCount(codeNum); int codeNum = invCountOrderDetail.getLossNum() / actCount;
warehouseEntity.setReCount(codeNum); 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()); codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest); List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest);
List<String> invProductCodeList = invProductDetailEntities.stream().map(InvProductDetailEntity::getOriginCode).collect(Collectors.toList()); List<String> invProductCodeList = invProductDetailEntities.stream().map(InvProductDetailEntity::getOriginCode).collect(Collectors.toList());
for (String code : countCodesList) { List<String> profitCodes = CollUtil.subtractToList(countCodesList, invProductCodeList); //计算盘盈的条码
if (!invProductCodeList.contains(code) && !verifyCodeExist(inOrderCodes, code)) { if (CollUtil.isNotEmpty(invProductCodeList) && CollUtil.isEmpty(profitCodes)) {
//生成码详情 /**
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, code, invCountOrderDetail.getProductId()); *
//判断此条码,是否有批次号和序列号 *
UdiEntity udi = FilterUdiUtils.getUdi(code); */
if (StrUtil.isBlank(udi.getBatchNo()) || StrUtil.isBlank(udi.getSerialNo())) { WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, countCodesList.get(0), invCountOrderDetail.getProductId());
//修改码数量 //判断此条码,是否有批次号和序列号
int actCount = invCountCodesService.getActCount(udi.getUdi()); UdiEntity udi = FilterUdiUtils.getUdi(countCodesList.get(0));
//使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量 //修改码数量
int codeNum = invCountOrderDetail.getProfitNum() / actCount; int actCount = invCountCodesService.getActCount(udi.getUdi());
warehouseEntity.setCount(codeNum); //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量
warehouseEntity.setReCount(codeNum); 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)) { if (StrUtil.isNotEmpty(supId)) {
warehouseEntity.setSupId(supId); warehouseEntity.setSupId(supId);
//查询供应商名称 //查询供应商名称
String name = unitMaintainDao.selectNameByErpId(supId); String name = unitMaintainDao.selectNameByErpId(supId);
warehouseEntity.setSupName(name); warehouseEntity.setSupName(name);
} }
} }
@ -406,9 +449,10 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
* @return * @return
*/ */
private boolean verifyCodeExist(List<WarehouseEntity> codes, String code) { private boolean verifyCodeExist(List<WarehouseEntity> codes, String code) {
List<String> codesList = codes.stream().map(WarehouseEntity::getCode).collect(Collectors.toList()); for (WarehouseEntity warehouseEntity : codes) {
if (codesList.contains(code)) { if (warehouseEntity.getCode().equals(code)) {
return true; return true;
}
} }
return false; return false;
} }

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

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

@ -64,7 +64,7 @@
</foreach> </foreach>
</if> </if>
<if test="updateTime != null and updateTime != ''"> <if test="updateTime != null and updateTime != ''">
AND updateTime <![CDATA[ >= ]]> #{updateTime} AND updateTime <![CDATA[ <= ]]> #{updateTime}
</if> </if>
</where> </where>
</select> </select>
@ -383,7 +383,7 @@
from inv_product_detail from inv_product_detail
where invStorageCode = #{invStorageCode} where invStorageCode = #{invStorageCode}
and invWarehouseCode = #{invWarehouseCode} and invWarehouseCode = #{invWarehouseCode}
and code in and originCode in
<foreach collection="codeArray" index="index" item="item" separator="," open="(" close=")"> <foreach collection="codeArray" index="index" item="item" separator="," open="(" close=")">
#{item} #{item}
</foreach> </foreach>
@ -403,7 +403,7 @@
from inv_product_detail from inv_product_detail
where invStorageCode = #{invStorageCode} where invStorageCode = #{invStorageCode}
and invWarehouseCode = #{invWarehouseCode} and invWarehouseCode = #{invWarehouseCode}
and code = #{code} and originCode = #{code}
limit 1 limit 1
</select> </select>

Loading…
Cancel
Save