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 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.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.InvCountCodes; import com.glxp.api.admin.entity.inventory.*;
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.req.inventory.FilterInvCountCodesRequest; import com.glxp.api.admin.req.inventory.FilterInvCountCodesRequest;
import com.glxp.api.admin.req.inventory.FilterInvCountOrderRequest; 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.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.InvCountOrderService; import com.glxp.api.admin.service.inventory.InvCountOrderService;
@ -40,6 +38,7 @@ import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@ -200,48 +199,96 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
log.error("未配置盘点单据设置参数,无法转单"); log.error("未配置盘点单据设置参数,无法转单");
return; return;
} }
List<InvCountOrderDetail> detailList = invCountOrderDetailDao.selectByOrderId(invCountOrder.getOrderId());
List<InvCountOrderDetail> inDetailList = new ArrayList<>(); //根据盘点单据号,查询此盘点单的条码信息
List<InvCountOrderDetail> outDetailList = new ArrayList<>(); FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
for (InvCountOrderDetail invCountOrderDetail : detailList) { codesRequest.setOrderIdFk(invCountOrder.getOrderId());
if (invCountOrderDetail.getStatus() == 0) { List<InvCountCodes> codesList = invCountCodesDao.filterList(codesRequest);
//亏损,做出库单 List<String> countProductIds = codesList.stream().map(InvCountCodes::getProductId).collect(Collectors.toList());
outDetailList.add(invCountOrderDetail);
} else if (invCountOrderDetail.getStatus() == 1) { //出入库单据条码
//盈利,做入库单 List<WarehouseEntity> inOrderCodes = new ArrayList<>();
inDetailList.add(invCountOrderDetail); List<WarehouseEntity> outOrderCodes = new ArrayList<>();
//查询库存详情表此产品的条码信息
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);
}
});
} }
} }
InvCountSettingEntity invCountSettingEntity = list.get(0); InvCountSettingEntity invCountSettingEntity = list.get(0);
if (CollUtil.isNotEmpty(inDetailList)) { if (CollUtil.isNotEmpty(inOrderCodes)) {
log.info("盘点单据:" + invCountOrder.getOrderId() + " 转入库单开始"); log.info("盘点单据:{} 生成盘盈入库单据", invCountOrder.getOrderId());
//查询盘点入库单据类型 OrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT);
OrderEntity orderEntity = 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(order);
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest(); codesTempDao.insertCodesTemp(inOrderCodes);
codesRequest.setOrderIdFk(invCountOrder.getOrderId()); log.info("盘盈入库单据生成成功");
codesRequest.setStatus(1); }
List<InvCountCodes> codesList = invCountCodesDao.filterList(codesRequest);
List<WarehouseEntity> warehouseEntities = new ArrayList<>(codesList.size()); if (CollUtil.isNotEmpty(outOrderCodes)) {
codesList.forEach(invCountCodes -> { 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 warehouseEntity = new WarehouseEntity();
warehouseEntity.setCode(invCountCodes.getCode()); warehouseEntity.setCode(code);
warehouseEntity.setRelId(invCountCodes.getProductId()); warehouseEntity.setRelId(productId);
warehouseEntity.setAction(invCountSettingEntity.getInAction());
warehouseEntity.setMainAction(ConstantType.TYPE_PUT); warehouseEntity.setMainAction(ConstantType.TYPE_PUT);
warehouseEntity.setActor(invCountOrder.getCreateUser()); warehouseEntity.setActor(invCountOrder.getCreateUser());
warehouseEntity.setOrderId(orderEntity.getId());
warehouseEntity.setInvStorageCode(invCountOrder.getInvStorageCode()); warehouseEntity.setInvStorageCode(invCountOrder.getInvStorageCode());
warehouseEntity.setInvWarehouseCode(invCountOrder.getInvWarehouseCode()); warehouseEntity.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
warehouseEntity.setLocStorageCode(invCountOrder.getInvStorageCode()); warehouseEntity.setLocStorageCode(invCountOrder.getInvStorageCode());
warehouseEntity.setFromCorp(orderEntity.getFromCorp()); UdiEntity udi = FilterUdiUtils.getUdi(code);
warehouseEntity.setFromCorpId(orderEntity.getFromCorpId());
warehouseEntity.setCorpOrderId(orderEntity.getCorpOrderId());
UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode());
warehouseEntity.setBatchNo(udi.getBatchNo()); warehouseEntity.setBatchNo(udi.getBatchNo());
warehouseEntity.setProduceDate(udi.getProduceDate()); warehouseEntity.setProduceDate(udi.getProduceDate());
warehouseEntity.setExpireDate(udi.getExpireDate()); warehouseEntity.setExpireDate(udi.getExpireDate());
@ -249,22 +296,7 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
warehouseEntity.setNameCode(udi.getUdi()); warehouseEntity.setNameCode(udi.getUdi());
warehouseEntity.setCount(1); warehouseEntity.setCount(1);
warehouseEntity.setReCount(1); warehouseEntity.setReCount(1);
return warehouseEntity;
warehouseEntities.add(warehouseEntity);
});
orderDao.insertOrder(orderEntity);
codesTempDao.insertCodesTemp(warehouseEntities);
log.info("盘点单据转入库单完成,单号为:" + orderEntity.getId());
}
if (CollUtil.isNotEmpty(outDetailList)) {
log.info("盘点单据:" + invCountOrder.getOrderId() + " 转出库单开始");
//查询盘点入库单据类型
}
} }
/** /**

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

Loading…
Cancel
Save