自动化立体仓库 - WMS系统
#
LSH
2023-05-16 41012324d4afa371ac50d45e3e93e802cf8d6e28
#
5个文件已修改
6个文件已添加
518 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ManPakOutController.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ManLocDetl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ManPakOut.java 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/ManPakOutMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/ManPakOutService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ManPakOutServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/LocDto.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ManPakOutMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/out.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ManPakOutController.java
New file
@@ -0,0 +1,104 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OrderDomainParam;
import com.zy.asrs.service.*;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@RestController
public class ManPakOutController extends BaseController {
    @Autowired
    private ManPakOutService manPakOutService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private ManLocDetlService manLocDetlService;
    @Autowired
    private OrderService orderService;
    @Autowired
    private DocTypeService docTypeService;
    @RequestMapping(value = "/ManPakOut/list/auth")
    @ManagerAuth
    public R list(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String orderByField,
                  @RequestParam(required = false)String orderByType,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<ManPakOut> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else {
            wrapper.orderBy("create_time",false);
        }
        return R.ok(manPakOutService.selectPage(new Page<>(curr, limit), wrapper));
    }
    @RequestMapping(value = "/ManPakOut/detailed/auth")
    @ManagerAuth
    public R detailed(@RequestParam(defaultValue = "1")Integer curr,
                      @RequestParam(defaultValue = "10")Integer limit,
                      @RequestParam(required = false)String orderByField,
                      @RequestParam(required = false)String orderByType,
                      @RequestParam Map<String, Object> param){
        EntityWrapper<ManPakOut> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else {
            wrapper.orderBy("create_time",false);
        }
        wrapper.isNotNull("name");
        Page<ManPakOut> manPakOutPage = manPakOutService.selectPage(new Page<>(curr, limit), wrapper);
        return R.ok(manPakOutPage);
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
            if (val.contains(RANGE_TIME_LINK)){
                String[] dates = val.split(RANGE_TIME_LINK);
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
            }
        }
    }
    @RequestMapping("/manPakOut/notIssued")
    public R notIssued(){
        List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 1L).or().eq("settle", 2L));
        List<Order> orders1=new ArrayList<Order>();
        try {
            for (Order order:orders){
                DocType docType = docTypeService.selectById(order.getDocType());
                if (docType.getPakout()==1){
                    orders1.add(order);
                }
            }
        }catch (Exception e){
            return R.error("获取订单状态失败");
        }
        return R.ok(orders1);
    }
}
src/main/java/com/zy/asrs/controller/OutController.java
@@ -1,12 +1,11 @@
package com.zy.asrs.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDto;
import com.zy.common.model.TaskDto;
@@ -41,6 +40,10 @@
    private WorkService workService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private ManPakOutService manPakOutService;
    @Autowired
    private ManLocDetlService manLocDetlService;
    @PostMapping("/out/pakout/orderDetlIds/auth")
@@ -75,6 +78,7 @@
//                    //速腾只有全板,所以只能101全板出库
//                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), 101);
                    locDto.setStaNos(staNos);
                    locDto.setManu(locDetl.getManu());
                    locDtos.add(locDto);
                    exist.add(locDetl.getLocNo());
                    // 剩余待出数量递减
@@ -96,8 +100,23 @@
    @PostMapping("/out/pakout/auth")
    @ManagerAuth(memo = "订单出库")
    public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException {
        int[][] is=new int[locDtos.size()][2];
        for (int i=0;i<locDtos.size();i++){
            LocDto locDto=locDtos.get(locDtos.size()-1-i);
            if (locDto.getLocNo()==null || locDto.getManu().equals("平库")){
                is[i][0]=1;
            }else {
                is[i][0]=0;
            }
            is[i][1]=locDtos.size()-1-i;
        }
        for (int[] i:is){
            if (i[0]==1){
                locDtos.remove(i[1]);
            }
        }
        if (Cools.isEmpty(locDtos)) {
            return R.parse(BaseRes.PARAM);
            return R.error("立库参数为空,请生成拣货单,平库拣货出库");
        }
        boolean lack = true;
        for (LocDto locDto : locDtos) {
@@ -133,4 +152,95 @@
        return R.ok();
    }
    @PostMapping("/out/pakout2/auth")
    @ManagerAuth(memo = "生成拣货单")
    public synchronized R pakout2(@RequestBody List<LocDto> locDtos) throws InterruptedException {
        int[][] is = new int[locDtos.size()][2];
        for (int i = 0; i < locDtos.size(); i++) {
            LocDto locDto = locDtos.get(locDtos.size() - 1 - i);
            if (locDto.getLocNo() == null || locDto.getManu().equals("立库")) {
                is[i][0] = 1;
            } else {
                is[i][0] = 0;
            }
            is[i][1] = locDtos.size() - 1 - i;
        }
        for (int[] i : is) {
            if (i[0] == 1) {
                locDtos.remove(i[1]);
            }
        }
        if (Cools.isEmpty(locDtos)) {
            return R.error("平库参数为空,没有生成拣货单");
        }
        boolean lack = true;
        for (LocDto locDto : locDtos) {
            if (!locDto.isLack()) {
                lack = false;
                break;
            }
        }
        if (lack) {
            return R.error("库存不足");
        }
        for (LocDto locDto:locDtos){
            ManLocDetl manLocDetl = manLocDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch());
            if (!(locDto.getAnfme()>manLocDetl.getAnfme())) {
                manLocDetl.setStatus(0);
                if (manLocDetlService.update(manLocDetl, new EntityWrapper<ManLocDetl>().eq("uuid", manLocDetl.getUuid()))) {
                    if (addPakOUT(locDto).equals(R.ok())) {
                        Order order = orderService.selectByNo(locDto.getOrderNo());
                        if (Cools.isEmpty(order)){
                            return R.error("查询订单失败,请联系管理员"+locDto.getOrderNo());
                        }
                        if (order.getSettle()==1){
                            if (!orderService.updateSettle(order.getId(),2L,null)){
                                return R.error("修改订单状态失败,请联系管理员"+locDto.getOrderNo());
                            }
                        }
                        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", locDto.getOrderNo()).eq("matnr", locDto.getMatnr()));
                        if (Cools.isEmpty(orderDetl)){
                            return R.error("查询订单明细失败,请联系管理员"+locDto.getOrderNo()+locDto.getMatnr());
                        }
                        orderDetl.setWorkQty(orderDetl.getWorkQty()+locDto.getAnfme());
                        if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no", locDto.getOrderNo()).eq("matnr", locDto.getMatnr()))){
                            return R.error("修改订单明细失败,请联系管理员"+locDto.getOrderNo()+locDto.getMatnr());
                        }
                    } else {
                        return R.error("添加拣货明细失败,请联系管理员"+locDto.getOrderNo()+locDto.getMatnr());
                    }
                }
            }
        }
        return R.ok();
    }
    private R addPakOUT(LocDto locDto){
        ManPakOut manPakOut=new ManPakOut();
        manPakOut.setWrkNo(locDto.getOrderNo()+"-"+System.currentTimeMillis());
        manPakOut.setWrkSts((long)1);
        manPakOut.setAnfme(locDto.getAnfme());
        manPakOut.setLocNo(locDto.getLocNo());
        manPakOut.setMatnr(locDto.getMatnr());
        manPakOut.setMaktx(locDto.getMaktx());
        manPakOut.setDocNum(locDto.getOrderNo());
        manPakOut.setStatus(0);
        manPakOut.setCreateTime(new Date());
        manPakOut.setBatch(locDto.getBatch());
        manPakOut.setUpdateTime(new Date());
        if (Cools.isEmpty(manPakOutService.selectOne(new EntityWrapper<ManPakOut>().eq("doc_num",locDto.getOrderNo())))){
            manPakOut.setName(locDto.getMaktx());
        }
        try{
            if (!manPakOutService.insert(manPakOut)){
                return R.error("添加拣货明细失败,请联系管理员");
            }
        }catch (Exception e){
            return R.error("添加拣货明细失败,请联系管理员");
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/entity/ManLocDetl.java
@@ -26,6 +26,14 @@
    private static final long serialVersionUID = 1L;
    /**
     * uuid
     */
    @ApiModelProperty(value= "uuid")
    @TableId(value = "uuid", type = IdType.ID_WORKER_STR)
    @TableField("uuid")
    private String uuid;
    /**
     * 所属项目
     */
    @ApiModelProperty(value= "所属项目")
@@ -204,7 +212,7 @@
    public ManLocDetl() {}
    public ManLocDetl(Long hostId, String locNo,Long nodeId,String zpallet,Double anfme,String matnr,String maktx,String name,String specs,String model,String batch,String unit,String barcode,Long docId,String docNum,String custName,Integer itemNum,Integer count,Double weight,Integer status,Long createBy,Date createTime,Long updateBy,Date modiTime,String memo) {
    public ManLocDetl(Long hostId, String locNo,Long nodeId,String zpallet,Double anfme,String matnr,String maktx,String name,String specs,String model,String batch,String unit,String barcode,Long docId,String docNum,String custName,Integer itemNum,Integer count,Double weight,Integer status,Long createBy,Date createTime,Long updateBy,Date modiTime,String memo,String uuid) {
        this.hostId = hostId;
        this.nodeId = nodeId;
        this.zpallet = zpallet;
@@ -228,6 +236,7 @@
        this.updateBy = updateBy;
        this.modiTime = modiTime;
        this.memo = memo;
        this.uuid = uuid;
    }
//    LocDetl locDetl = new LocDetl(
src/main/java/com/zy/asrs/entity/ManPakOut.java
New file
@@ -0,0 +1,220 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@TableName("man_pakout")
public class ManPakOut {
    private static final long serialVersionUID = 1L;
    /**
     * 任务号
     */
    @ApiModelProperty(value= "任务号")
    @TableId(value = "wrk_no", type = IdType.INPUT)
    @TableField("wrk_no")
    private String wrkNo;
    /**
     * 工作状态
     */
    @ApiModelProperty(value= "工作状态")
    @TableField("wrk_sts")
    private Long wrkSts;
    /**
     * 托盘号
     */
    @ApiModelProperty(value= "托盘号")
    private String zpallet;
    /**
     * 出库数量
     */
    @ApiModelProperty(value= "出库数量")
    private Double anfme;
    /**
     * 关联货位
     */
    @ApiModelProperty(value= "关联货位")
    @TableField("node_id")
    private Long nodeId;
    /**
     * 货位
     */
    @ApiModelProperty(value= "货位")
    @TableField("loc_no")
    private String locNo;
    /**
     * 商品编码
     */
    @ApiModelProperty(value= "商品编码")
    private String matnr;
    /**
     * 商品名称
     */
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    /**
     * 名称
     */
    @ApiModelProperty(value= "名称")
    private String name;
    /**
     * 规格
     */
    @ApiModelProperty(value= "规格")
    private String specs;
    /**
     * 型号
     */
    @ApiModelProperty(value= "型号")
    private String model;
    /**
     * 批号
     */
    @ApiModelProperty(value= "批号")
    private String batch;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String unit;
    /**
     * 货物条码
     */
    @ApiModelProperty(value= "货物条码")
    private String barcode;
    /**
     * 单据类型
     */
    @ApiModelProperty(value= "单据类型")
    @TableField("doc_id")
    private Long docId;
    /**
     * 单据编号
     */
    @ApiModelProperty(value= "单据编号")
    @TableField("doc_num")
    private String docNum;
    /**
     * 客户名称
     */
    @ApiModelProperty(value= "客户名称")
    @TableField("cust_name")
    private String custName;
    /**
     * 品项数
     */
    @ApiModelProperty(value= "品项数")
    @TableField("item_num")
    private Integer itemNum;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Integer count;
    /**
     * 重量
     */
    @ApiModelProperty(value= "重量")
    private Double weight;
    /**
     * 状态 1: 正常  0: 禁用
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 禁用  ")
    private Integer status;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    @TableField("create_by")
    private Long createBy;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @TableField("create_time")
    private Date createTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    @TableField("update_by")
    private Long updateBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @TableField("update_time")
    private Date updateTime;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return "已出库";
            case 0:
                return "未出库";
            case 8:
                return "未完全出库";
            case 9:
                return "全部完成出库";
            default:
                return String.valueOf(this.status);
        }
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
}
src/main/java/com/zy/asrs/mapper/ManPakOutMapper.java
New file
@@ -0,0 +1,11 @@
package com.zy.asrs.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.asrs.entity.ManPakOut;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface ManPakOutMapper extends BaseMapper<ManPakOut> {
}
src/main/java/com/zy/asrs/service/ManPakOutService.java
New file
@@ -0,0 +1,7 @@
package com.zy.asrs.service;
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.ManPakOut;
public interface ManPakOutService extends IService<ManPakOut> {
}
src/main/java/com/zy/asrs/service/impl/ManPakOutServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.entity.ManPakOut;
import com.zy.asrs.mapper.ManPakOutMapper;
import com.zy.asrs.service.ManPakOutService;
import org.springframework.stereotype.Service;
@Service("manPakOutService")
public class ManPakOutServiceImpl extends ServiceImpl<ManPakOutMapper, ManPakOut> implements ManPakOutService {
}
src/main/java/com/zy/common/model/LocDto.java
@@ -21,6 +21,7 @@
    private String batch;
    private String orderNo;
    private String manu;
    //实际出库量
    private Double anfme;
src/main/resources/application.yml
@@ -11,7 +11,7 @@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://10.10.10.100:1433;databasename=stasrs
    url: jdbc:sqlserver://192.168.4.15:1433;databasename=stasrs
    url: jdbc:sqlserver://192.168.4.13:1433;databasename=stasrs
    username: sa
    password: sa@123
  mvc:
src/main/resources/mapper/ManPakOutMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.mapper.ManPakOutMapper">
</mapper>
src/main/webapp/static/js/order/out.js
@@ -162,6 +162,7 @@
                                    {field: 'orderNo', title: '单据编号', merge: true, align: 'center'},
                                    {field: 'title', title: '商品', merge: true, align: 'center', width: 350},
                                    {field: 'batch', title: '序列码', align: 'center'},
                                    {field: 'manu', title: '仓库', align: 'center'},
                                    // { title: '剩余需求量', align: 'center' , width: 120, toolbar: '#checkNeedQty'},
                                    // {field: 'anfme', title: '实际数量', align: 'center', width: 90, style: 'font-weight: bold'},
                                    { title: '出库数量', align: 'center',field: 'anfme', width: 90, style: 'font-weight: bold; color: red'},
@@ -265,6 +266,7 @@
                        ,yes: function(index, layero){
                            //按钮【立即出库】的回调
                            pakout(tableCache, index);
                            pakout2(tableCache, index);
                        }
                        ,btn2: function(index, layero){
                            //按钮【稍后处理】的回调
@@ -306,6 +308,31 @@
        });
    }
    function pakout2(tableCache, layerIndex) {
        // let loadIndex = layer.load(2);
        notice.msg('正在生成拣货单......', {icon: 4});
        $.ajax({
            url: baseUrl + "/out/pakout2/auth",
            headers: {'token': localStorage.getItem('token')},
            contentType: 'application/json;charset=UTF-8',
            data: JSON.stringify(tableCache),
            method: 'POST',
            success: function (res) {
                notice.destroy();
                if (res.code === 200) {
                    layer.close(layerIndex);
                    layer.msg(res.msg, {icon: 1});
                    insTb.reload({where: null});
                    insTb2.reload({where: null, page: {curr: 1}});
                } else if (res.code === 403) {
                    top.location.href = baseUrl + "/";
                } else {
                    layer.msg(res.msg, {icon: 2})
                }
            }
        });
    }
    /* 删除订单 */