自动化立体仓库 - WMS系统
whycq
2024-10-16 405e94c5d08e89c9bf2bd0820d39ceeaa049211d
流水记录表
18个文件已修改
475 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/AgvMobileController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/FlowLog.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvLocDetlService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderDetlMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/flowLog/flowLog.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/flowLog/flowLog.html 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvMobileController.java
@@ -5,6 +5,7 @@
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
@@ -47,6 +48,10 @@
    private AgvWrkMastService agvWrkMastService;
    @Autowired
    private AgvWrkDetlService agvWrkDetlService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private FlowLogService flowLogService;
    /*
@@ -545,6 +550,7 @@
            }
            AgvWrkMast wrkMast = createWrkMast(ioType, 22L, locNo, "", barcode, now, getUserId(), 30,floor);
            // 同步调拨单
            long flowId = snowflakeIdWorker.nextId();
            List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo));
            for (AgvLocDetl agvLocDetl : agvLocDetls) {
                AgvWrkDetl wrkDetl = new AgvWrkDetl();
@@ -559,8 +565,35 @@
                if (!agvWrkDetlService.insert(wrkDetl)) {
                    throw new CoolException("保存工作明细失败");
                }
                // 更新订单
                OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("source",33).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()));
                FlowLog flowLog = new FlowLog();
                flowLog.setFid(String.valueOf(flowId));
                flowLog.setSpare2(wrkMast.getWrkNo().toString());
                flowLog.setLocNo(wrkMast.getSourceLocNo());
                flowLog.setSpare1(barcode);
                flowLog.setOpType(5L);
                flowLog.setOrderNo(orderDetl.getOrderNo());
                flowLog.setThreeCode(orderDetl.getThreeCode());
                flowLog.setMatnr(agvLocDetl.getMatnr());
                flowLog.setMaktx(agvLocDetl.getMaktx());
                flowLog.setOrderPrevious(orderDetl.getAnfme());
                flowLog.setOrderCurrent(orderDetl.getAnfme());
                flowLog.setOrderChanged(0.0);
                flowLog.setQtyPrevious(orderDetl.getQty());
                flowLog.setQtyCurrent(orderDetl.getQty() + agvLocDetl.getAnfme());
                flowLog.setQtyChanged(agvLocDetl.getAnfme());
                flowLog.setLocPrevious(agvLocDetl.getAnfme());
                flowLog.setLocCurrent(0.0d);
                flowLog.setLocChanged(agvLocDetl.getAnfme());
                flowLog.setUserId(getUserId());
                flowLog.setAppeTime(now);
                if (!flowLogService.insert(flowLog)) {
                    throw new CoolException("同步半成品调拨单流水记录失败");
                }
                orderDetl.setQty(orderDetl.getQty() + agvLocDetl.getAnfme());
                if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("source",33).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){
                    throw new CoolException("修改订单明细失败,请联系管理员"+agvLocDetl.getOrderNo()+agvLocDetl.getMatnr());
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -56,6 +56,8 @@
    private MatService matService;
    @Autowired
    private AgvLocDetlService agvLocDetlService;
    @Autowired
    private FlowLogService flowLogService;
    @GetMapping("/doc/type/list")
    @Transactional
@@ -359,6 +361,7 @@
    @Transactional
    public R formAdd(@RequestBody OrderDomainParam param){
        Order order = orderService.selectByNo(param.getOrderNo());
        long flowId = snowflakeIdWorker.nextId();
        if (order != null) {
            return R.error("单据编号已存在");
        }
@@ -417,9 +420,29 @@
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getThreeCode(),orderDetl.getDeadTime());
                Double anfme = item.getAnfme();
                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
                if (!orderDetlService.updateById(item)) {
                    throw new CoolException("保存订单明细档失败");
                }
                // 流水 -- 新增订单明细
                FlowLog flowLog = new FlowLog();
                flowLog.setFid(String.valueOf(flowId));
                flowLog.setOpType(2L);
                flowLog.setOrderNo(param.getOrderNo());
                flowLog.setThreeCode(orderDetl.getThreeCode());
                flowLog.setMatnr(orderDetl.getMatnr());
                flowLog.setMaktx(orderDetl.getMaktx());
                flowLog.setOrderPrevious(anfme);
                flowLog.setOrderCurrent(anfme + orderDetl.getAnfme());
                flowLog.setOrderChanged(orderDetl.getAnfme());
                flowLog.setQtyPrevious(orderDetl.getQty());
                flowLog.setQtyCurrent(orderDetl.getQty());
                flowLog.setQtyChanged(0.0D);
                flowLog.setUserId(getUserId());
                flowLog.setAppeTime(now);
                if (!flowLogService.insert(flowLog)) {
                    throw new CoolException("同步半成品调拨单流水记录失败");
                }
            } else {
                list.add(dto);
@@ -434,6 +457,25 @@
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("保存订单明细档失败");
                }
                // 流水 -- 新增订单明细
                FlowLog flowLog = new FlowLog();
                flowLog.setFid(String.valueOf(flowId));
                flowLog.setOpType(1L);
                flowLog.setOrderNo(param.getOrderNo());
                flowLog.setThreeCode(orderDetl.getThreeCode());
                flowLog.setMatnr(orderDetl.getMatnr());
                flowLog.setMaktx(orderDetl.getMaktx());
                flowLog.setOrderPrevious(0.0D);
                flowLog.setOrderCurrent(orderDetl.getAnfme());
                flowLog.setOrderChanged(orderDetl.getAnfme());
                flowLog.setQtyPrevious(0.0D);
                flowLog.setQtyCurrent(0.0D);
                flowLog.setQtyChanged(0.0D);
                flowLog.setUserId(getUserId());
                flowLog.setAppeTime(now);
                if (!flowLogService.insert(flowLog)) {
                    throw new CoolException("同步半成品调拨单流水记录失败");
                }
            }
        }
@@ -570,11 +612,33 @@
                        if (!orderDetlService.insert(orderDetl)) {
                            throw new CoolException("生成半成品调拨单明细档失败");
                        }
                        // 流水 -- 新增订单明细
                        FlowLog flowLog = new FlowLog();
                        flowLog.setFid(String.valueOf(flowId));
                        flowLog.setOpType(1L);
                        flowLog.setOrderNo(param.getOrderNo());
                        flowLog.setThreeCode(orderDetl.getThreeCode());
                        flowLog.setMatnr(orderDetl.getMatnr());
                        flowLog.setMaktx(orderDetl.getMaktx());
                        flowLog.setOrderPrevious(0.0D);
                        flowLog.setOrderCurrent(orderDetl.getAnfme());
                        flowLog.setOrderChanged(orderDetl.getAnfme());
                        flowLog.setQtyPrevious(0.0D);
                        flowLog.setQtyCurrent(0.0D);
                        flowLog.setQtyChanged(0.0D);
                        flowLog.setUserId(getUserId());
                        flowLog.setAppeTime(now);
                        if (!flowLogService.insert(flowLog)) {
                            throw new CoolException("同步半成品调拨单流水记录失败");
                        }
                    }
                }
            }
        }
        return R.ok("订单添加成功");
    }
@@ -583,6 +647,7 @@
    @Transactional
    public R formModify(@RequestBody OrderDomainParam param){
        Order order = orderService.selectById(param.getOrderId());
        long flowId = snowflakeIdWorker.nextId();
        int docType = param.getDocType().intValue();
        if (order == null || order.getStatus() == 0) {
            return R.error("订单不存在");
@@ -610,9 +675,29 @@
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getAnfme(), orderDetl.getProcessSts());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getThreeCode(),orderDetl.getDeadTime());
                Double anfme = item.getAnfme();
                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
                if (!orderDetlService.updateById(item)) {
                    throw new CoolException("保存订单明细档失败");
                }
                // 流水 -- 新增订单明细
                FlowLog flowLog = new FlowLog();
                flowLog.setFid(String.valueOf(flowId));
                flowLog.setOpType(2L);
                flowLog.setOrderNo(param.getOrderNo());
                flowLog.setThreeCode(orderDetl.getThreeCode());
                flowLog.setMatnr(orderDetl.getMatnr());
                flowLog.setMaktx(orderDetl.getMaktx());
                flowLog.setOrderPrevious(anfme);
                flowLog.setOrderCurrent(anfme + orderDetl.getAnfme());
                flowLog.setOrderChanged(orderDetl.getAnfme());
                flowLog.setQtyPrevious(orderDetl.getQty());
                flowLog.setQtyCurrent(orderDetl.getQty());
                flowLog.setQtyChanged(0.0D);
                flowLog.setUserId(getUserId());
                flowLog.setAppeTime(now);
                if (!flowLogService.insert(flowLog)) {
                    throw new CoolException("同步半成品调拨单流水记录失败");
                }
            } else {
                if (docType == 35 && orderDetl.getProcessSts() == 1) {
@@ -638,6 +723,25 @@
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("保存订单明细档失败");
                }
                // 流水 -- 新增订单明细
                FlowLog flowLog = new FlowLog();
                flowLog.setFid(String.valueOf(flowId));
                flowLog.setOpType(2L);
                flowLog.setOrderNo(param.getOrderNo());
                flowLog.setThreeCode(orderDetl.getThreeCode());
                flowLog.setMatnr(orderDetl.getMatnr());
                flowLog.setMaktx(orderDetl.getMaktx());
                flowLog.setOrderPrevious(0.0D);
                flowLog.setOrderCurrent(orderDetl.getAnfme());
                flowLog.setOrderChanged(orderDetl.getAnfme());
                flowLog.setQtyPrevious(orderDetl.getQty());
                flowLog.setQtyCurrent(orderDetl.getQty());
                flowLog.setQtyChanged(0.0D);
                flowLog.setUserId(getUserId());
                flowLog.setAppeTime(now);
                if (!flowLogService.insert(flowLog)) {
                    throw new CoolException("同步半成品调拨单流水记录失败");
                }
            }
        }
        return R.ok("订单修改成功");
src/main/java/com/zy/asrs/entity/FlowLog.java
@@ -22,7 +22,7 @@
     * 数据编号
     */
    @ApiModelProperty(value= "数据编号")
    @TableId(value = "id", type = IdType.INPUT)
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
@@ -245,17 +245,25 @@
    public String getOpType$() {
        String otp = "";
        if (this.opType == 1L) {
            otp = "1";
            otp = "新增订单";
        } else if (this.opType == 2L) {
            otp = "2";
            otp = "修改订单";
        } else if (this.opType == 3L) {
            otp = "3";
        } else if (this.opType == 3L) {
            otp = "3";
        } else if (this.opType == 3L) {
            otp = "3";
            otp = "组托入库";
        } else if (this.opType == 4L) {
            otp = "订单出库";
        } else if (this.opType == 5L) {
            otp = "调拨出库";
        } else if (this.opType == 6L) {
            otp = "加工出库";
        } else if (this.opType == 7L) {
            otp = "取消入库";
        } else if (this.opType == 8L) {
            otp = "取消移库";
        } else if (this.opType == 9L) {
            otp = "取消调拨";
        }
        return "";
        return otp;
    }
src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.asrs.entity.AgvLocDetl;
import com.zy.asrs.entity.LocDetl;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@@ -25,6 +26,9 @@
    @Select("select sum(a.anfme) as sum from agv_loc_detl a left join agv_loc_mast b on a.loc_no = b.loc_no where b.loc_sts = 'F' and a.matnr = #{matnr} AND a.three_code = #{threeCode}")
    Double selectSumAnfmeByMatnr(@Param("matnr") String matnr,@Param("threeCode") String threeCode);
    @Select("select * from agv_loc_detl where 1=1 and loc_no = #{locNo} and matnr = #{matnr} and three_code = #{csocode}")
    AgvLocDetl selectItemByOrderNo(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode);
    @Select("select sum(a.anfme) as sum from agv_loc_detl a left join agv_loc_mast b on a.loc_no = b.loc_no where b.loc_sts = 'F' and a.matnr = #{matnr} AND a.three_code = #{threeCode} AND a.process_sts = 1")
    Double selectSumAnfmeByMatnrProcess(@Param("matnr") String matnr,@Param("threeCode") String threeCode);
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -19,6 +19,8 @@
    LocDetl selectItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch,@Param("suppCode")String suppCode);
    LocDetl selectItemByOrderNo(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode);
    int deleteItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("suppCode")String suppCode, @Param("threeCode")String threeCode, @Param("deadTime")String deadTime);
    int updateAnfme(@Param("anfme")Double anfme, @Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("suppCode")String suppCode, @Param("threeCode")String threeCode, @Param("deadTime")String deadTime);
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -23,6 +23,8 @@
     */
    OrderDetl selectItemByOrderNo(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("csocode")String csocode, @Param("isocode")String isocode);
    OrderDetl selectItemByOrderNo2(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("threeCode") String threeCode);
    OrderDetl selectItemNoneOfBatch(@Param("orderNo")String orderNo, @Param("matnr")String matnr);
    OrderDetl selectItemOfBatch(@Param("matnr")String matnr, @Param("batch")String batch);
src/main/java/com/zy/asrs/service/AgvLocDetlService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.AgvLocDetl;
import com.zy.asrs.entity.LocDetl;
import com.zy.common.model.LocDto;
import com.zy.common.model.TaskDto;
import org.springframework.web.multipart.MultipartFile;
@@ -14,6 +15,8 @@
    public void addLocDetlInfo(String locNo, int taskCode);
    AgvLocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode);
    public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued, String csocode, String isoseq, String type);
    public void updateStock(String sourceLoc, String targetLoc);
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -13,6 +13,8 @@
    LocDetl selectItem(String locNo, String matnr, String batch,String suppCode);
    LocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode);
    Page<LocDetl> getStockOut(Page<LocDetl> page);
    /**
src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -18,6 +18,8 @@
    OrderDetl selectItem(String orderNo, String matnr, String batch, String csocode, String isoCode);
    OrderDetl selectItem(String orderNo, String matnr, String threeCode);
    OrderDetl selectItemNoneOfBatch(String orderNo, String matnr);
    OrderDetl selectItemOfBatch(String matnr, String batch);
src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
@@ -9,6 +9,7 @@
import com.zy.asrs.entity.AgvLocDetl;
import com.zy.asrs.entity.AgvLocMast;
import com.zy.asrs.entity.AgvWrkDetl;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.mapper.AgvLocDetlMapper;
import com.zy.asrs.service.AgvBasDevpService;
import com.zy.asrs.service.AgvLocDetlService;
@@ -130,6 +131,11 @@
    }
    @Override
    public AgvLocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode) {
        return this.baseMapper.selectItemByOrderNo(locNo, matnr, batch,csocode,isoCode);
    }
    @Override
    public Double getSumAnfmeProcess(String matnr, String threeCode) {
        return this.baseMapper.selectSumAnfmeByMatnrProcess(matnr, threeCode);
    }
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -5,6 +5,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
@@ -73,6 +74,12 @@
    private WrkMastExecuteService wrkMastExecuteService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private FlowLogService flowLogService;
    @Autowired
    private LocDetlServiceImpl locDetlService;
    /*
@@ -143,6 +150,7 @@
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,containerCode,now,userId,Short.valueOf(containerCode.substring(0,2)));
            //生成工作档明细
            long flowId = snowflakeIdWorker.nextId();
            taskDto.getLocDtos().forEach(locDto -> {
                if (!BaseController.isJSON(locDto.getOrderNo())) {
                    //明细档所需参数
@@ -157,6 +165,36 @@
                            locDto.getCsocode(),
                            locDto.getIsoseq(),
                            locDto.getProcessSts());
                    OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
                    AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
                    // 流水 -- 新增订单明细
                    FlowLog flowLog = new FlowLog();
                    flowLog.setFid(String.valueOf(flowId));
                    flowLog.setSpare2(wrkMast.getWrkNo().toString());
                    flowLog.setLocNo(wrkMast.getSourceLocNo());
                    flowLog.setSpare1(containerCode);
                    flowLog.setOpType(4L);
                    flowLog.setOrderNo(locDto.getOrderNo());
                    flowLog.setThreeCode(locDto.getCsocode());
                    flowLog.setMatnr(locDto.getMatnr());
                    flowLog.setMaktx(locDto.getMaktx());
                    flowLog.setOrderPrevious(orderDetl.getAnfme());
                    flowLog.setOrderCurrent(orderDetl.getAnfme());
                    flowLog.setOrderChanged(0.0);
                    flowLog.setQtyPrevious(orderDetl.getQty());
                    flowLog.setQtyCurrent(orderDetl.getQty() + locDto.getAnfme());
                    flowLog.setQtyChanged(locDto.getAnfme());
                    flowLog.setLocPrevious(locDetl.getAnfme());
                    flowLog.setLocCurrent(locDetl.getAnfme() - locDto.getAnfme());
                    flowLog.setLocChanged(locDto.getAnfme());
                    flowLog.setUserId(userId);
                    flowLog.setAppeTime(now);
                    if (!flowLogService.insert(flowLog)) {
                        throw new CoolException("同步半成品调拨单流水记录失败");
                    }
                }else {
                    List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                    orderDtoList.forEach(orderDto -> {
@@ -174,6 +212,7 @@
                                locDto.getProcessSts());
                    });
                }
                //修改订单信息
                modifyOrderDetl(locDto, userId);
@@ -217,6 +256,7 @@
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,containerCode,now,userId,Short.valueOf(containerCode.substring(0,2)));
            //生成工作档明细
            long flowId = snowflakeIdWorker.nextId();
            taskDto.getLocDtos().forEach(locDto -> {
                if (!BaseController.isJSON(locDto.getOrderNo())) {
                    //明细档所需参数
@@ -231,6 +271,35 @@
                            locDto.getCsocode(),
                            locDto.getIsoseq(),
                            locDto.getProcessSts());
                    OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
                    AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
                    FlowLog flowLog = new FlowLog();
                    flowLog.setFid(String.valueOf(flowId));
                    flowLog.setSpare2(wrkMast.getWrkNo().toString());
                    flowLog.setLocNo(wrkMast.getSourceLocNo());
                    flowLog.setSpare1(containerCode);
                    flowLog.setOpType(6L);
                    flowLog.setOrderNo(locDto.getOrderNo());
                    flowLog.setThreeCode(locDto.getCsocode());
                    flowLog.setMatnr(locDto.getMatnr());
                    flowLog.setMaktx(locDto.getMaktx());
                    flowLog.setOrderPrevious(orderDetl.getAnfme());
                    flowLog.setOrderCurrent(orderDetl.getAnfme());
                    flowLog.setOrderChanged(0.0);
                    flowLog.setQtyPrevious(orderDetl.getQty());
                    flowLog.setQtyCurrent(orderDetl.getQty() + locDto.getAnfme());
                    flowLog.setQtyChanged(locDto.getAnfme());
                    flowLog.setLocPrevious(locDetl.getAnfme());
                    flowLog.setLocCurrent(locDetl.getAnfme() - locDto.getAnfme());
                    flowLog.setLocChanged(locDto.getAnfme());
                    flowLog.setUserId(userId);
                    flowLog.setAppeTime(now);
                    if (!flowLogService.insert(flowLog)) {
                        throw new CoolException("同步半成品调拨单流水记录失败");
                    }
                }else {
                    List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                    orderDtoList.forEach(orderDto -> {
@@ -437,7 +506,7 @@
            br = 2;
        }
        if (agvBasDevp.getLocType1() != br) {
            throw new CoolException("站点异常!");
            throw new CoolException("站点类型和货架类型不符!");
        }
        if (containerType == 40) {
            locType = 5;
@@ -510,8 +579,37 @@
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(1,201L,devNo,locNo,containerCode,now,userId, containerType);
            //生成工作档明细
            long flowId = snowflakeIdWorker.nextId();
            agvWaitPakinList.forEach(wp -> {
                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime(),wp.getProcessSts());
                // 流水 -- 新增订单明细
                OrderDetl orderDetl = orderDetlService.selectItem(wp.getOrderNo(), wp.getMatnr(), wp.getThreeCode());
                FlowLog flowLog = new FlowLog();
                flowLog.setFid(String.valueOf(flowId));
                flowLog.setSpare2(wrkMast.getWrkNo().toString());
                flowLog.setLocNo(locNo);
                flowLog.setSpare1(containerCode);
                flowLog.setOpType(3L);
                flowLog.setOrderNo(wp.getOrderNo());
                flowLog.setThreeCode(wp.getThreeCode());
                flowLog.setMatnr(wp.getMatnr());
                flowLog.setMaktx(wp.getMaktx());
                flowLog.setOrderPrevious(orderDetl.getAnfme());
                flowLog.setOrderCurrent(orderDetl.getAnfme());
                flowLog.setOrderChanged(0.0);
                flowLog.setQtyPrevious(orderDetl.getQty()-wp.getAnfme());
                flowLog.setQtyCurrent(orderDetl.getQty());
                flowLog.setQtyChanged(wp.getAnfme());
                flowLog.setLocPrevious(0.0D);
                flowLog.setLocCurrent(wp.getAnfme());
                flowLog.setLocChanged(wp.getAnfme());
                flowLog.setUserId(userId);
                flowLog.setAppeTime(now);
                if (!flowLogService.insert(flowLog)) {
                    throw new CoolException("同步半成品调拨单流水记录失败");
                }
            });
            //修改入库通知档状态
            agvWaitPakinService.updateIoStatus(containerCode,"Y");
@@ -760,6 +858,7 @@
    @Transactional
    public void cancelWrkMast(String workNo, Long userId,Integer type) {
        AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
        long flowId = snowflakeIdWorker.nextId();
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        }
@@ -825,8 +924,36 @@
                        // 回滚入库订单
                        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvWaitPakin.getThreeCode()).eq("matnr", agvWaitPakin.getMatnr()).eq("order_no", agvWaitPakin.getOrderNo()));
                        orderDetl.setQty(orderDetl.getQty() - agvWaitPakin.getAnfme());
                        if (!orderDetlService.updateById(orderDetl)) {
                            throw new CoolException("订单回滚失败");
                        }
                        FlowLog flowLog = new FlowLog();
                        flowLog.setFid(String.valueOf(flowId));
                        flowLog.setSpare2(wrkMast.getWrkNo().toString());
                        flowLog.setLocNo(locNo);
                        flowLog.setSpare1(wrkMast.getBarcode());
                        flowLog.setOpType(3L);
                        flowLog.setOrderNo(agvWaitPakin.getOrderNo());
                        flowLog.setThreeCode(agvWaitPakin.getThreeCode());
                        flowLog.setMatnr(agvWaitPakin.getMatnr());
                        flowLog.setMaktx(agvWaitPakin.getMaktx());
                        flowLog.setOrderPrevious(orderDetl.getAnfme());
                        flowLog.setOrderCurrent(orderDetl.getAnfme());
                        flowLog.setOrderChanged(0.0);
                        flowLog.setQtyPrevious(orderDetl.getQty());
                        flowLog.setQtyCurrent(orderDetl.getQty()-agvWaitPakin.getAnfme());
                        flowLog.setQtyChanged(-agvWaitPakin.getAnfme());
                        flowLog.setLocPrevious(0.0);
                        flowLog.setLocCurrent(0.0);
                        flowLog.setLocChanged(-agvWaitPakin.getAnfme());
                        flowLog.setUserId(userId);
                        flowLog.setAppeTime(new Date());
                        if (!flowLogService.insert(flowLog)) {
                            throw new CoolException("同步半成品调拨单流水记录失败");
                        }
                        // 删除组托档
                        if (!agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",agvWaitPakin.getSuppCode()).eq("matnr",agvWaitPakin.getMatnr()).eq("three_code",agvWaitPakin.getThreeCode()))) {
@@ -857,10 +984,40 @@
                        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvLocDetl.getThreeCode()).eq("matnr", agvLocDetl.getMatnr()).eq("order_no", "DB" + agvLocDetl.getOrderNo()));
                        orderDetl.setQty(orderDetl.getQty() + agvLocDetl.getAnfme());
                        if (!orderDetlService.updateById(orderDetl)) {
                            throw new CoolException("保存工作明细失败");
                            throw new CoolException("更新订单明细失败");
                        }
                        FlowLog flowLog = new FlowLog();
                        flowLog.setFid(String.valueOf(flowId));
                        flowLog.setSpare2(wrkMast.getWrkNo().toString());
                        flowLog.setLocNo(locNo);
                        flowLog.setSpare1(wrkMast.getBarcode());
                        flowLog.setOpType(8L);
                        flowLog.setOrderNo(agvLocDetl.getOrderNo());
                        flowLog.setThreeCode(agvLocDetl.getThreeCode());
                        flowLog.setMatnr(agvLocDetl.getMatnr());
                        flowLog.setMaktx(agvLocDetl.getMaktx());
                        flowLog.setOrderPrevious(orderDetl.getAnfme());
                        flowLog.setOrderCurrent(orderDetl.getAnfme());
                        flowLog.setOrderChanged(0.0);
                        flowLog.setQtyPrevious(orderDetl.getQty());
                        flowLog.setQtyCurrent(orderDetl.getQty() + agvLocDetl.getAnfme());
                        flowLog.setQtyChanged(-agvLocDetl.getAnfme());
                        flowLog.setLocPrevious(0.0);
                        flowLog.setLocCurrent(agvLocDetl.getAnfme());
                        flowLog.setLocChanged(agvLocDetl.getAnfme());
                        flowLog.setUserId(userId);
                        flowLog.setAppeTime(new Date());
                        if (!flowLogService.insert(flowLog)) {
                            throw new CoolException("同步半成品调拨单流水记录失败");
                        }
                    }
                } else {
                }
                // 自动调拨出库取消
            } else if(wrkMast.getIoType() == 108 || wrkMast.getIoType() == 111 || wrkMast.getIoType() == 112) {
                if (wrkMast.getIoType() == 112) {
@@ -895,6 +1052,33 @@
                    if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no","DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){
                        throw new CoolException("修改订单明细失败,请联系管理员"+agvLocDetl.getOrderNo()+agvLocDetl.getMatnr());
                    }
                    FlowLog flowLog = new FlowLog();
                    flowLog.setFid(String.valueOf(flowId));
                    flowLog.setSpare2(wrkMast.getWrkNo().toString());
                    flowLog.setLocNo(locNo);
                    flowLog.setSpare1(wrkMast.getBarcode());
                    flowLog.setOpType(9L);
                    flowLog.setOrderNo(agvLocDetl.getOrderNo());
                    flowLog.setThreeCode(agvLocDetl.getThreeCode());
                    flowLog.setMatnr(agvLocDetl.getMatnr());
                    flowLog.setMaktx(agvLocDetl.getMaktx());
                    flowLog.setOrderPrevious(orderDetl.getAnfme());
                    flowLog.setOrderCurrent(orderDetl.getAnfme());
                    flowLog.setOrderChanged(0.0);
                    flowLog.setQtyPrevious(orderDetl.getQty());
                    flowLog.setQtyCurrent(orderDetl.getQty() - agvLocDetl.getAnfme());
                    flowLog.setQtyChanged(- agvLocDetl.getAnfme());
                    flowLog.setLocPrevious(0.0);
                    flowLog.setLocCurrent(agvLocDetl.getAnfme());
                    flowLog.setLocChanged(agvLocDetl.getAnfme());
                    flowLog.setUserId(userId);
                    flowLog.setAppeTime(new Date());
                    if (!flowLogService.insert(flowLog)) {
                        throw new CoolException("同步半成品调拨单流水记录失败");
                    }
                }
                //出库取消
            } else {
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -218,6 +218,11 @@
    }
    @Override
    public LocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode) {
        return this.baseMapper.selectItemByOrderNo(locNo, matnr, batch,csocode,isoCode);
    }
    @Override
    public List<LocDetl> searchByLike(String orderNo, String matnr, String maktx, String specs, String locNo) {
        if (Cools.isEmpty(orderNo) && Cools.isEmpty(matnr) && Cools.isEmpty(maktx) && Cools.isEmpty(specs) && Cools.isEmpty(locNo)) {
            return new ArrayList<LocDetl>();
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -48,6 +48,11 @@
    }
    @Override
    public OrderDetl selectItem(String orderNo, String matnr, String threeCode) {
        return this.baseMapper.selectItemByOrderNo2(orderNo, matnr, threeCode);
    }
    @Override
    public OrderDetl selectItemNoneOfBatch(String orderNo, String matnr) {
        return this.baseMapper.selectItemNoneOfBatch(orderNo, matnr);
    }
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -84,6 +84,10 @@
    private DocTypeService docTypeService;
    @Autowired
    private AgvWaitPakinService agvWaitPakinService;
    @Autowired
    private AgvLocDetlService agvLocDetlService;
    @Autowired
    private FlowLogService flowLogService;
    @Override
    @Transactional
@@ -1119,10 +1123,12 @@
            throw new CoolException("当前工作状态无法取消");
        }
        // 订单关联
        long flowId = snowflakeIdWorker.nextId();
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        for (WrkDetl wrkDetl : wrkDetls) {
            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                if (!BaseController.isJSON(wrkDetl.getOrderNo())) {
                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme(),wrkDetl.getThreeCode(),wrkDetl.getDeadTime())) {
                        throw new CoolException("订单数据回滚失败");
                    }
@@ -1150,6 +1156,7 @@
                    }
                }
            }
        }
        // 取消操作人员记录
        wrkMast.setManuType("手动取消");
src/main/resources/mapper/LocDetlMapper.xml
@@ -76,6 +76,22 @@
        <include refid="batchSeq"></include>
    </select>
    <select id="selectItemByOrderNo" resultMap="BaseResultMap">
        select * from asr_loc_detl
        where 1=1
        and loc_no = #{locNo}
        and matnr = #{matnr}
        <if test="batch!=null and batch!='' ">
            and batch = #{batch}
        </if>
        <if test="csocode!=null and csocode!='' ">
            and three_code = #{csocode}
        </if>
        <if test="isocode!=null and isocode!='' ">
            and dead_time = #{isocode}
        </if>
    </select>
    <delete id="deleteItem">
        delete from asr_loc_detl
        where 1=1
src/main/resources/mapper/OrderDetlMapper.xml
@@ -96,6 +96,17 @@
        </if>
    </select>
    <select id="selectItemByOrderNo2" resultMap="BaseResultMap">
        select * from man_order_detl
        where 1=1
        and order_no = #{orderNo}
        and matnr = #{matnr}
        <if test="threeCode!=null and threeCode!='' ">
            and three_code = #{threeCode}
        </if>
    </select>
    <select id="selectItemNoneOfBatch" resultMap="BaseResultMap">
        select top 1 * from man_order_detl
        where 1=1
src/main/webapp/static/js/flowLog/flowLog.js
@@ -20,14 +20,17 @@
        toolbar: '#toolbar',
        cellMinWidth: 50,
        height: 'full-120',
        even: true,
        cols: [[
            {type: 'checkbox'}
            {type: 'checkbox', merge: ['fid']}
            ,{field: 'id', align: 'center',title: '数据编号',hide: true}
            ,{field: 'fid', align: 'center',title: '流水号'}
            ,{field: 'opType', align: 'center',title: '操作类型'}
            ,{field: 'fid', align: 'center',title: '流水号',merge: true}
            ,{field: 'spare2', align: 'center',title: '工作号'}
            ,{field: 'opType$', align: 'center',title: '操作类型'}
            ,{field: 'orderNo', align: 'center',title: '订单号'}
            ,{field: 'threeCode', align: 'center',title: '销售单号'}
            ,{field: 'locNo', align: 'center',title: '库位号'}
            ,{field: 'spare1', align: 'center',title: '货架码'}
            ,{field: 'matnr', align: 'center',title: '物料号'}
            ,{field: 'maktx', align: 'center',title: '物料名称'}
            ,{field: 'orderPrevious', align: 'center',title: '订单数量变更前'}
src/main/webapp/views/flowLog/flowLog.html
@@ -19,19 +19,54 @@
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="id" placeholder="编号" autocomplete="off">
                        </div>
                    </div>
                     <div class="layui-inline" style="width: 300px">
                        <div class="layui-input-inline">
                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">
                            <input class="layui-input" type="text" name="fid" placeholder="流水号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off">
                            <input class="layui-input" type="text" name="spare2" placeholder="工作号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="order_no" placeholder="订单号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="three_code" placeholder="销售单号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="loc_no" placeholder="库位号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="spare1" placeholder="货架码" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="matnr" placeholder="物料号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="userId" placeholder="操作员" autocomplete="off">
                        </div>
                    </div>
<!--                     <div class="layui-inline" style="width: 300px">-->
<!--                        <div class="layui-input-inline">-->
<!--                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">-->
<!--                        </div>-->
<!--                    </div>-->
<!--                    <div class="layui-inline">-->
<!--                        <div class="layui-input-inline">-->
<!--                            <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off">-->
<!--                        </div>-->
<!--                    </div>-->
                    <div class="layui-inline">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
@@ -84,6 +119,7 @@
                        <input class="layui-input" name="fid" placeholder="请输入流水号">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">操作类型: </label>
                    <div class="layui-input-block">