自动化立体仓库 - WMS系统
pang.jiabao
2024-10-23 a35b9acb89c73bf6fee0b4d48c72dc7240cffcf7
自动生成入库通知档
2个文件已添加
4个文件已修改
169 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/Order.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoGroupingScheduler.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AutoGroupingHandler.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -55,7 +55,7 @@
        return openService.grouping(param);
    }
        @PostMapping("/barcodeVerificatio")
    @PostMapping("/barcodeVerificatio")
    @AppAuth(memo = "AGV调用校验条码")
    public synchronized R barcodeVerificatio(@RequestHeader(required = false) String appkey,
                                   @RequestBody(required = false) Map<String,String> param,
src/main/java/com/zy/asrs/entity/Order.java
@@ -165,7 +165,7 @@
    /**
     * 结算天数
     */
    @ApiModelProperty(value= "结算天数")
    @ApiModelProperty(value= "0默认,1已生成入库通知档")
    @TableField("account_day")
    private Integer accountDay;
src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -23,4 +23,14 @@
    Order selectOrderMoveStatus();
    Order selectOrderMoveStatusInitial();
    /**
     * 扫描出待处理,未生成入库通知档的入库单据
     */
    List<Order> selectNotGroupingList();
    /**
     * 更新订单状态和组托状态
     */
    int updateSettleAndGroupingFlag(@Param("orderId")Long orderId, @Param("settle")Long settle, @Param("account_day")Integer flag);
}
src/main/java/com/zy/asrs/task/AutoGroupingScheduler.java
New file
@@ -0,0 +1,40 @@
package com.zy.asrs.task;
import com.zy.asrs.entity.Order;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.task.handler.AutoGroupingHandler;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author pang.jiabao
 * @description 自动组托定时任务
 * @createDate 2024/10/23 13:13
 */
@Component
public class AutoGroupingScheduler {
    @Resource
    private OrderMapper orderMapper;
    @Resource
    private AutoGroupingHandler autoGroupingHandler;
    // 自动组托
    // 扫描单据进行组托 order表 account_day 0默认,1已生成入库通知档
    @Scheduled(cron = "0/3 * * * * ? ")
    private void autoGrouping() {
        // 扫描未生成入库通知档单据
        List<Order> orderList = orderMapper.selectNotGroupingList();
        for (Order order : orderList) {
            autoGroupingHandler.autoGrouping(order);
        }
    }
}
src/main/java/com/zy/asrs/task/handler/AutoGroupingHandler.java
New file
@@ -0,0 +1,92 @@
package com.zy.asrs.task.handler;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.mapper.OrderMapper;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.service.WaitPakinService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
 * @author pang.jiabao
 * @description 自动组托定时任务处理器
 * @createDate 2024/10/23 13:14
 */
@Slf4j
@Service
public class AutoGroupingHandler {
    @Resource
    private OrderDetlService orderDetlService;
    @Resource
    private MatService matService;
    @Resource
    private WaitPakinService waitPakinService;
    @Resource
    private OrderService orderService;
    @Resource
    private OrderMapper orderMapper;
    public void autoGrouping(Order order) {
        Date now = new Date();
        // 获取订单明细
        List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo()));
        // 生成入库通知档
        for (OrderDetl orderDetl : orderDetlList) {
            if (orderDetl.getAnfme() > orderDetl.getEnableQty()) {
                throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
            }
            // 修改订单作业数量
            if (!orderDetlService.increaseWorkQty(orderDetl, orderDetl.getAnfme())) {
                throw new CoolException("修改单据作业数量失败");
            }
            Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(orderDetl.getMatnr() + "商品档案不存在");
            }
            WaitPakin waitPakin = new WaitPakin();
            waitPakin.sync(mat);
            waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
            waitPakin.setBatch(orderDetl.getBatch());     // 序列码
            waitPakin.setZpallet(orderDetlList.size() == 1 ? order.getTemp2() : orderDetl.getTemp2());   // 托盘码
            waitPakin.setIoStatus("N");     // 入出状态
            waitPakin.setAnfme(orderDetl.getAnfme());  // 数量
            waitPakin.setStatus("Y");    // 状态
            waitPakin.setAppeTime(now);
            waitPakin.setModiTime(now);
            // @可以了主、从表中Temp2存的就是托盘号,如果一托一个单子存的就是主表的Temp2字段,
            // 否则存的就是从表的Temp2字段,从表中:产品ID:ItemId,产品代号:ItemCode,批号:ItemBatch,
            // 属性:ProType,颜色:sColor,订单号:OrderNo,炉号:LuHao,客户ID:Packing,工单号:sPgNo
            waitPakin.setSPgNO(orderDetl.getSPgNO());
            waitPakin.setOutOrderNo(orderDetl.getOutOrderNo());
            waitPakin.setProType(orderDetl.getProType());
            waitPakin.setLuHao(orderDetl.getLuHao());
            waitPakin.setPacking(orderDetl.getPacking());
            if (!waitPakinService.insert(waitPakin)) {
                throw new CoolException("保存入库通知档失败");
            }
        }
        orderMapper.updateSettleAndGroupingFlag(order.getId(), 2L, 1);
    }
}
src/main/resources/mapper/OrderMapper.xml
@@ -58,6 +58,17 @@
        where 1=1
        and id = #{orderId}
    </update>
    <update id="updateSettleAndGroupingFlag">
        update
            man_order
        set
            settle = #{settle},
            account_day = #{account_day} ,
            update_time = getdate()
        where
            1 = 1
          and id = #{orderId}
    </update>
    <select id="selectWork" resultMap="BaseResultMap">
        select top 5 *
@@ -113,5 +124,17 @@
        and move_status = 1
        order by update_time
    </select>
    <select id="selectNotGroupingList" resultMap="BaseResultMap">
        select
            *
        from
            man_order mo
                left join man_doc_type mdt on
                mo.doc_type = mdt.doc_id
        where
            mdt.pakin = 1
          and mo.account_day = 0
          and mo.settle = 1
    </select>
</mapper>