diff --git a/src/main/java/com/glxp/api/dao/collect/IoCollectOrderBizMapper.java b/src/main/java/com/glxp/api/dao/collect/IoCollectOrderBizMapper.java index e30d2cafa..d6d1e0508 100644 --- a/src/main/java/com/glxp/api/dao/collect/IoCollectOrderBizMapper.java +++ b/src/main/java/com/glxp/api/dao/collect/IoCollectOrderBizMapper.java @@ -5,6 +5,7 @@ import com.glxp.api.entity.collect.IoCollectOrderBiz; import com.glxp.api.req.collect.CollectOrderBizRequest; import com.glxp.api.res.collect.CollectOrderBizResponse; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -13,4 +14,5 @@ public interface IoCollectOrderBizMapper extends BaseMapper { List filterList(CollectOrderBizRequest collectOrderRequest); + void updateAutoResCount(@Param("id") Long id,@Param("autoResCount") int autoResCount); } diff --git a/src/main/java/com/glxp/api/entity/collect/IoCollectOrderBiz.java b/src/main/java/com/glxp/api/entity/collect/IoCollectOrderBiz.java index d95c5363d..4194fe75f 100644 --- a/src/main/java/com/glxp/api/entity/collect/IoCollectOrderBiz.java +++ b/src/main/java/com/glxp/api/entity/collect/IoCollectOrderBiz.java @@ -185,5 +185,14 @@ public class IoCollectOrderBiz implements Serializable { + /** + * 自动扫描分配的工位存量 + */ + @TableField(value = "autoResCount") + @ApiModelProperty(value = "自动扫描分配的工位存量") + private Integer autoResCount; + + + private static final long serialVersionUID = 1L; } diff --git a/src/main/java/com/glxp/api/service/inout/IoSplitFifoCodeService.java b/src/main/java/com/glxp/api/service/inout/IoSplitFifoCodeService.java index 175986626..14d55d95a 100644 --- a/src/main/java/com/glxp/api/service/inout/IoSplitFifoCodeService.java +++ b/src/main/java/com/glxp/api/service/inout/IoSplitFifoCodeService.java @@ -6,18 +6,30 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.glxp.api.dao.auth.SysWorkplaceDao; +import com.glxp.api.dao.collect.IoCollectOrderBizMapper; +import com.glxp.api.dao.collect.IoCollectOrderMapper; import com.glxp.api.dao.inout.IoSplitFifoCodeMapper; import com.glxp.api.entity.auth.SysWorkplace; +import com.glxp.api.entity.basic.UdiRelevanceEntity; import com.glxp.api.entity.inout.IoSplitFifoCodeEntity; import com.glxp.api.exception.JsonException; +import com.glxp.api.req.collect.CollectOrderBizRequest; +import com.glxp.api.req.collect.CollectOrderRequest; +import com.glxp.api.req.dev.DeviceChangeOrderParam; import com.glxp.api.req.inout.IoSplitFifoCodeRequest; +import com.glxp.api.res.collect.CollectOrderBizResponse; +import com.glxp.api.res.collect.IoCollectOrderResponse; import com.glxp.api.res.inout.IoSplitCodeResponse; import com.glxp.api.service.auth.SysWorkplaceService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service public class IoSplitFifoCodeService extends ServiceImpl { @@ -26,6 +38,10 @@ public class IoSplitFifoCodeService extends ServiceImpl filterGroupList(IoSplitFifoCodeRequest splitFifoCodeRequest) { if (splitFifoCodeRequest == null) { @@ -103,19 +119,83 @@ public class IoSplitFifoCodeService extends ServiceImpl ioSplitCodeResponses = this.baseMapper.filterGroupList(splitFifoCodeRequest); + if (CollUtil.isEmpty(ioSplitCodeResponses)) return; + Map> splitMap = ioSplitCodeResponses.stream().collect(Collectors.groupingBy(IoSplitCodeResponse::getRelId)); //2.遍历当前工位待处理的单据,根据orderTime排序 - + CollectOrderRequest collectOrderRequest = new CollectOrderRequest(); + collectOrderRequest.setWorkPlaceCode(workPaceCode); + List orderList = collectOrderMapper.filterList(collectOrderRequest); + if (CollUtil.isEmpty(orderList)) return; //3.为每个单据底下的单据详情分配数量 + for (int i = 0; i < orderList.size(); i++) { + IoCollectOrderResponse order = orderList.get(i); + CollectOrderBizRequest bizRequest = new CollectOrderBizRequest(); + bizRequest.setOrderIdFk(String.valueOf(order.getId())); + List bizList = collectOrderBizMapper.filterList(bizRequest); + if (CollUtil.isNotEmpty(bizList)){ + //自动分配 工位存量、更新splitMap、更新 bizList上的 缺少存量数 + autoAllocationWorkPace(splitMap,bizList); + } + } + } + /** + * 自动分配 工位存量、更新splitMap、更新 bizList上的 缺少存量数 + * @param splitMap + * @param bizList + */ + @Transactional(rollbackFor = Exception.class) + void autoAllocationWorkPace(Map> splitMap, List bizList) { + for (int i = 0; i < bizList.size(); i++) { + CollectOrderBizResponse collectOrderBizResponse = bizList.get(i); + Long relId = collectOrderBizResponse.getRelId(); + String batchNo = collectOrderBizResponse.getBatchNo(); + Integer count = collectOrderBizResponse.getCount(); //当前明细 需要的数量 + Long bizId = collectOrderBizResponse.getId(); + + List ioSplitCodeResponses = splitMap.get(relId); + List newioSplitCodeResponses = new ArrayList<>(ioSplitCodeResponses.size()); + + if (CollUtil.isNotEmpty(ioSplitCodeResponses)){ + for (int j = 0; j < ioSplitCodeResponses.size() ; j++) { + IoSplitCodeResponse ioSplit = ioSplitCodeResponses.get(j); + Integer totalCount = ioSplit.getTotalCount(); + if ((StrUtil.isBlank(batchNo) || batchNo.equals(ioSplit.getBatchNo())) && count > 0 && totalCount >0){ + Integer resCount = totalCount - count;//预分配后剩余 工位存量 + if(resCount >= 0){//足够分配 + count = 0; + ioSplit.setTotalCount(resCount); + }else {//不够分配 + count = -resCount; + ioSplit.setTotalCount(0); + } + } + newioSplitCodeResponses.add(ioSplit); + } + + splitMap.put(relId,newioSplitCodeResponses); + } + + if (count > 0){//不够分配 + collectOrderBizMapper.updateAutoResCount(bizId,-count); + }else { + collectOrderBizMapper.updateAutoResCount(bizId,collectOrderBizResponse.getCount()); + } + } } } diff --git a/src/main/resources/mybatis/mapper/collect/IoCollectOrderBizMapper.xml b/src/main/resources/mybatis/mapper/collect/IoCollectOrderBizMapper.xml index d5875a7bb..1e8517966 100644 --- a/src/main/resources/mybatis/mapper/collect/IoCollectOrderBizMapper.xml +++ b/src/main/resources/mybatis/mapper/collect/IoCollectOrderBizMapper.xml @@ -32,4 +32,11 @@ group by icob.id + + + UPDATE io_collect_order_biz + SET autoResCount = #{autoResCount} + WHERE id = #{id} + + diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index 6e3b70933..5d06ebbba 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -4255,3 +4255,8 @@ CALL Pro_Temp_ColumnWork('io_collect_order', 'backupOrderRemark6', CALL Pro_Temp_ColumnWork('basic_products', 'workPlaceCount', 'int NULL DEFAULT NULL COMMENT ''工位预警数量''', 1); + + +CALL Pro_Temp_ColumnWork('io_collect_order_biz', 'autoResCount', + 'int NULL DEFAULT NULL COMMENT ''自动扫描分配的工位存量''', + 1);