自动化立体仓库 - WMS系统
whycq
2024-06-27 0cc7b985d6a1c89addcc281de884f25050e27bd7
# bom档案
21个文件已修改
3个文件已添加
306 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakinLog.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetlLog.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CheckBom.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CombParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WaitPakinMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/logo1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/logo2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/login.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -59,6 +59,8 @@
    private CommonService commonService;
    @Autowired
    private MatService matService;
    @Autowired
    private BomMatService bomMatService;
    // 商品上架
    @RequestMapping("/mat/onSale/auth")
@@ -111,6 +113,46 @@
        return R.ok("组托成功");
    }
    @RequestMapping("/comb/auth2")
    @ManagerAuth(memo = "组托")
    public R comb2(@RequestBody CombParam combParam){
        mobileService.comb2(combParam, getUserId());
        return R.ok("组托成功");
    }
    @RequestMapping("/comb/checkBom")
    @ManagerAuth(memo = "校验Bom")
    public R checkBom(@RequestBody CheckBom checkBom){
        BomMat bomMat = new BomMat();
        // 没有输入bom号正常组托
        if (Cools.isEmpty(checkBom.getBomCode())) {
            return R.ok();
        }
        if (Cools.isEmpty(checkBom.getMatnr())) {
            return R.ok().add(bomMat);
        } else {
            // 检查是否在bom清单内
            bomMat = bomMatService.selectOne(new EntityWrapper<BomMat>().eq("unit_num", checkBom.getBomCode()).eq("element_num", checkBom.getMatnr()));
            if (Cools.isEmpty(bomMat)) {
                throw new CoolException("当前物料" + checkBom.getMatnr() + "不在Bom清单内");
            } else {
                // 检查库存中是否有当前bom的物料
                Double bomQyt = locDetlService.getBomQyt(checkBom.getBomCode(), checkBom.getMatnr());
                if (!Cools.isEmpty(bomQyt)) {
                    bomMat.setZpalletAnfme(bomMat.getZpalletAnfme() - bomQyt);
                }
                Double bomQty = wrkDetlService.getBomQty(checkBom.getBomCode(), checkBom.getMatnr());
                if (!Cools.isEmpty(bomQty)) {
                    bomMat.setZpalletAnfme(bomMat.getZpalletAnfme() - bomQty);
                }
                // 检查工作档中是否有当前bom的物料
            }
        }
        return R.ok().add(bomMat);
    }
    @RequestMapping("/pack/get/auth")
    @ManagerAuth
    public R packGet(@RequestParam String barcode){
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -158,6 +158,10 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    @ApiModelProperty(value= "bom号")
    @TableField("bom_code")
    private String bomCode;
    public String getLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = service.selectById(this.locNo);
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -160,6 +160,10 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    @ApiModelProperty(value= "bom号")
    @TableField("bom_code")
    private String bomCode;
    public String getBeBatch$(){
        if (null == this.beBatch){ return null; }
        switch (this.beBatch){
src/main/java/com/zy/asrs/entity/WaitPakinLog.java
@@ -152,6 +152,10 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    @ApiModelProperty(value= "bom号")
    @TableField("bom_code")
    private String bomCode;
    public String getBeBatch$(){
        if (null == this.beBatch){ return null; }
        switch (this.beBatch){
src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -270,6 +270,10 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    @ApiModelProperty(value= "bom号")
    @TableField("bom_code")
    private String bomCode;
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
            return "";
src/main/java/com/zy/asrs/entity/WrkDetlLog.java
@@ -271,6 +271,10 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    @ApiModelProperty(value= "bom号")
    @TableField("bom_code")
    private String bomCode;
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
            return "";
src/main/java/com/zy/asrs/entity/param/CheckBom.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class CheckBom {
    // bom号
    private String bomCode;
    // 物料号
    private String matnr;
}
src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -10,6 +10,9 @@
@Data
public class CombParam {
    // bom号
    private String bomCode;
    // 单据编号
    private String orderNo;
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -67,4 +67,5 @@
    Double selectLocDetlSumQty(String locNo);
    Double getBomQyt(String bomCode,String matnr);
}
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -23,4 +23,6 @@
    int updateInspect( @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch);
    List<WrkDetl> selectPakoutQuery(@Param("staNo")Integer staNo, @Param("matnr")String matnr);
    Double getBomQty(String bomCode,String matnr);
}
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -55,4 +55,6 @@
    List<LocDetl> unreason();
    Double getLocDetlSumQty(String locNo);
    Double getBomQyt(String bomCode,String matnr);
}
src/main/java/com/zy/asrs/service/MobileService.java
@@ -5,6 +5,7 @@
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.param.CheckBom;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.OffSaleParam;
@@ -19,6 +20,16 @@
    void comb(CombParam param, Long userId);
    /**
     * 组托
     */
    void comb2(CombParam param, Long userId);
    /**
     * 校验bom
     */
    R checkBom(CheckBom param, Long userId);
    /**
     * 上架
     */
    void onSale(CombParam param);
src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -23,4 +23,6 @@
    List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr);
    Double getBomQty(String bomCode,String matnr);
}
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -116,4 +116,9 @@
    public Double getLocDetlSumQty(String locNo) {
        return this.baseMapper.selectLocDetlSumQty(locNo);
    }
    @Override
    public Double getBomQyt(String bomCode,String matnr) {
        return this.baseMapper.getBomQyt(bomCode,matnr);
    }
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -10,6 +10,7 @@
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CheckBom;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.OffSaleParam;
@@ -78,6 +79,9 @@
    private  DocTypeService docTypeService;
    @Autowired
    private MatV2Service matV2Service;
    @Autowired
    private BomMatService bomMatService;
    @Override
    @Transactional
    public void comb(CombParam param, Long userId) {
@@ -220,6 +224,178 @@
    }
    @Override
    @Transactional
    public void comb2(CombParam param, Long userId) {
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
        if(param.getCombMats().stream().anyMatch(obj -> obj.getAnfme() == null)){
            throw new CoolException("入库物料数量不能为空");
        }
        // 判断是否有相同条码的数据
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
            throw new CoolException(param.getBarcode() + "数据正在进行入库");
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
        WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
        if (wrkMast != null && wrkMast.getIoType() < 100){
            throw new CoolException("工作档/库存条码数据已存在===>>" + param.getBarcode());
        }
        if (countLoc > 0 ) {
            throw new CoolException("工作档/库存条码数据已存在===>>" + param.getBarcode());
        }
        //设置非null批号,
        for (CombParam.CombMat combMat : param.getCombMats()) {
            if (combMat.getBatch() == null){
                combMat.setBatch("");
            }
        }
        Date now = new Date();
        // 无单组托
        if (Cools.isEmpty(param.getCombMats().get(0).getOrderNo())) {
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    assert one != null;
                    one.setAnfme(one.getAnfme() + detlDto.getAnfme());
                } else {
                    detlDtos.add(detlDto);
                }
            });
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                WaitPakin waitPakin = new WaitPakin();
                if (Cools.isEmpty(mat)) {
                    MatV2 matV2 = matV2Service.selectOne(new EntityWrapper<MatV2>().eq("matnr", detlDto.getMatnr()));
                    if(Cools.isEmpty(matV2)){
                        throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
                    }
                    waitPakin.sync(matV2);
                    waitPakin.setBrand("组件");
                } else {
                    waitPakin.sync(mat);
                }
                // 校验是否为bom入库  bom入库的数量不能超过库存原有数量
                if (!Cools.isEmpty(param.getBomCode())) {
                    BomMat bomMat = bomMatService.selectOne(new EntityWrapper<BomMat>().eq("unit_num", param.getBomCode()).eq("element_num", detlDto.getMatnr()));
                    Double bomQyt = locDetlService.getBomQyt(param.getBomCode(), detlDto.getMatnr());
                    if (!Cools.isEmpty(bomQyt)) {
                        bomMat.setZpalletAnfme(bomMat.getZpalletAnfme() - bomQyt);
                    }
                    Double bomQty = wrkDetlService.getBomQty(param.getBomCode(), detlDto.getMatnr());
                    if (!Cools.isEmpty(bomQty)) {
                        bomMat.setZpalletAnfme(bomMat.getZpalletAnfme() - bomQty);
                    }
                    if (bomMat.getZpalletAnfme() == 0.0D) {
                        throw new CoolException(detlDto.getMatnr() + "当前物料已入最大数量");
                    } else {
                        if (bomMat.getZpalletAnfme() < detlDto.getAnfme()) {
                            throw new CoolException(detlDto.getMatnr() + "当前物料最多可入" + bomMat.getZpalletAnfme() + "件");
                        }
                    }
                }
                waitPakin.setBatch(detlDto.getBatch());
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
                waitPakin.setAnfme(detlDto.getAnfme());  // 数量
                waitPakin.setStatus("Y");    // 状态
                waitPakin.setAppeUser(userId);
                waitPakin.setBomCode(param.getBomCode());
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
            }
            // 关联组托
        } else {
            for (CombParam.CombMat combMat : param.getCombMats()) {
                // 生成入库通知档
                Order order = orderService.selectByNo(combMat.getOrderNo());
                //判断订单类型是否是入库
                DocType docType=docTypeService.selectById(order.getDocType());
                if(docType.getPakin()!=1 || docType.getStatus()!=1){
                    throw new CoolException("订单为出库订单,不能组托!");
                }
                if (order.getSettle() > 2) {
                    throw new CoolException("单据编号已过期");
                }
                OrderDetl orderDetl = orderDetlService.selectItem(combMat.getOrderNo(), combMat.getMatnr(), combMat.getBatch());
                if (orderDetl == null) {
                    throw new CoolException("找不到组托的单据明细");
                }
                //订单数-工作中的数量-组托数量
                if ( orderDetl.getAnfme() - orderDetl.getWorkQty() - combMat.getAnfme()<0) {
                    throw new CoolException("组托数量已超出订单需求量,请检查是否有其他的组托已完成");
                }
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(order.getId(), combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
                Mat mat = matService.selectByMatnr(combMat.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(combMat.getMatnr() + "商品档案不存在");
                }
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
                waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
                waitPakin.setBatch(combMat.getBatch());     // 序列码
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
                waitPakin.setAnfme(combMat.getAnfme());  // 数量
                waitPakin.setStatus("Y");    // 状态
                waitPakin.setAppeUser(userId);
                waitPakin.setAppeTime(now);
                waitPakin.setBomCode(param.getBomCode());
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
//                DetlDto detlDto = new DetlDto(combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme());
//                if (DetlDto.has(detlDtos, detlDto)) {
//                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
//                    assert one != null;
//                    one.setAnfme(one.getAnfme() + detlDto.getAnfme());
//                } else {
//                }
                orderService.updateSettle(order.getId(), 2L, userId);
            }
        }
    }
    @Override
    @Transactional
    public R checkBom(CheckBom param, Long userId) {
        return R.ok();
    }
    // 商品上架
    @Override
    public void onSale(CombParam param) {
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -835,7 +835,6 @@
            locDetl.sync(mat);
            locDetl.setZpallet(zpallet);
            locDetl.setBatch(adjust.getBatch());
            locDetl.setBarcode(locDetls.get(0).getBarcode());
            locDetl.setLocNo(locMast.getLocNo());
            locDetl.setAnfme(adjust.getCount()); // 数量
            locDetl.setModiUser(userId); // 操作人员信息
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -111,4 +111,9 @@
    public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr) {
        return this.baseMapper.selectPakoutQuery(staNo, matnr);
    }
    @Override
    public Double getBomQty(String bomCode,String matnr) {
        return this.baseMapper.getBomQty(bomCode,matnr);
    }
}
src/main/resources/mapper/LocDetlMapper.xml
@@ -327,5 +327,12 @@
        where loc_no=#{locNo}
    </select>
    <select id="getBomQyt" resultType="double">
        select SUM(anfme) anfme
        from asr_loc_detl
        where bom_code = #{bomCode}
        and matnr = #{matnr}
    </select>
</mapper>
src/main/resources/mapper/WaitPakinMapper.xml
@@ -47,6 +47,7 @@
        <result column="appe_time" property="appeTime" />
        <result column="appe_user" property="appeUser" />
        <result column="memo" property="memo" />
        <result column="bom_code" property="bomCode" />
    </resultMap>
</mapper>
src/main/resources/mapper/WrkDetlMapper.xml
@@ -45,6 +45,7 @@
        <result column="appe_user" property="appeUser" />
        <result column="appe_time" property="appeTime" />
        <result column="memo" property="memo" />
        <result column="bom_code" property="bomCode" />
    </resultMap>
    <sql id="batchSeq">
@@ -108,4 +109,11 @@
        and awd.matnr + '-' + awd.batch = #{matnr}
    </select>
    <select id="getBomQty" resultType="double">
        select SUM(anfme) anfme
        from asr_wrk_detl
        where bom_code = #{bomCode}
        and matnr = #{matnr}
    </select>
</mapper>
src/main/webapp/static/image/logo1.png
src/main/webapp/static/image/logo2.png
src/main/webapp/views/index.html
@@ -26,7 +26,7 @@
  <!-- 头部 -->
  <div class="layui-header">
    <div class="layui-logo">
      <img src="../static/image/logo.png" style="display: inline-block; width: 40%;height: auto">
      <img src="../static/image/logo2.png" style="display: inline-block; width: 40%;height: auto">
      <!--          <span style="margin-top: 0; letter-spacing: 10px">中扬立库</span>-->
      <!--          <img src="../static/image/logo.svg"/>-->
      <!--          <cite>中扬 - Zoneyung</cite>-->
src/main/webapp/views/login.html
@@ -53,7 +53,7 @@
                    z-index: 100;
                    top: 22px;
                    left: 20px;">
        <img src="../static/image/logo.png" alt="" style="width: 20%">
        <img src="../static/image/logo2.png" alt="" style="width: 20%">
      </div>
      <div class="p-sketch-outline">
        <h2 class="p-sketch-outline__title">Automatic Storage and Retrieval System</h2>
@@ -67,8 +67,8 @@
    <div id="sidebar">
      <div class="login-contain">
        <div class="login-box">
          <img src="../static/image/logo.png" alt="" style="width: 80%">
          <span class="login100-form-title p-t-20 p-b-45">中扬立库</span>
          <img src="../static/image/logo1.png" alt="" style="width: 80%">
          <!--<span class="login100-form-title p-t-20 p-b-45">中扬立库</span>-->
          <span class="login100-form-title p-t-20 p-b-45" style="margin: 15px 0;color: #868686;font-size: 24px">WMS</span>
          <div class="wrap-input100 validate-input m-b-10" data-validate="请输入用户名">
            <input id="username" class="input100" type="text" name="username" placeholder="username" autocomplete="off">