自动化立体仓库 - WMS系统
#
whycq
2024-04-23 cb19fbb1b76402c87849bb055010701a66efc623
#
9个文件已修改
1个文件已添加
205 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/AgvLocDetlController.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvMobileController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/AgvLocDetl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PickParam.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvMobileService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderDetlMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvLocDetlController.java
@@ -9,8 +9,10 @@
import com.core.common.R;
import com.zy.asrs.entity.AgvLocDetl;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.service.AgvLocDetlService;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
@@ -31,6 +33,8 @@
    private AgvLocDetlService agvLocDetlService;
    @Autowired
    private MatService matService;
    @Autowired
    private OrderDetlService orderDetlService;
    @RequestMapping(value = "/locDetl/list/auth")
    @ManagerAuth
@@ -72,6 +76,55 @@
        return R.ok(agvLocDetlService.selectPage(new Page<>(curr, limit), wrapper));
    }
    @RequestMapping(value = "/locDetl/list/auth/v2")
    @ManagerAuth
    public R listV2(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String orderByField,
                  @RequestParam(required = false)String orderByType,
                  @RequestParam(required = false)String condition,
                  @RequestParam Map<String, Object> param,
                  @RequestParam(required = false)Boolean unreason){
        if (!Cools.isEmpty(unreason) && unreason) {
            return R.ok(agvLocDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvLocDetl>()
                    .where(" DATALENGTH( batch ) != 11 or\n" +
                            "            batch LIKE '%[a-z]%'")));
        }
        param.remove("unreason");
        String row = "";
        EntityWrapper<AgvLocDetl> wrapper = new EntityWrapper<>();
        if (param.get("row") != null) {
            String chooseRow = (String) param.get("row");
            if (chooseRow.length() == 1) {
                row = "0" + chooseRow;
                param.remove("row");
            }else {
                row = chooseRow;
                param.remove("row");
            }
        }
        excludeTrash(param);
        convert(param, wrapper);
        allLike(AgvLocDetl.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        if (!row.equals("")){
            wrapper.and()
                    .where("loc_no like '" +row +"%'");
        }
        Page<AgvLocDetl> agvLocDetlPage = agvLocDetlService.selectPage(new Page<>(curr, limit), wrapper);
        for (AgvLocDetl record : agvLocDetlPage.getRecords()) {
            OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", record.getThreeCode()).eq("matnr", record.getMatnr()).ne("order_no", record.getOrderNo()));
            if (orderDetl.getAnfme() - orderDetl.getQty() > 0) {
                record.setStock(orderDetl.getAnfme() - orderDetl.getQty());
            } else {
                record.setStock(-1D);
            }
            record.setOrderNo(orderDetl.getOrderNo());
        }
        return R.ok(agvLocDetlPage);
    }
    @RequestMapping(value = "/locDetl/statis/auth")
    @ManagerAuth(memo = "AGV库存明细统计")
    public R statis(@RequestParam(defaultValue = "1")Integer curr,
src/main/java/com/zy/asrs/controller/AgvMobileController.java
@@ -10,6 +10,7 @@
import com.zy.asrs.entity.param.AgvMobileStartPakin;
import com.zy.asrs.entity.param.AgvMobileStartParam;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.PickParam;
import com.zy.asrs.service.*;
import com.zy.common.web.BaseController;
import lombok.Synchronized;
@@ -58,6 +59,14 @@
        return R.ok();
    }
    //    再次拣料
    @RequestMapping("/pick/again/auth")
//    @ManagerAuth(memo = "组托")
    public R pickAgain(@RequestBody PickParam pickParams){
        agvMobileService.pickAgain(pickParams, 1l);
        return R.ok("组托成功");
    }
    /*
    绑定托盘条码与暂存位
     */
src/main/java/com/zy/asrs/entity/AgvLocDetl.java
@@ -161,6 +161,13 @@
    @ApiModelProperty(value= "库存冻结{1:正常,0:冻结}")
    private Integer stockFreeze;
    /**
     * 库存数量
     */
    @ApiModelProperty(value= "可出数量")
    @TableField(exist = false)
    private Double stock;
    public String getLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = service.selectById(this.locNo);
src/main/java/com/zy/asrs/entity/param/PickParam.java
New file
@@ -0,0 +1,37 @@
package com.zy.asrs.entity.param;
import lombok.Data;
import java.util.List;
@Data
public class PickParam {
    // 工作号
    private Integer wrkNo;
    private String locNo;
    // 拣料数量
    private List<Pick> picks;
    @Data
    public static class Pick {
        // 物料编号
        private String matnr;
        // 单据编号
        private String orderNo;
        //销售订单号
        private String threeCode;
        //销售订单号
        private String suppCode;
        // 拣料数量
        private Double count;
    }
}
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -45,4 +45,6 @@
    List<OrderDetl> selectByMatnr(@Param("matnr") String matnr);
    List<OrderDetl> getPakoutDetlPage(Map<String, Object> map);
}
src/main/java/com/zy/asrs/service/AgvMobileService.java
@@ -3,6 +3,7 @@
import com.zy.asrs.entity.AgvBasDevp;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.PickParam;
import java.util.List;
@@ -14,6 +15,11 @@
    String comb(CombParam param, Long userId);
    /**
     * 组托
     */
    String pickAgain(PickParam pickParams, Long userId);
    /**
     * 盘点
     */
    void adjust(MobileAdjustParam param, Long userId);
src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -12,8 +12,6 @@
    Page<OrderDetl> getPakoutPage(Page<OrderDetl> page);
    Page<OrderDetl> getPakoutDetlPage(Page<OrderDetl> page);
    OrderDetl selectItem(Long orderId, String matnr, String batch, String csocode, String isoCode);
    OrderDetl selectItem(String orderNo, String matnr, String batch, String csocode, String isoCode);
@@ -38,4 +36,5 @@
    public OrderDetl selectByOrderNoAndMatnr(String orderNo, String matnr, String csocode, String isoseq);
}
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
@@ -7,6 +7,7 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.PickParam;
import com.zy.asrs.service.*;
import com.zy.common.model.DetlDto;
import lombok.extern.slf4j.Slf4j;
@@ -44,6 +45,8 @@
    private AgvWrkMastService agvWrkMastService;
    @Autowired
    private AgvWorkService agvWorkService;
    @Autowired
    private AgvWrkDetlService agvWrkDetlService;
    /*
@@ -90,6 +93,65 @@
    }
    /*
    组托 + 绑定暂存位
     */
    @Override
    @Transactional
    public String pickAgain(PickParam pickParams, Long userId) {
        Date now = new Date();
        List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", pickParams.getLocNo()));
        for (PickParam.Pick pick : pickParams.getPicks()) {
            if (pick.getCount().equals(0D)) continue;
            AgvWrkDetl wrkDetl = new AgvWrkDetl();
            Mat mat = matService.selectByMatnr(pick.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(pick.getMatnr() + "商品不存在");
            }
            wrkDetl.sync(mat);
            wrkDetl.setWrkNo(pickParams.getWrkNo());
            wrkDetl.setOrderNo(pick.getOrderNo());
            wrkDetl.setIoTime(now);
            wrkDetl.setAnfme(pick.getCount()); // 数量
            wrkDetl.setSuppCode(pick.getSuppCode()); // 托盘条码
            wrkDetl.setAppeUser(userId);
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setThreeCode(pick.getThreeCode());
            agvWrkDetlService.insert(wrkDetl);
            // 更新订单
            OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", pick.getOrderNo()).eq("matnr", pick.getMatnr()).eq("three_code",pick.getThreeCode()));
            orderDetl.setQty(orderDetl.getQty() + pick.getCount());
            if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no", pick.getOrderNo()).eq("matnr", pick.getMatnr()).eq("three_code",pick.getThreeCode()))){
                throw new CoolException("修改订单明细失败,请联系管理员"+pick.getOrderNo()+pick.getMatnr());
            }
        }
        //  确认是否全部出库
        int sameNumber = 0;
        List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", pickParams.getWrkNo()));
        for (AgvLocDetl agvLocDetl : agvLocDetls) {
            for (AgvWrkDetl agvWrkDetl : agvWrkDetls) {
                if (agvLocDetl.getMatnr().equals(agvWrkDetl.getMatnr())
                    && agvLocDetl.getThreeCode().equals(agvWrkDetl.getThreeCode())
                    && agvLocDetl.getSuppCode().equals(agvWrkDetl.getSuppCode())
                    && agvLocDetl.getAnfme().equals(agvWrkDetl.getAnfme())) {
                    sameNumber++;
                }
            }
        }
        if (agvLocDetls.size() == sameNumber) {
            AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("wrk_no", pickParams.getWrkNo()));
            agvWrkMast.setIoType(101);
            agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", pickParams.getWrkNo()));
        }
        return "组托成功,绑定站点成功";
    }
    /*
    AGV无单组托
     */
    private void NoOrderComb(CombParam param, Long userId){
@@ -102,6 +164,8 @@
        });
    }
    /*
    AGV有单组托
     */
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -31,13 +31,6 @@
    }
    @Override
    public Page<OrderDetl> getPakoutDetlPage(Page<OrderDetl> page) {
        page.setRecords(baseMapper.getPakoutPage(page.getCondition()));
        page.setTotal(baseMapper.getPakoutPageCount(page.getCondition()));
        return page;
    }
    @Override
    public OrderDetl selectItem(Long orderId, String matnr, String batch, String csocode, String isoCode) {
        return this.baseMapper.selectItem(orderId,matnr,batch,csocode,isoCode);
    }
src/main/resources/mapper/OrderDetlMapper.xml
@@ -282,4 +282,21 @@
        and matnr = #{matnr}
    </select>
    <select id="getPakoutDetlPage" resultMap="BaseResultMap">
        select * from
        (
        select
        ROW_NUMBER() over (order by mo.create_time desc) as row,
        mod.*
        from man_order_detl mod
        inner join man_order mo on mod.order_id = mo.id
        inner join man_doc_type mdt on mo.doc_type = mdt.doc_id
        where 1=1
        and mo.settle &lt;= 2
        and mo.status = 1
        and mdt.pakout = 1
        <include refid="pakOutPageCondition"></include>
        ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
    </select>
</mapper>