1.完善生成盘盈盘亏单据逻辑

feature-order-fix
x_z 3 years ago
parent ee7754df7c
commit 33e8645c7a

@ -65,4 +65,14 @@ public class InvCountOrder {
*/
private String remark;
/**
* 使,
*/
private String inOrderIds;
/**
* 使,
*/
private String outOrderIds;
}

@ -19,12 +19,10 @@ import com.glxp.api.admin.entity.basic.UdiEntity;
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.InvCountCodes;
import com.glxp.api.admin.entity.inventory.InvCountOrder;
import com.glxp.api.admin.entity.inventory.InvCountOrderDetail;
import com.glxp.api.admin.entity.inventory.InvCountSettingEntity;
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.FilterInvProductDetailRequest;
import com.glxp.api.admin.res.inventory.InvCountOrderResponse;
import com.glxp.api.admin.service.auth.CustomerService;
import com.glxp.api.admin.service.inventory.InvCountOrderService;
@ -40,6 +38,7 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@ -200,71 +199,104 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
log.error("未配置盘点单据设置参数,无法转单");
return;
}
List<InvCountOrderDetail> detailList = invCountOrderDetailDao.selectByOrderId(invCountOrder.getOrderId());
List<InvCountOrderDetail> inDetailList = new ArrayList<>();
List<InvCountOrderDetail> outDetailList = new ArrayList<>();
for (InvCountOrderDetail invCountOrderDetail : detailList) {
if (invCountOrderDetail.getStatus() == 0) {
//亏损,做出库单
outDetailList.add(invCountOrderDetail);
} else if (invCountOrderDetail.getStatus() == 1) {
//盈利,做入库单
inDetailList.add(invCountOrderDetail);
}
}
InvCountSettingEntity invCountSettingEntity = list.get(0);
//根据盘点单据号,查询此盘点单的条码信息
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());
if (CollUtil.isNotEmpty(inDetailList)) {
log.info("盘点单据:" + invCountOrder.getOrderId() + " 转入库单开始");
//查询盘点入库单据类型
OrderEntity orderEntity = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT);
//出入库单据条码
List<WarehouseEntity> inOrderCodes = new ArrayList<>();
List<WarehouseEntity> outOrderCodes = new ArrayList<>();
//查找盘点码中标记为多的码
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
codesRequest.setStatus(1);
List<InvCountCodes> codesList = invCountCodesDao.filterList(codesRequest);
List<WarehouseEntity> warehouseEntities = new ArrayList<>(codesList.size());
codesList.forEach(invCountCodes -> {
WarehouseEntity warehouseEntity = new WarehouseEntity();
warehouseEntity.setCode(invCountCodes.getCode());
warehouseEntity.setRelId(invCountCodes.getProductId());
warehouseEntity.setAction(invCountSettingEntity.getInAction());
warehouseEntity.setMainAction(ConstantType.TYPE_PUT);
warehouseEntity.setActor(invCountOrder.getCreateUser());
warehouseEntity.setOrderId(orderEntity.getId());
warehouseEntity.setInvStorageCode(invCountOrder.getInvStorageCode());
warehouseEntity.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
warehouseEntity.setLocStorageCode(invCountOrder.getInvStorageCode());
warehouseEntity.setFromCorp(orderEntity.getFromCorp());
warehouseEntity.setFromCorpId(orderEntity.getFromCorpId());
warehouseEntity.setCorpOrderId(orderEntity.getCorpOrderId());
//查询库存详情表此产品的条码信息
for (String productId : countProductIds) {
FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest();
invProductDetailRequest.setProductIdFk(productId);
invProductDetailRequest.setInvStorageCode(invCountOrder.getInvStorageCode());
invProductDetailRequest.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
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)) {
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId());
inOrderCodes.add(warehouseEntity);
}
});
} else {
//库存中存在此产品,筛选出盘点中不存在的条码,添加到盘点出库条码中
List<String> countCodes = codesList.stream().map(InvCountCodes::getCode).collect(Collectors.toList());
invProductDetailEntities.forEach(invProductDetailEntity -> {
if (!countCodes.contains(invProductDetailEntity.getOriginCode())) {
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk());
outOrderCodes.add(warehouseEntity);
}
});
}
}
UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode());
warehouseEntity.setBatchNo(udi.getBatchNo());
warehouseEntity.setProduceDate(udi.getProduceDate());
warehouseEntity.setExpireDate(udi.getExpireDate());
warehouseEntity.setSerialNo(udi.getSerialNo());
warehouseEntity.setNameCode(udi.getUdi());
warehouseEntity.setCount(1);
warehouseEntity.setReCount(1);
InvCountSettingEntity invCountSettingEntity = list.get(0);
warehouseEntities.add(warehouseEntity);
if (CollUtil.isNotEmpty(inOrderCodes)) {
log.info("盘点单据:{} 生成盘盈入库单据", invCountOrder.getOrderId());
OrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT);
log.info("盘盈入库单据号:{}", order.getId());
inOrderCodes.forEach(warehouseEntity -> {
warehouseEntity.setOrderId(order.getId());
warehouseEntity.setAction(order.getAction());
warehouseEntity.setFromCorp(order.getFromCorp());
warehouseEntity.setFromCorpId(order.getFromCorpId());
warehouseEntity.setCorpOrderId(order.getCorpOrderId());
});
orderDao.insertOrder(orderEntity);
codesTempDao.insertCodesTemp(warehouseEntities);
log.info("盘点单据转入库单完成,单号为:" + orderEntity.getId());
orderDao.insertOrder(order);
codesTempDao.insertCodesTemp(inOrderCodes);
log.info("盘盈入库单据生成成功");
}
if (CollUtil.isNotEmpty(outDetailList)) {
log.info("盘点单据:" + invCountOrder.getOrderId() + " 转出库单开始");
//查询盘点入库单据类型
if (CollUtil.isNotEmpty(outOrderCodes)) {
log.info("盘点单据:{} 生成盘亏入库单据", invCountOrder.getOrderId());
OrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_OUT);
log.info("盘盈入库单据号:{}", order.getId());
inOrderCodes.forEach(warehouseEntity -> {
warehouseEntity.setOrderId(order.getId());
warehouseEntity.setAction(order.getAction());
warehouseEntity.setFromCorp(order.getFromCorp());
warehouseEntity.setFromCorpId(order.getFromCorpId());
warehouseEntity.setCorpOrderId(order.getCorpOrderId());
});
orderDao.insertOrder(order);
codesTempDao.insertCodesTemp(inOrderCodes);
log.info("盘亏入库单据生成成功");
}
//更新盘点单据生成的扫码单据号
invCountOrderDao.updateByOrderId(invCountOrder);
}
private static WarehouseEntity buildWarehouse(InvCountOrder invCountOrder, String code, String productId) {
WarehouseEntity warehouseEntity = new WarehouseEntity();
warehouseEntity.setCode(code);
warehouseEntity.setRelId(productId);
warehouseEntity.setMainAction(ConstantType.TYPE_PUT);
warehouseEntity.setActor(invCountOrder.getCreateUser());
warehouseEntity.setInvStorageCode(invCountOrder.getInvStorageCode());
warehouseEntity.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
warehouseEntity.setLocStorageCode(invCountOrder.getInvStorageCode());
UdiEntity udi = FilterUdiUtils.getUdi(code);
warehouseEntity.setBatchNo(udi.getBatchNo());
warehouseEntity.setProduceDate(udi.getProduceDate());
warehouseEntity.setExpireDate(udi.getExpireDate());
warehouseEntity.setSerialNo(udi.getSerialNo());
warehouseEntity.setNameCode(udi.getUdi());
warehouseEntity.setCount(1);
warehouseEntity.setReCount(1);
return warehouseEntity;
}
/**

@ -14,6 +14,8 @@
<result column="auditTime" jdbcType="TIMESTAMP" property="auditTime"/>
<result column="status" jdbcType="BOOLEAN" property="status"/>
<result column="remark" jdbcType="VARCHAR" property="remark"/>
<result column="inOrderIds" jdbcType="VARCHAR" property="inOrderIds"/>
<result column="outOrderIds" jdbcType="VARCHAR" property="outOrderIds"/>
</resultMap>
<sql id="Base_Column_List">
@ -28,7 +30,9 @@
auditUser,
auditTime,
`status`,
remark
remark,
inOrderIds,
outOrderIds
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
@ -49,11 +53,12 @@
insert into inv_count_order (orderId, invStorageCode,
invWarehouseCode, invSpaceCode, `createUser`,
createTime, updateTime, auditUser,
auditTime, `status`, remark)
auditTime, `status`, remark, inOrderIds, outOrderIds)
values (#{orderId,jdbcType=VARCHAR}, #{invStorageCode,jdbcType=VARCHAR},
#{invWarehouseCode,jdbcType=VARCHAR}, #{invSpaceCode,jdbcType=VARCHAR}, #{createUser,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, #{auditUser,jdbcType=VARCHAR},
#{auditTime,jdbcType=TIMESTAMP}, #{status,jdbcType=BOOLEAN}, #{remark,jdbcType=VARCHAR})
#{auditTime,jdbcType=TIMESTAMP}, #{status,jdbcType=BOOLEAN}, #{remark,jdbcType=VARCHAR},
#{inOrderIds,jdbcType=VARCHAR}, #{outOrderIds,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.glxp.api.admin.entity.inventory.InvCountOrder">
@ -95,6 +100,12 @@
<if test="remark != null">
remark,
</if>
<if test="inOrderIds != null and inOrderIds != ''">
inOrderIds,
</if>
<if test="outOrderIds != null and outOrderIds != ''">
outOrderIds,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
@ -133,6 +144,12 @@
<if test="remark != null">
#{remark,jdbcType=VARCHAR},
</if>
<if test="inOrderIds != null and inOrderIds != ''">
#{inOrderIds,jdbcType=VARCHAR},
</if>
<if test="outOrderIds != null and outOrderIds != ''">
#{outOrderIds,jdbcType=VARCHAR},
</if>
</trim>
</insert>
@ -172,6 +189,12 @@
<if test="remark != null">
remark = #{remark,jdbcType=VARCHAR},
</if>
<if test="inOrderIds != null and inOrderIds != ''">
inOrderIds = #{inOrderIds,jdbcType=VARCHAR},
</if>
<if test="outOrderIds != null and outOrderIds != ''">
outOrderIds = #{outOrderIds,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
@ -188,7 +211,9 @@
auditUser = #{auditUser,jdbcType=VARCHAR},
auditTime = #{auditTime,jdbcType=TIMESTAMP},
`status` = #{status,jdbcType=BOOLEAN},
remark = #{remark,jdbcType=VARCHAR}
remark = #{remark,jdbcType=VARCHAR},
inOrderIds = #{inOrderIds,jdbcType=VARCHAR},
outOrderIds = #{outOrderIds,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
@ -250,6 +275,16 @@
when id = #{item.id,jdbcType=INTEGER} then #{item.remark,jdbcType=VARCHAR}
</foreach>
</trim>
<trim prefix="inOrderIds = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id,jdbcType=INTEGER} then #{item.inOrderIds,jdbcType=VARCHAR}
</foreach>
</trim>
<trim prefix="outOrderIds = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id,jdbcType=INTEGER} then #{item.outOrderIds,jdbcType=VARCHAR}
</foreach>
</trim>
</trim>
where id in
<foreach close=")" collection="list" item="item" open="(" separator=", ">
@ -260,7 +295,7 @@
<insert id="batchInsert" parameterType="map">
insert into inv_count_order
(id, orderId, invStorageCode, invWarehouseCode, invSpaceCode, `createUser`, createTime,
updateTime, auditUser, auditTime, `status`, remark)
updateTime, auditUser, auditTime, `status`, remark, inOrderIds, outOrderIds)
values
<foreach collection="list" item="item" separator=",">
(#{item.id,jdbcType=INTEGER}, #{item.orderId,jdbcType=VARCHAR}, #{item.invStorageCode,jdbcType=VARCHAR},
@ -268,7 +303,7 @@
#{item.createUser,jdbcType=VARCHAR}, #{item.createTime,jdbcType=TIMESTAMP},
#{item.updateTime,jdbcType=TIMESTAMP},
#{item.auditUser,jdbcType=VARCHAR}, #{item.auditTime,jdbcType=TIMESTAMP}, #{item.status,jdbcType=BOOLEAN},
#{item.remark,jdbcType=VARCHAR})
#{item.remark,jdbcType=VARCHAR}, #{item.inOrderIds,jdbcType=VARCHAR}, #{item.outOrderIds,jdbcType=VARCHAR})
</foreach>
</insert>
@ -285,6 +320,8 @@
co.auditTime,
co.status,
co.remark,
co.inOrderIds,
co.outOrderIds,
w.name as invStorageName,
ws.name as invSubStorageName,
sp.name as invSpaceName
@ -342,7 +379,9 @@
auditUser = #{auditUser,jdbcType=VARCHAR},
auditTime = #{auditTime,jdbcType=TIMESTAMP},
`status` = #{status,jdbcType=BOOLEAN},
remark = #{remark,jdbcType=VARCHAR}
remark = #{remark,jdbcType=VARCHAR},
inOrderIds = #{inOrderIds,jdbcType=VARCHAR},
outOrderIds = #{outOrderIds,jdbcType=VARCHAR}
where orderId = #{orderId}
</update>

Loading…
Cancel
Save