自动化立体仓库 - WMS系统
18516761980
2022-05-24 b76c09d2c5f16de0e3777350b8d7ab48ea55aaa8
Merge branch 'jkasrs' of http://47.97.1.152:5880/r/zy-asrs into jkasrs
64个文件已修改
3个文件已添加
2162 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocDetlController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ReportQueryController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/WorkController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 565 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastLog.java 579 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/RowLastnoMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/StaDescMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/RowLastnoService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/StaDescService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WorkService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkDetlService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/RowLastnoServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/StaDescServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/InitStaDesc.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeRes.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ThreadPoolConfig.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/constant/MesConstant.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MesCombParam.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MesPakoutParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/WrkDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/RowLastnoMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/StaDescMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ViewWorkInMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastLogMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/cool.css 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/basDevp/basDevp.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locDetl/locDetl.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locDetlStatis/locDetlStatis.js 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/out.js 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pakStore/stockOut.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/stoMan/stoQue.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/wrkMast/wrkMast.js 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/basDevp/basDevp.html 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locDetl/locDetl.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locDetlStatis/locDetlStatis.html 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/login.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/mat/mat.html 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/order.html 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/locDetlQuery.html 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/report/locDetl.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/stoMan/stoQue.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkMast/wrkMast.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -227,4 +227,14 @@
                .doWrite(excel);
    }
    /**
     * 获取库存总数
     * @return
     */
    @RequestMapping("/locDetl/count")
    public R getAllCount(){
        Integer sum = locDetlService.sum();
        return R.ok(sum);
    }
}
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -4,19 +4,22 @@
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.result.MobileAdjustResult;
import com.zy.asrs.service.*;
import com.zy.common.model.WrkDto;
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.List;
import java.util.*;
/**
 * 移动端接口控制器
@@ -104,6 +107,7 @@
    @RequestMapping("/pakout/query/auth")
    @ManagerAuth
    @Deprecated
    public R pakoutQuery(@RequestParam(required = false) String barcode,
                         @RequestParam(required = false) Integer staNo,
                         @RequestParam(required = false) String matnr){
@@ -116,17 +120,147 @@
        }
        if (!Cools.isEmpty(matnr)) {
            if (!Cools.isEmpty(staNo)) {
                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("sta_no", staNo).eq("wrk_sts", 14L));
                if (!Cools.isEmpty(wrkMasts)) {
                    WrkMast wrkMast = wrkMasts.get(0);
                    List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                    return R.ok().add(wrkDetls);
                }
                List<WrkDetl> wrkDetls = wrkDetlService.selectPakoutQuery(staNo, matnr);
                return R.ok().add(wrkDetls);
            }
        }
        return R.ok();
    }
    /**
     * 出库确认 - 扫托盘码
     * 1.全板 返回 101
     * 2.拣料 返回 103
     */
    @RequestMapping("/pakout/confirm/barcode/auth")
    @ManagerAuth
    public R pakoutQueryByBarcode(@RequestParam(required = false) String barcode){
        if (Cools.isEmpty(barcode)) {
            return R.ok();
        }
        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
        if (wrkMast != null) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
            // 去除已出库确认的明细
            wrkDetls.removeIf(wrkDetl -> wrkDetl.getInspect() != null && wrkDetl.getInspect() != 0);
            return R.ok().add(Cools.add("wrkNo", wrkMast.getWrkNo()).add("ioType", wrkMast.getIoType()).add("list", wrkDetls));
        }
        return R.ok();
    }
    /**
     * 出库确认 - 拣料出库 - 选择具体条码商品
     */
    @RequestMapping("/pakout/confirm/pick/auth")
    @ManagerAuth
    public R pakoutQueryByBarcode(@RequestParam(required = false) Integer wrkNo
                                , @RequestParam(required = false) String matnr){
        if (Cools.isEmpty(wrkNo)) {
            return R.ok();
        }
        if (Cools.isEmpty(matnr)) {
            return R.ok();
        }
        WrkMast wrkMast = wrkMastService.selectById(wrkNo);
        if (wrkMast == null) {
            return R.ok();
        }
        String orderNo = null;
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        for (WrkDetl wrkDetl : wrkDetls) {
            if (Cools.isEmpty(orderNo)) {
                orderNo = wrkDetl.getOrderNo();
            }
            if ((wrkDetl.getMatnr() + "-" + wrkDetl.getBatch()).equals(matnr)) {
                return R.ok().add(wrkDetl);
            }
        }
        // 替换 明细
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
        for (LocDetl locDetl : locDetls) {
            if ((locDetl.getMatnr() + "-" + locDetl.getBatch()).equals(matnr)) {
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(locDetl);
                wrkDetl.setOrderNo(orderNo);
                wrkDetl.setIoTime(wrkMast.getIoTime());
                wrkDetl.setWrkNo(wrkNo);
                return R.ok().add(wrkDetl);
            }
        }
        return R.error("系统错误,条码不存在");
    }
    @RequestMapping("/pakout/confirm/auth")
    @ManagerAuth
    @Transactional
    public R pakoutConfirm(@RequestBody List<WrkDetl> list) {
        if (Cools.isEmpty(list)) {
            return R.ok();
        }
        Set<Integer> wrkNos = new HashSet<>();
        List<WrkDto> dtos = new ArrayList<>();
        for (WrkDetl wrkDetl : list) {
            if (wrkNos.contains(wrkDetl.getWrkNo())) {
                for (WrkDto dto : dtos) {
                    if (dto.getWrkNo().equals(wrkDetl.getWrkNo())) {
                        dto.getWrkDetls().add(wrkDetl);
                        break;
                    }
                }
            } else {
                wrkNos.add(wrkDetl.getWrkNo());
                dtos.add(new WrkDto(wrkDetl.getWrkNo(), wrkDetl));
            }
        }
        for (WrkDto dto : dtos) {
            WrkMast wrkMast = wrkMastService.selectById(dto.getWrkNo());
            if (wrkMast != null) {
                // 101
                if (wrkMast.getIoType() == 101) {
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                    }
                }
                // 103
                if (wrkMast.getIoType() == 103) {
                    if (!wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()))) {
                        throw new CoolException("拣料出库确认失败");
                    }
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetl.setInspect(1);
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("拣料出库确认失败");
                        }
                    }
                }
            }
        }
        for (Integer wrkNo : wrkNos) {
            WrkMast wrkMast = wrkMastService.selectById(wrkNo);
            if (wrkMast.getWrkSts() == 14 && (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N"))) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkNo);
                boolean complete = true;
                for (WrkDetl wrkDetl : wrkDetls) {
                    if (wrkDetl.getInspect() == null || wrkDetl.getInspect() == 0) {
                        complete = false;
                        break;
                    }
                }
                if (complete) {
                    wrkMast.setInvWh("Y");
                    wrkMast.setModiTime(new Date());
                    if (!wrkMastService.updateById(wrkMast)) {
                        throw new CoolException("修改工作档" + wrkNo + "失败");
                    }
                }
            }
        }
        return R.ok("完成确认");
    }
    // 盘点 ----------------------------------------------------------------------------------------------------
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -105,6 +105,12 @@
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getLgort())) {
            return R.error("单据编号[lgort]不能为空");
        }
        if (!param.getLgort().equals("5006")) {
            return R.ok();
        }
        if (Cools.isEmpty(param.getOrderNo())) {
            return R.error("单据编号[orderNo]不能为空");
        }
src/main/java/com/zy/asrs/controller/OutController.java
@@ -16,9 +16,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.*;
/**
 * Created by vincent on 2022/3/26
@@ -50,10 +48,13 @@
        }
        List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
        List<LocDto> locDtos = new ArrayList<>();
        Set<String> exist = new HashSet<>();
        for (OrderDetl orderDetl : orderDetls) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
            if (issued <= 0.0D) { continue; }
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null);
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            for (LocDetl locDetl : locDetls) {
                if (issued > 0) {
                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
@@ -61,6 +62,7 @@
                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
                    locDto.setStaNos(staNos);
                    locDtos.add(locDto);
                    exist.add(locDetl.getLocNo());
                    // 剩余待出数量递减
                    issued = issued - locDetl.getAnfme();
                } else {
src/main/java/com/zy/asrs/controller/ReportQueryController.java
@@ -67,7 +67,10 @@
        ViewStayTimeBean bean = new ViewStayTimeBean();
        bean.setPageSize(limit);
        bean.setPageNumber(curr);
        bean.setLoc_no(String.valueOf(param.get("loc_no")));
        String locNo = String.valueOf(param.get("loc_no"));
        if (!Cools.isEmpty(locNo) && !locNo.equals("null")) {
            bean.setLoc_no(locNo);
        }
        List<ViewStayTimeBean> list = reportQueryMapper.queryViewStayTimeList(bean);
        int count = reportQueryMapper.getViewStayTimeCount(bean);
        Page<ViewStayTimeBean> page = new Page<>();
src/main/java/com/zy/asrs/controller/WorkController.java
@@ -151,4 +151,11 @@
        return R.ok("任务号:" + startupDto.getWorkNo() + ";目标库位:" + startupDto.getLocNo());
    }
    @RequestMapping("/deal/preHave/start")
    @ManagerAuth(memo = "先入品处理")
    public R dealPreHave(@RequestParam Integer wrkNo) {
        String locNo = workService.dealPreHaveStart(wrkNo, getUserId());
        return R.ok("任务重新入库,目标库位:" + locNo);
    }
}
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -10,11 +10,13 @@
import com.core.common.Cools;
import com.core.common.SpringUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@TableName("asr_wrk_mast")
public class WrkMast implements Serializable {
@@ -305,171 +307,27 @@
    @TableField("full_plt")
    private String fullPlt;
    /**
     * 先入品 / 双重入库
     */
    @ApiModelProperty(value= "先入品")
    @TableField("pre_have")
    private String preHave;
    /**
     * 空操作 / 取货无箱
     */
    @ApiModelProperty(value= "空操作")
    @TableField("take_none")
    private String takeNone;
    public WrkMast() {}
    public WrkMast(String invWh,Date ymd,String mk,Integer whsType,Long wrkSts,Integer ioType,Integer crnNo,String sheetNo,Double ioPri,Date wrkDate,String locNo,Integer staNo,Integer sourceStaNo,String sourceLocNo,String locSts,String picking,String linkMis,String onlineYn,String updMk,String exitMk,Integer pltType,String emptyMk,Date ioTime,Integer ctnType,String packed,String oveMk,Double mtnType,String userNo,Date crnStrTime,Date crnEndTime,Date plcStrTime,Date crnPosTime,Double loadTime,Double expTime,Double refWrkno,Date refIotime,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String pauseMk,Date errorTime,String errorMemo,Integer ctnKind,String manuType,String memo,Double scWeight,String logMk,Date logErrTime,String logErrMemo,String barcode,String PdcType,String ctnNo,String fullPlt) {
        this.invWh = invWh;
        this.ymd = ymd;
        this.mk = mk;
        this.whsType = whsType;
        this.wrkSts = wrkSts;
        this.ioType = ioType;
        this.crnNo = crnNo;
        this.sheetNo = sheetNo;
        this.ioPri = ioPri;
        this.wrkDate = wrkDate;
        this.locNo = locNo;
        this.staNo = staNo;
        this.sourceStaNo = sourceStaNo;
        this.sourceLocNo = sourceLocNo;
        this.locSts = locSts;
        this.picking = picking;
        this.linkMis = linkMis;
        this.onlineYn = onlineYn;
        this.updMk = updMk;
        this.exitMk = exitMk;
        this.pltType = pltType;
        this.emptyMk = emptyMk;
        this.ioTime = ioTime;
        this.ctnType = ctnType;
        this.packed = packed;
        this.oveMk = oveMk;
        this.mtnType = mtnType;
        this.userNo = userNo;
        this.crnStrTime = crnStrTime;
        this.crnEndTime = crnEndTime;
        this.plcStrTime = plcStrTime;
        this.crnPosTime = crnPosTime;
        this.loadTime = loadTime;
        this.expTime = expTime;
        this.refWrkno = refWrkno;
        this.refIotime = refIotime;
        this.modiUser = modiUser;
        this.modiTime = modiTime;
        this.appeUser = appeUser;
        this.appeTime = appeTime;
        this.pauseMk = pauseMk;
        this.errorTime = errorTime;
        this.errorMemo = errorMemo;
        this.ctnKind = ctnKind;
        this.manuType = manuType;
        this.memo = memo;
        this.scWeight = scWeight;
        this.logMk = logMk;
        this.logErrTime = logErrTime;
        this.logErrMemo = logErrMemo;
        this.barcode = barcode;
        this.PdcType = PdcType;
        this.ctnNo = ctnNo;
        this.fullPlt = fullPlt;
    }
//    WrkMast wrkMast = new WrkMast(
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 工作状态
//            null,    // 入出库类型
//            null,    // 堆垛机
//            null,    //
//            null,    // 优先级
//            null,    //
//            null,    // 目标库位
//            null,    // 目标站
//            null,    // 源站
//            null,    // 源库位
//            null,    //
//            null,    // 拣料
//            null,    //
//            null,    //
//            null,    //
//            null,    // 退出
//            null,    //
//            null,    // 空板
//            null,    // 工作时间
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 堆垛机启动时间
//            null,    // 堆垛机停止时间
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 拣料时间
//            null,    // 修改人员
//            null,    // 修改时间
//            null,    // 创建者
//            null,    // 添加时间
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 备注
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 条码
//            null,    //
//            null,    //
//            null    // 满板
//    );
    public Integer getWrkNo() {
        return wrkNo;
    }
    public void setWrkNo(Integer wrkNo) {
        this.wrkNo = wrkNo;
    }
    public String getInvWh() {
        return invWh;
    }
    public void setInvWh(String invWh) {
        this.invWh = invWh;
    }
    public Date getYmd() {
        return ymd;
    }
    public String getYmd$(){
        if (Cools.isEmpty(this.ymd)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ymd);
    }
    public void setYmd(Date ymd) {
        this.ymd = ymd;
    }
    public String getMk() {
        return mk;
    }
    public void setMk(String mk) {
        this.mk = mk;
    }
    public Integer getWhsType() {
        return whsType;
    }
    public void setWhsType(Integer whsType) {
        this.whsType = whsType;
    }
    public Long getWrkSts() {
        return wrkSts;
    }
    public String getWrkSts$(){
@@ -481,14 +339,6 @@
        return null;
    }
    public void setWrkSts(Long wrkSts) {
        this.wrkSts = wrkSts;
    }
    public Integer getIoType() {
        return ioType;
    }
    public String getIoType$(){
        BasWrkIotypeService service = SpringUtils.getBean(BasWrkIotypeService.class);
        BasWrkIotype basWrkIotype = service.selectById(this.ioType);
@@ -496,14 +346,6 @@
            return String.valueOf(basWrkIotype.getIoDesc());
        }
        return null;
    }
    public void setIoType(Integer ioType) {
        this.ioType = ioType;
    }
    public Integer getCrnNo() {
        return crnNo;
    }
    public String getCrnNo$(){
@@ -515,43 +357,11 @@
        return null;
    }
    public void setCrnNo(Integer crnNo) {
        this.crnNo = crnNo;
    }
    public String getSheetNo() {
        return sheetNo;
    }
    public void setSheetNo(String sheetNo) {
        this.sheetNo = sheetNo;
    }
    public Double getIoPri() {
        return ioPri;
    }
    public void setIoPri(Double ioPri) {
        this.ioPri = ioPri;
    }
    public Date getWrkDate() {
        return wrkDate;
    }
    public String getWrkDate$(){
        if (Cools.isEmpty(this.wrkDate)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.wrkDate);
    }
    public void setWrkDate(Date wrkDate) {
        this.wrkDate = wrkDate;
    }
    public String getLocNo() {
        return locNo;
    }
    public String getLocNo$(){
@@ -563,14 +373,6 @@
        return null;
    }
    public void setLocNo(String locNo) {
        this.locNo = locNo;
    }
    public Integer getStaNo() {
        return staNo;
    }
    public String getStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
        BasDevp basDevp = service.selectById(this.staNo);
@@ -578,14 +380,6 @@
            return String.valueOf(basDevp.getDevNo());
        }
        return null;
    }
    public void setStaNo(Integer staNo) {
        this.staNo = staNo;
    }
    public Integer getSourceStaNo() {
        return sourceStaNo;
    }
    public String getSourceStaNo$(){
@@ -597,14 +391,6 @@
        return null;
    }
    public void setSourceStaNo(Integer sourceStaNo) {
        this.sourceStaNo = sourceStaNo;
    }
    public String getSourceLocNo() {
        return sourceLocNo;
    }
    public String getSourceLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = service.selectById(this.sourceLocNo);
@@ -614,131 +400,11 @@
        return null;
    }
    public void setSourceLocNo(String sourceLocNo) {
        this.sourceLocNo = sourceLocNo;
    }
    public String getLocSts() {
        return locSts;
    }
    public void setLocSts(String locSts) {
        this.locSts = locSts;
    }
    public String getPicking() {
        return picking;
    }
    public void setPicking(String picking) {
        this.picking = picking;
    }
    public String getLinkMis() {
        return linkMis;
    }
    public void setLinkMis(String linkMis) {
        this.linkMis = linkMis;
    }
    public String getOnlineYn() {
        return onlineYn;
    }
    public void setOnlineYn(String onlineYn) {
        this.onlineYn = onlineYn;
    }
    public String getUpdMk() {
        return updMk;
    }
    public void setUpdMk(String updMk) {
        this.updMk = updMk;
    }
    public String getExitMk() {
        return exitMk;
    }
    public void setExitMk(String exitMk) {
        this.exitMk = exitMk;
    }
    public Integer getPltType() {
        return pltType;
    }
    public void setPltType(Integer pltType) {
        this.pltType = pltType;
    }
    public String getEmptyMk() {
        return emptyMk;
    }
    public void setEmptyMk(String emptyMk) {
        this.emptyMk = emptyMk;
    }
    public Date getIoTime() {
        return ioTime;
    }
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
    }
    public void setIoTime(Date ioTime) {
        this.ioTime = ioTime;
    }
    public Integer getCtnType() {
        return ctnType;
    }
    public void setCtnType(Integer ctnType) {
        this.ctnType = ctnType;
    }
    public String getPacked() {
        return packed;
    }
    public void setPacked(String packed) {
        this.packed = packed;
    }
    public String getOveMk() {
        return oveMk;
    }
    public void setOveMk(String oveMk) {
        this.oveMk = oveMk;
    }
    public Double getMtnType() {
        return mtnType;
    }
    public void setMtnType(Double mtnType) {
        this.mtnType = mtnType;
    }
    public String getUserNo() {
        return userNo;
    }
    public void setUserNo(String userNo) {
        this.userNo = userNo;
    }
    public Date getCrnStrTime() {
        return crnStrTime;
    }
    public String getCrnStrTime$(){
@@ -748,27 +414,11 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnStrTime);
    }
    public void setCrnStrTime(Date crnStrTime) {
        this.crnStrTime = crnStrTime;
    }
    public Date getCrnEndTime() {
        return crnEndTime;
    }
    public String getCrnEndTime$(){
        if (Cools.isEmpty(this.crnEndTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnEndTime);
    }
    public void setCrnEndTime(Date crnEndTime) {
        this.crnEndTime = crnEndTime;
    }
    public Date getPlcStrTime() {
        return plcStrTime;
    }
    public String getPlcStrTime$(){
@@ -778,14 +428,6 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.plcStrTime);
    }
    public void setPlcStrTime(Date plcStrTime) {
        this.plcStrTime = plcStrTime;
    }
    public Date getCrnPosTime() {
        return crnPosTime;
    }
    public String getCrnPosTime$(){
        if (Cools.isEmpty(this.crnPosTime)){
            return "";
@@ -793,51 +435,11 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnPosTime);
    }
    public void setCrnPosTime(Date crnPosTime) {
        this.crnPosTime = crnPosTime;
    }
    public Double getLoadTime() {
        return loadTime;
    }
    public void setLoadTime(Double loadTime) {
        this.loadTime = loadTime;
    }
    public Double getExpTime() {
        return expTime;
    }
    public void setExpTime(Double expTime) {
        this.expTime = expTime;
    }
    public Double getRefWrkno() {
        return refWrkno;
    }
    public void setRefWrkno(Double refWrkno) {
        this.refWrkno = refWrkno;
    }
    public Date getRefIotime() {
        return refIotime;
    }
    public String getRefIotime$(){
        if (Cools.isEmpty(this.refIotime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.refIotime);
    }
    public void setRefIotime(Date refIotime) {
        this.refIotime = refIotime;
    }
    public Long getModiUser() {
        return modiUser;
    }
    public String getModiUser$(){
@@ -849,27 +451,11 @@
        return null;
    }
    public void setModiUser(Long modiUser) {
        this.modiUser = modiUser;
    }
    public Date getModiTime() {
        return modiTime;
    }
    public String getModiTime$(){
        if (Cools.isEmpty(this.modiTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
    }
    public void setModiTime(Date modiTime) {
        this.modiTime = modiTime;
    }
    public Long getAppeUser() {
        return appeUser;
    }
    public String getAppeUser$(){
@@ -881,35 +467,11 @@
        return null;
    }
    public void setAppeUser(Long appeUser) {
        this.appeUser = appeUser;
    }
    public Date getAppeTime() {
        return appeTime;
    }
    public String getAppeTime$(){
        if (Cools.isEmpty(this.appeTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
    public void setAppeTime(Date appeTime) {
        this.appeTime = appeTime;
    }
    public String getPauseMk() {
        return pauseMk;
    }
    public void setPauseMk(String pauseMk) {
        this.pauseMk = pauseMk;
    }
    public Date getErrorTime() {
        return errorTime;
    }
    public String getErrorTime$(){
@@ -919,63 +481,11 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime);
    }
    public void setErrorTime(Date errorTime) {
        this.errorTime = errorTime;
    }
    public String getErrorMemo() {
        return errorMemo;
    }
    public void setErrorMemo(String errorMemo) {
        if (errorMemo.length() > 255) {
            errorMemo = errorMemo.substring(0, 150);
        }
        this.errorMemo = errorMemo;
    }
    public Integer getCtnKind() {
        return ctnKind;
    }
    public void setCtnKind(Integer ctnKind) {
        this.ctnKind = ctnKind;
    }
    public String getManuType() {
        return manuType;
    }
    public void setManuType(String manuType) {
        this.manuType = manuType;
    }
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
    public Double getScWeight() {
        return scWeight;
    }
    public void setScWeight(Double scWeight) {
        this.scWeight = scWeight;
    }
    public String getLogMk() {
        return logMk;
    }
    public void setLogMk(String logMk) {
        this.logMk = logMk;
    }
    public Date getLogErrTime() {
        return logErrTime;
    }
    public String getLogErrTime$(){
@@ -985,49 +495,6 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime);
    }
    public void setLogErrTime(Date logErrTime) {
        this.logErrTime = logErrTime;
    }
    public String getLogErrMemo() {
        return logErrMemo;
    }
    public void setLogErrMemo(String logErrMemo) {
        this.logErrMemo = logErrMemo;
    }
    public String getBarcode() {
        return barcode;
    }
    public void setBarcode(String barcode) {
        this.barcode = barcode;
    }
    public String getPdcType() {
        return PdcType;
    }
    public void setPdcType(String PdcType) {
        this.PdcType = PdcType;
    }
    public String getCtnNo() {
        return ctnNo;
    }
    public void setCtnNo(String ctnNo) {
        this.ctnNo = ctnNo;
    }
    public String getFullPlt() {
        return fullPlt;
    }
    public void setFullPlt(String fullPlt) {
        this.fullPlt = fullPlt;
    }
}
src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -10,11 +10,13 @@
import com.core.common.Cools;
import com.core.common.SpringUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@TableName("asr_wrk_mast_log")
public class WrkMastLog implements Serializable {
@@ -308,135 +310,21 @@
    @TableField("full_plt")
    private String fullPlt;
    /**
     * 先入品 / 双重入库
     */
    @ApiModelProperty(value= "先入品")
    @TableField("pre_have")
    private String preHave;
    /**
     * 空操作 / 取货无箱
     */
    @ApiModelProperty(value= "空操作")
    @TableField("take_none")
    private String takeNone;
    public WrkMastLog() {}
    public WrkMastLog(Integer wrkNo,String invWh,Date ymd,String mk,Integer whsType,Integer wrkSts,Integer ioType,Integer crnNo,String sheetNo,Double ioPri,Date wrkDate,String locNo,Integer staNo,Integer sourceStaNo,String sourceLocNo,String locSts,String picking,String linkMis,String onlineYn,String updMk,String exitMk,Integer pltType,String emptyMk,Date ioTime,Integer ctnType,String packed,String oveMk,Double mtnType,String userNo,Date crnStrTime,Date crnEndTime,Date plcStrTime,Date crnPosTime,Double loadTime,Double expTime,Double refWrkno,Date refIotime,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String pauseMk,Date errorTime,String errorMemo,Integer ctnKind,String manuType,String memoM,Double scWeight,String logMk,Date logErrTime,String logErrMemo,String barcode,String PdcType,String ctnNo,String fullPlt) {
        this.wrkNo = wrkNo;
        this.invWh = invWh;
        this.ymd = ymd;
        this.mk = mk;
        this.whsType = whsType;
        this.wrkSts = wrkSts;
        this.ioType = ioType;
        this.crnNo = crnNo;
        this.sheetNo = sheetNo;
        this.ioPri = ioPri;
        this.wrkDate = wrkDate;
        this.locNo = locNo;
        this.staNo = staNo;
        this.sourceStaNo = sourceStaNo;
        this.sourceLocNo = sourceLocNo;
        this.locSts = locSts;
        this.picking = picking;
        this.linkMis = linkMis;
        this.onlineYn = onlineYn;
        this.updMk = updMk;
        this.exitMk = exitMk;
        this.pltType = pltType;
        this.emptyMk = emptyMk;
        this.ioTime = ioTime;
        this.ctnType = ctnType;
        this.packed = packed;
        this.oveMk = oveMk;
        this.mtnType = mtnType;
        this.userNo = userNo;
        this.crnStrTime = crnStrTime;
        this.crnEndTime = crnEndTime;
        this.plcStrTime = plcStrTime;
        this.crnPosTime = crnPosTime;
        this.loadTime = loadTime;
        this.expTime = expTime;
        this.refWrkno = refWrkno;
        this.refIotime = refIotime;
        this.modiUser = modiUser;
        this.modiTime = modiTime;
        this.appeUser = appeUser;
        this.appeTime = appeTime;
        this.pauseMk = pauseMk;
        this.errorTime = errorTime;
        this.errorMemo = errorMemo;
        this.ctnKind = ctnKind;
        this.manuType = manuType;
        this.memoM = memoM;
        this.scWeight = scWeight;
        this.logMk = logMk;
        this.logErrTime = logErrTime;
        this.logErrMemo = logErrMemo;
        this.barcode = barcode;
        this.PdcType = PdcType;
        this.ctnNo = ctnNo;
        this.fullPlt = fullPlt;
    }
//    WrkMastLog wrkMastLog = new WrkMastLog(
//            null,    // 工作号[非空]
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 工作状态
//            null,    // 入出库类型
//            null,    // 堆垛机号
//            null,    //
//            null,    // 优先级
//            null,    //
//            null,    // 目标库位
//            null,    // 目标站
//            null,    // 源站
//            null,    // 源库位
//            null,    //
//            null,    // 拣料
//            null,    //
//            null,    //
//            null,    //
//            null,    // 退出
//            null,    //
//            null,    // 空板
//            null,    // 工作时间
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 堆垛机启动时间
//            null,    // 堆垛机停止时间
//            null,    // 拣料时间
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 修改人员
//            null,    // 修改时间
//            null,    // 创建者
//            null,    // 添加时间
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // 条码
//            null,    //
//            null,    //
//            null    // 满板
//    );
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Integer getWrkNo() {
        return wrkNo;
    }
    public String getWrkNo$(){
        WrkMastService service = SpringUtils.getBean(WrkMastService.class);
@@ -447,51 +335,11 @@
        return null;
    }
    public void setWrkNo(Integer wrkNo) {
        this.wrkNo = wrkNo;
    }
    public String getInvWh() {
        return invWh;
    }
    public void setInvWh(String invWh) {
        this.invWh = invWh;
    }
    public Date getYmd() {
        return ymd;
    }
    public String getYmd$(){
        if (Cools.isEmpty(this.ymd)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ymd);
    }
    public void setYmd(Date ymd) {
        this.ymd = ymd;
    }
    public String getMk() {
        return mk;
    }
    public void setMk(String mk) {
        this.mk = mk;
    }
    public Integer getWhsType() {
        return whsType;
    }
    public void setWhsType(Integer whsType) {
        this.whsType = whsType;
    }
    public Integer getWrkSts() {
        return wrkSts;
    }
    public String getWrkSts$(){
@@ -503,14 +351,6 @@
        return null;
    }
    public void setWrkSts(Integer wrkSts) {
        this.wrkSts = wrkSts;
    }
    public Integer getIoType() {
        return ioType;
    }
    public String getIoType$(){
        BasWrkIotypeService service = SpringUtils.getBean(BasWrkIotypeService.class);
        BasWrkIotype basWrkIotype = service.selectById(this.ioType);
@@ -518,14 +358,6 @@
            return String.valueOf(basWrkIotype.getIoDesc());
        }
        return null;
    }
    public void setIoType(Integer ioType) {
        this.ioType = ioType;
    }
    public Integer getCrnNo() {
        return crnNo;
    }
    public String getCrnNo$(){
@@ -537,43 +369,11 @@
        return null;
    }
    public void setCrnNo(Integer crnNo) {
        this.crnNo = crnNo;
    }
    public String getSheetNo() {
        return sheetNo;
    }
    public void setSheetNo(String sheetNo) {
        this.sheetNo = sheetNo;
    }
    public Double getIoPri() {
        return ioPri;
    }
    public void setIoPri(Double ioPri) {
        this.ioPri = ioPri;
    }
    public Date getWrkDate() {
        return wrkDate;
    }
    public String getWrkDate$(){
        if (Cools.isEmpty(this.wrkDate)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.wrkDate);
    }
    public void setWrkDate(Date wrkDate) {
        this.wrkDate = wrkDate;
    }
    public String getLocNo() {
        return locNo;
    }
    public String getLocNo$(){
@@ -585,14 +385,6 @@
        return null;
    }
    public void setLocNo(String locNo) {
        this.locNo = locNo;
    }
    public Integer getStaNo() {
        return staNo;
    }
    public String getStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
        BasDevp basDevp = service.selectById(this.staNo);
@@ -600,14 +392,6 @@
            return String.valueOf(basDevp.getDevNo());
        }
        return null;
    }
    public void setStaNo(Integer staNo) {
        this.staNo = staNo;
    }
    public Integer getSourceStaNo() {
        return sourceStaNo;
    }
    public String getSourceStaNo$(){
@@ -619,14 +403,6 @@
        return null;
    }
    public void setSourceStaNo(Integer sourceStaNo) {
        this.sourceStaNo = sourceStaNo;
    }
    public String getSourceLocNo() {
        return sourceLocNo;
    }
    public String getSourceLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = service.selectById(this.sourceLocNo);
@@ -636,131 +412,11 @@
        return null;
    }
    public void setSourceLocNo(String sourceLocNo) {
        this.sourceLocNo = sourceLocNo;
    }
    public String getLocSts() {
        return locSts;
    }
    public void setLocSts(String locSts) {
        this.locSts = locSts;
    }
    public String getPicking() {
        return picking;
    }
    public void setPicking(String picking) {
        this.picking = picking;
    }
    public String getLinkMis() {
        return linkMis;
    }
    public void setLinkMis(String linkMis) {
        this.linkMis = linkMis;
    }
    public String getOnlineYn() {
        return onlineYn;
    }
    public void setOnlineYn(String onlineYn) {
        this.onlineYn = onlineYn;
    }
    public String getUpdMk() {
        return updMk;
    }
    public void setUpdMk(String updMk) {
        this.updMk = updMk;
    }
    public String getExitMk() {
        return exitMk;
    }
    public void setExitMk(String exitMk) {
        this.exitMk = exitMk;
    }
    public Integer getPltType() {
        return pltType;
    }
    public void setPltType(Integer pltType) {
        this.pltType = pltType;
    }
    public String getEmptyMk() {
        return emptyMk;
    }
    public void setEmptyMk(String emptyMk) {
        this.emptyMk = emptyMk;
    }
    public Date getIoTime() {
        return ioTime;
    }
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
    }
    public void setIoTime(Date ioTime) {
        this.ioTime = ioTime;
    }
    public Integer getCtnType() {
        return ctnType;
    }
    public void setCtnType(Integer ctnType) {
        this.ctnType = ctnType;
    }
    public String getPacked() {
        return packed;
    }
    public void setPacked(String packed) {
        this.packed = packed;
    }
    public String getOveMk() {
        return oveMk;
    }
    public void setOveMk(String oveMk) {
        this.oveMk = oveMk;
    }
    public Double getMtnType() {
        return mtnType;
    }
    public void setMtnType(Double mtnType) {
        this.mtnType = mtnType;
    }
    public String getUserNo() {
        return userNo;
    }
    public void setUserNo(String userNo) {
        this.userNo = userNo;
    }
    public Date getCrnStrTime() {
        return crnStrTime;
    }
    public String getCrnStrTime$(){
@@ -770,27 +426,11 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnStrTime);
    }
    public void setCrnStrTime(Date crnStrTime) {
        this.crnStrTime = crnStrTime;
    }
    public Date getCrnEndTime() {
        return crnEndTime;
    }
    public String getCrnEndTime$(){
        if (Cools.isEmpty(this.crnEndTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnEndTime);
    }
    public void setCrnEndTime(Date crnEndTime) {
        this.crnEndTime = crnEndTime;
    }
    public Date getPlcStrTime() {
        return plcStrTime;
    }
    public String getPlcStrTime$(){
@@ -800,14 +440,6 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.plcStrTime);
    }
    public void setPlcStrTime(Date plcStrTime) {
        this.plcStrTime = plcStrTime;
    }
    public Date getCrnPosTime() {
        return crnPosTime;
    }
    public String getCrnPosTime$(){
        if (Cools.isEmpty(this.crnPosTime)){
            return "";
@@ -815,51 +447,12 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnPosTime);
    }
    public void setCrnPosTime(Date crnPosTime) {
        this.crnPosTime = crnPosTime;
    }
    public Double getLoadTime() {
        return loadTime;
    }
    public void setLoadTime(Double loadTime) {
        this.loadTime = loadTime;
    }
    public Double getExpTime() {
        return expTime;
    }
    public void setExpTime(Double expTime) {
        this.expTime = expTime;
    }
    public Double getRefWrkno() {
        return refWrkno;
    }
    public void setRefWrkno(Double refWrkno) {
        this.refWrkno = refWrkno;
    }
    public Date getRefIotime() {
        return refIotime;
    }
    public String getRefIotime$(){
        if (Cools.isEmpty(this.refIotime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.refIotime);
    }
    public void setRefIotime(Date refIotime) {
        this.refIotime = refIotime;
    }
    public Long getModiUser() {
        return modiUser;
    }
    public String getModiUser$(){
@@ -871,27 +464,11 @@
        return null;
    }
    public void setModiUser(Long modiUser) {
        this.modiUser = modiUser;
    }
    public Date getModiTime() {
        return modiTime;
    }
    public String getModiTime$(){
        if (Cools.isEmpty(this.modiTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
    }
    public void setModiTime(Date modiTime) {
        this.modiTime = modiTime;
    }
    public Long getAppeUser() {
        return appeUser;
    }
    public String getAppeUser$(){
@@ -903,35 +480,11 @@
        return null;
    }
    public void setAppeUser(Long appeUser) {
        this.appeUser = appeUser;
    }
    public Date getAppeTime() {
        return appeTime;
    }
    public String getAppeTime$(){
        if (Cools.isEmpty(this.appeTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
    public void setAppeTime(Date appeTime) {
        this.appeTime = appeTime;
    }
    public String getPauseMk() {
        return pauseMk;
    }
    public void setPauseMk(String pauseMk) {
        this.pauseMk = pauseMk;
    }
    public Date getErrorTime() {
        return errorTime;
    }
    public String getErrorTime$(){
@@ -941,111 +494,11 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime);
    }
    public void setErrorTime(Date errorTime) {
        this.errorTime = errorTime;
    }
    public String getErrorMemo() {
        return errorMemo;
    }
    public void setErrorMemo(String errorMemo) {
        this.errorMemo = errorMemo;
    }
    public Integer getCtnKind() {
        return ctnKind;
    }
    public void setCtnKind(Integer ctnKind) {
        this.ctnKind = ctnKind;
    }
    public String getManuType() {
        return manuType;
    }
    public void setManuType(String manuType) {
        this.manuType = manuType;
    }
    public String getMemoM() {
        return memoM;
    }
    public void setMemoM(String memoM) {
        this.memoM = memoM;
    }
    public Double getScWeight() {
        return scWeight;
    }
    public void setScWeight(Double scWeight) {
        this.scWeight = scWeight;
    }
    public String getLogMk() {
        return logMk;
    }
    public void setLogMk(String logMk) {
        this.logMk = logMk;
    }
    public Date getLogErrTime() {
        return logErrTime;
    }
    public String getLogErrTime$(){
        if (Cools.isEmpty(this.logErrTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime);
    }
    public void setLogErrTime(Date logErrTime) {
        this.logErrTime = logErrTime;
    }
    public String getLogErrMemo() {
        return logErrMemo;
    }
    public void setLogErrMemo(String logErrMemo) {
        this.logErrMemo = logErrMemo;
    }
    public String getBarcode() {
        return barcode;
    }
    public void setBarcode(String barcode) {
        this.barcode = barcode;
    }
    public String getPdcType() {
        return PdcType;
    }
    public void setPdcType(String PdcType) {
        this.PdcType = PdcType;
    }
    public String getCtnNo() {
        return ctnNo;
    }
    public void setCtnNo(String ctnNo) {
        this.ctnNo = ctnNo;
    }
    public String getFullPlt() {
        return fullPlt;
    }
    public void setFullPlt(String fullPlt) {
        this.fullPlt = fullPlt;
    }
src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutParam.java
@@ -23,6 +23,8 @@
    private List<DetlDto> orderDetails;
    private String lgort;
    public static void main(String[] args) {
        OpenOrderPakoutParam param = new OpenOrderPakoutParam();
        param.setOrderNo("LXT12321321");
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -11,6 +11,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
@Mapper
@Repository
@@ -49,10 +50,12 @@
    // -------------------------------------------------
    List<LocDetl> queryStock(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo);
    List<LocDetl> queryStock(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos);
    Double queryStockAnfme(String matnr, String batch);
    List<StockVo> queryStockTotal();
    Integer sum();
}
src/main/java/com/zy/asrs/mapper/RowLastnoMapper.java
@@ -9,4 +9,6 @@
@Repository
public interface RowLastnoMapper extends BaseMapper<RowLastno> {
    RowLastno findBySection(Integer row);
}
src/main/java/com/zy/asrs/mapper/StaDescMapper.java
@@ -14,4 +14,6 @@
    List<Integer> queryOutStaNosByLocNo(@Param("locNo") String locNo, @Param("typeNo") Integer typeNo);
    StaDesc queryCrnStn(Integer crnNo);
}
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -20,4 +20,7 @@
    List<WrkDetl> selectAndLogByOrderNo(String orderNo);
    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);
}
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -6,6 +6,7 @@
import com.zy.asrs.entity.result.StockVo;
import java.util.List;
import java.util.Set;
public interface LocDetlService extends IService<LocDetl> {
@@ -39,10 +40,12 @@
    // --------------------------------------------------
    List<LocDetl> queryStock(String matnr, String batch, String orderNo);
    List<LocDetl> queryStock(String matnr, String batch, String orderNo, Set<String> locNos);
    Double queryStockAnfme(String matnr, String batch);
    List<StockVo> queryStockTotal();
    Integer sum();
}
src/main/java/com/zy/asrs/service/RowLastnoService.java
@@ -5,4 +5,6 @@
public interface RowLastnoService extends IService<RowLastno> {
    RowLastno findBySection(Integer row);
}
src/main/java/com/zy/asrs/service/StaDescService.java
@@ -13,4 +13,6 @@
    StaDesc queryCrnStnAuto(Integer typeNo, Integer crnNo, Integer stnNo);
    StaDesc queryCrnStn(Integer crnNo);
}
src/main/java/com/zy/asrs/service/WorkService.java
@@ -81,4 +81,10 @@
     * 通知档手动生成任务
     */
    StartupDto createWaitPainWrkMastStart(List<WaitPakin> list, Long userId);
    /**
     * 通知档手动生成任务
     */
    String dealPreHaveStart(Integer wrkNo, Long userId);
}
src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -16,4 +16,8 @@
    List<WrkDetl> selectAndLogByOrderNo(String orderNo);
    boolean updateInspect(Integer wrkNo, String matnr, String batch);
    List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr);
}
src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -13,4 +13,6 @@
    List<WrkMast> selectToBeHistoryData();
    WrkMast selectByBarcode(String barcode);
}
src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java
@@ -46,18 +46,18 @@
                return false;
            }
        }
        if (crnp.getCrnSts() != null) {
            if (crnp.getCrnSts() == 10) {
                log.error("{}号堆垛机状态为10.错误", crnNo);
                return false;
            }
        }
//        if (crnp.getCrnErr() != null) {
//            if (crnp.getCrnErr() != 0) {
//                log.error("{}号堆垛机异常,异常码{}", crnNo, crnp.getCrnErr());
//        if (crnp.getCrnSts() != null) {
//            if (crnp.getCrnSts() == 10) {
//                log.error("{}号堆垛机状态为10.错误", crnNo);
//                return false;
//            }
//        }
        if (crnp.getCrnErr() != null) {
            if (crnp.getCrnErr() != 0) {
                log.error("{}号堆垛机异常,异常码{}", crnNo, crnp.getCrnErr());
                return false;
            }
        }
        return true;
    }
}
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -9,6 +9,7 @@
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Set;
@Service("locDetlService")
public class LocDetlServiceImpl extends ServiceImpl<LocDetlMapper, LocDetl> implements LocDetlService {
@@ -68,8 +69,8 @@
    }
    @Override
    public List<LocDetl> queryStock(String matnr, String batch, String orderNo) {
        return this.baseMapper.queryStock(matnr, batch, orderNo);
    public List<LocDetl> queryStock(String matnr, String batch, String orderNo, Set<String> locNos) {
        return this.baseMapper.queryStock(matnr, batch, orderNo, locNos);
    }
    @Override
@@ -82,6 +83,17 @@
        return this.baseMapper.queryStockTotal();
    }
    /**
     * 获取库存总数
     * @return
     */
    @Override
    public Integer sum() {
        return this.baseMapper.sum();
    }
    @Override
    public LocDetl selectItem(String locNo, String matnr, String batch) {
        return this.baseMapper.selectItem(locNo, matnr, batch);
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -292,6 +292,9 @@
                mesCombParam.setZpallet(param.getBarcode());
                mesCombParam.setPakinTime(DateUtils.convert(now));
                mesCombParam.setLgort("5008");
                mesCombParam.setPlantCode("5000");
                mesCombParam.setFromCode("5012-20");
                mesCombParam.setStationCode("JJQ-PFZPDB-XX");
                for (DetlDto detlDto : detlDtos) {
                    mesCombParam.getList().add(new MesCombParam.Detl(detlDto.getOrderNo(), detlDto.getAnfme()));
                }
src/main/java/com/zy/asrs/service/impl/RowLastnoServiceImpl.java
@@ -9,4 +9,8 @@
@Service("rowLastnoService")
public class RowLastnoServiceImpl extends ServiceImpl<RowLastnoMapper, RowLastno> implements RowLastnoService {
    @Override
    public RowLastno findBySection(Integer row) {
        return this.baseMapper.findBySection(row);
    }
}
src/main/java/com/zy/asrs/service/impl/StaDescServiceImpl.java
@@ -54,4 +54,9 @@
        return staDesc;
    }
    @Override
    public StaDesc queryCrnStn(Integer crnNo) {
        return this.baseMapper.queryCrnStn(crnNo);
    }
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -13,9 +13,11 @@
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.*;
import com.zy.common.model.enums.IoWorkType;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.properties.SlaveProperties;
import com.zy.common.service.CommonService;
import com.zy.common.web.WcsController;
import lombok.extern.slf4j.Slf4j;
@@ -69,6 +71,10 @@
    private OrderDetlService orderDetlService;
    @Autowired
    private WcsController wcsController;
    @Autowired
    private RowLastnoService rowLastnoService;
    @Autowired
    private SlaveProperties slaveProperties;
    @Override
    @Transactional
@@ -220,6 +226,7 @@
            wrkMast.setExitMk("N"); // 退出
            wrkMast.setEmptyMk("N"); // 空板
            wrkMast.setLinkMis("N");
            wrkMast.setBarcode(locMast.getBarcode());
            wrkMast.setAppeUser(userId); // 操作人员数据
            wrkMast.setAppeTime(now);
            wrkMast.setModiUser(userId);
@@ -293,6 +300,7 @@
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setBarcode(locMast.getBarcode());
        wrkMast.setAppeUser(userId); // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
@@ -309,6 +317,7 @@
            }
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(orderDetl);
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBatch(locDto.getBatch());
@@ -749,7 +758,7 @@
                locSts = "D";
            // 库位转移 ===>> D.空桶/空栈板
            } else if (wrkMast.getIoType() == 11) {
                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"F":"D";
                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F";
                // 库位转移:目标库位
                LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                if (Cools.isEmpty(locMast)) {
@@ -827,9 +836,9 @@
            throw new CoolException("当前工作状态无法进行操作");
        }
        // 保存工作明细档历史档
        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
            throw new CoolException("保存工作明细档历史档失败");
        }
//        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
//            throw new CoolException("保存工作明细档历史档失败");
//        }
        // 保存工作主档历史档
        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
            throw new CoolException("保存工作主档历史档失败");
@@ -877,4 +886,99 @@
        return wcsController.startupFullPutStore(301, list.get(0).getZpallet(), locTypeDto, list);
    }
    @Override
    @Transactional
    public String dealPreHaveStart(Integer wrkNo, Long userId) {
        WrkMast wrkMast = wrkMastService.selectById(wrkNo);
        if (wrkMast == null) {
            throw new CoolException("任务已失效");
        }
        String locNo = wrkMast.getLocNo();
        LocMast locMast = locMastService.selectById(locNo);
        assert locMast != null;
        RowLastno rowLastno = rowLastnoService.findBySection(locMast.getRow1());
        assert rowLastno != null;
        // 目标库位
        LocMast targetLoc = null;
        for (int curRow = rowLastno.getsRow(); curRow<=rowLastno.geteRow(); curRow++) {
            if (Utils.isShallowLoc(slaveProperties, curRow)) {
                Integer deepRow = Utils.getDeepRow(slaveProperties, curRow);
                targetLoc = locMastService.queryFreeLocMast(deepRow, locMast.getLocType1());
                // 因库位移转、需预留空库位
                if (!locMastService.checkEmptyCount(targetLoc)) {
                    continue;
                }
            }
            if (Cools.isEmpty(targetLoc)) {
                targetLoc = locMastService.queryFreeLocMast(curRow, locMast.getLocType1());
                // 因库位移转、需预留空库位
                if (!locMastService.checkEmptyCount(targetLoc)) {
                    continue;
                }
                // 目标库位 ===>> 浅库位, 则校验其深库位是否为 F D X
                if (null != targetLoc && Utils.isShallowLoc(slaveProperties, targetLoc.getLocNo())) {
                    LocMast deepLoc = locMastService.selectById(Utils.getDeepLoc(slaveProperties, targetLoc.getLocNo()));
                    if (!deepLoc.getLocSts().equals("F") && !deepLoc.getLocSts().equals("D") && !deepLoc.getLocSts().equals("X")) {
                        continue;
                    }
                }
                // 目标库位 ===>> 深库位, 则校验其浅库位是否为 O
                if (null != targetLoc && Utils.isDeepLoc(slaveProperties, targetLoc.getLocNo())) {
                    LocMast shallowLoc = locMastService.selectById(Utils.getShallowLoc(slaveProperties, targetLoc.getLocNo()));
                    if (!shallowLoc.getLocSts().equals("O")) {
                        continue;
                    }
                }
            }
            if (!Cools.isEmpty(targetLoc)) {
                break;
            }
        }
        if (targetLoc == null) {
            throw new CoolException("操作失败,当前仓库找不到空库位");
        }
        Date now = new Date();
        // 修改工作档
        StaDesc staDesc = staDescService.queryCrnStn(targetLoc.getCrnNo());
        if (Cools.isEmpty(staDesc)) {
            throw new CoolException("入库路径不存在");
        }
        wrkMast.setWrkSts(2L);
        wrkMast.setLocNo(targetLoc.getLocNo());
        wrkMast.setStaNo(staDesc.getCrnStn());
        wrkMast.setCrnNo(targetLoc.getCrnNo());
        wrkMast.setModiTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setPreHave("N");
        if (!wrkMastService.updateById(wrkMast)) {
            throw new CoolException("修改工作档失败");
        }
        // 修改库位状态 O ===>>> S
        if (targetLoc.getLocSts().equals("O")){
            targetLoc.setLocSts("S"); // S.入库预约
            targetLoc.setModiUser(userId);
            targetLoc.setModiTime(now);
            if (!locMastService.updateById(targetLoc)){
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(targetLoc.getLocNo()+"目标库位已被占用");
        }
        // 禁用异常库位
//        locMast.setLocSts("X"); // X.禁用
//        locMast.setModiUser(userId);
//        locMast.setModiTime(now);
//        if (!locMastService.updateById(locMast)){
//            throw new CoolException("改变库位状态失败");
//        }
        return targetLoc.getLocNo();
    }
}
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -70,4 +70,14 @@
    public List<WrkDetl> selectAndLogByOrderNo(String orderNo) {
        return this.baseMapper.selectAndLogByOrderNo(orderNo);
    }
    @Override
    public boolean updateInspect(Integer wrkNo, String matnr, String batch) {
        return this.baseMapper.updateInspect(wrkNo, matnr, batch) > 0;
    }
    @Override
    public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr) {
        return this.baseMapper.selectPakoutQuery(staNo, matnr);
    }
}
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -2,13 +2,16 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.WrkMastService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service("wrkMastService")
public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService {
@@ -27,4 +30,13 @@
        return this.baseMapper.selectToBeHistoryData();
    }
    @Override
    public WrkMast selectByBarcode(String barcode) {
        List<WrkMast> wrkMasts = this.selectList(new EntityWrapper<WrkMast>().eq("barcode", barcode));
        if (Cools.isEmpty(wrkMasts)) {
            return null;
        }
        return wrkMasts.get(0);
    }
}
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -7,6 +7,7 @@
import com.zy.asrs.task.handler.OrderSyncHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -24,18 +25,9 @@
    @Autowired
    private OrderService orderService;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void queryAndSave(){
//        for (WrkMast wrkMast : wrkMasts) {
//            ReturnT<String> result = workLogHandler.start(wrkMast);
//            if (!result.isSuccess()) {
//                log.error("工作档[workNo={}]历史档处理失败", wrkMast.getWrkNo());
//            }
//        }
    }
    @Scheduled(cron = "0/5 * * * * ? ")
    private void completeAndReport(){
    @Async("orderThreadPool")
    public void completeAndReport(){
        List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 4L).eq("status", 1));
        for (Order order : orders) {
            ReturnT<String> result = orderSyncHandler.start(order);
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -107,6 +107,9 @@
            pakoutParam.setPakoutTime(DateUtils.convert(order.getUpdateTime()));
            pakoutParam.setLgortFrom("5006");
            pakoutParam.setLgortTo("1111");
            if (!pakoutParam.isTag()) {
                pakoutParam.setKunnr("C1000");
            }
            pakoutParam.setOrderNo(order.getOrderNo());
            for (OrderDetl orderDetl : orderDetls) {
                String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch();
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -1,9 +1,11 @@
package com.zy.asrs.task.handler;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
@@ -59,6 +61,9 @@
                case 10:
                    // 修改库位状态=D
                    if (locMast.getLocSts().equals("S") || locMast.getLocSts().equals("Q")) {
                        if (!Cools.isEmpty(wrkMast.getBarcode())) {
                            locMast.setBarcode(wrkMast.getBarcode());
                        }
                        locMast.setLocSts("D");
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
@@ -102,19 +107,19 @@
                        // 更新入库通知档 ioStatus ===>> Y
                        try {
                            Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
                                    .eq("zpallet", wrkDetl.getZpallet())
                                    .eq("matnr", wrkDetl.getMatnr())
                                    .eq("anfme", wrkDetl.getAnfme());
                            if (Cools.isEmpty(wrkDetl.getBatch())) {
                                wrapper.eq("batch", wrkDetl.getBatch());
                            } else {
                                wrapper.isNull("batch").or().eq("batch", "");
                            }
                            WaitPakin setParam = new WaitPakin();
                            setParam.setIoStatus("Y");
                            setParam.setModiTime(now);
                            waitPakinService.update(setParam, wrapper);
//                            Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
//                                    .eq("zpallet", wrkDetl.getZpallet())
//                                    .eq("matnr", wrkDetl.getMatnr())
//                                    .eq("anfme", wrkDetl.getAnfme());
//                            if (Cools.isEmpty(wrkDetl.getBatch())) {
//                                wrapper.eq("batch", wrkDetl.getBatch());
//                            } else {
//                                wrapper.isNull("batch").or().eq("batch", "");
//                            }
//                            WaitPakin setParam = new WaitPakin();
//                            setParam.setIoStatus("Y");
//                            setParam.setModiTime(now);
//                            waitPakinService.update(setParam, wrapper);
                        } catch (Exception ignore){}
                    }
src/main/java/com/zy/asrs/utils/InitStaDesc.java
New file
@@ -0,0 +1,122 @@
package com.zy.asrs.utils;
import com.zy.asrs.entity.StaDesc;
import com.zy.asrs.service.StaDescService;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
/**
 * Created by vincent on 2022/5/8
 */
//@Component
public class InitStaDesc {
    @Autowired
    private StaDescService staDescService;
    @PostConstruct
    public void initStaDesc() {
        in();
        out();
    }
    public void in() {
        // 全班入库
        int[] stnNos = new int[] {173, 176, 180, 185, 189, 194, 198, 202, 206, 211, 215, 219, 223, 226};
        int[] crnStns = new int[] {123, 121, 119, 117, 115, 113, 111, 109, 107, 105, 103, 101};
        for (int stnNo : stnNos) {
            for (int i = 0; i < crnStns.length; i++) {
                StaDesc staDesc = new StaDesc();
                staDesc.setTypeNo(1);
                staDesc.setStnNo(stnNo);
                staDesc.setCrnNo(i + 1);
                staDesc.setCrnStn(crnStns[i]);
                staDescService.insert(staDesc);
            }
        }
        // 空板入库
        for (int stnNo : stnNos) {
            for (int i = 0; i < crnStns.length; i++) {
                StaDesc staDesc = new StaDesc();
                staDesc.setTypeNo(10);
                staDesc.setStnNo(stnNo);
                staDesc.setCrnNo(i + 1);
                staDesc.setCrnStn(crnStns[i]);
                staDescService.insert(staDesc);
            }
        }
        // 拣料入库
        for (int stnNo : stnNos) {
            for (int i = 0; i < crnStns.length; i++) {
                StaDesc staDesc = new StaDesc();
                staDesc.setTypeNo(53);
                staDesc.setStnNo(stnNo);
                staDesc.setCrnNo(i + 1);
                staDesc.setCrnStn(crnStns[i]);
                staDescService.insert(staDesc);
            }
        }
        // 盘点入库
        for (int stnNo : stnNos) {
            for (int i = 0; i < crnStns.length; i++) {
                StaDesc staDesc = new StaDesc();
                staDesc.setTypeNo(57);
                staDesc.setStnNo(stnNo);
                staDesc.setCrnNo(i + 1);
                staDesc.setCrnStn(crnStns[i]);
                staDescService.insert(staDesc);
            }
        }
    }
    public void out() {
        // 全班出库
        int[] stnNos = new int[] {174, 177, 181, 186, 190, 195, 199, 203, 207, 212, 216, 220, 224, 227};
        int[] crnStns = new int[] {122, 120, 118, 116, 114, 112, 110, 108, 106, 104, 102, 100};
        for (int stnNo : stnNos) {
            for (int i = 0; i < crnStns.length; i++) {
                StaDesc staDesc = new StaDesc();
                staDesc.setTypeNo(101);
                staDesc.setStnNo(stnNo);
                staDesc.setCrnNo(i + 1);
                staDesc.setCrnStn(crnStns[i]);
                staDescService.insert(staDesc);
            }
        }
        // 空板出库
        for (int stnNo : stnNos) {
            for (int i = 0; i < crnStns.length; i++) {
                StaDesc staDesc = new StaDesc();
                staDesc.setTypeNo(110);
                staDesc.setStnNo(stnNo);
                staDesc.setCrnNo(i + 1);
                staDesc.setCrnStn(crnStns[i]);
                staDescService.insert(staDesc);
            }
        }
        // 拣料出库
        for (int stnNo : stnNos) {
            for (int i = 0; i < crnStns.length; i++) {
                StaDesc staDesc = new StaDesc();
                staDesc.setTypeNo(103);
                staDesc.setStnNo(stnNo);
                staDesc.setCrnNo(i + 1);
                staDesc.setCrnStn(crnStns[i]);
                staDescService.insert(staDesc);
            }
        }
        // 盘点出库
        for (int stnNo : stnNos) {
            for (int i = 0; i < crnStns.length; i++) {
                StaDesc staDesc = new StaDesc();
                staDesc.setTypeNo(107);
                staDesc.setStnNo(stnNo);
                staDesc.setCrnNo(i + 1);
                staDesc.setCrnStn(crnStns[i]);
                staDescService.insert(staDesc);
            }
        }
    }
}
src/main/java/com/zy/common/CodeRes.java
@@ -9,4 +9,7 @@
    String USER_10002 = "10002-账号已被禁用";
    String USER_10003 = "10003-密码错误";
    String PICK_600 = "600-拣料任务";
    String NO_COMB_700 = "700-请先组托";
}
src/main/java/com/zy/common/config/ThreadPoolConfig.java
New file
@@ -0,0 +1,36 @@
package com.zy.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
 * Created by vincent on 2022/5/21
 */
@Configuration
@EnableAsync
public class ThreadPoolConfig {
    @Bean(name = "orderThreadPool")
    public ThreadPoolTaskExecutor orderThreadPool() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        int core = Runtime.getRuntime().availableProcessors();
        core = 2;
        //设置核心线程数
        executor.setCorePoolSize(core);
        //设置最大线程数
        executor.setMaxPoolSize(core * 10 + core);
        //除核心线程外的线程存活时间
        executor.setKeepAliveSeconds(3);
        //缓冲队列
        executor.setQueueCapacity(core);
        executor.setThreadNamePrefix("order-task-");
        //设置拒绝策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
    }
}
src/main/java/com/zy/common/constant/MesConstant.java
@@ -5,8 +5,7 @@
 */
public class MesConstant {
    public static final String URL = "http://192.168.1.72:8301";
    public static final String URL = "http://192.168.99.130:80";
    public static final String PACK_DOWN_URL = "mes/api/zy/v1/packDown/sendList";
src/main/java/com/zy/common/model/MesCombParam.java
@@ -20,6 +20,13 @@
    // 仓库编号 - 写死
    private String lgort;
    // 新增
    private String plantCode;
    private String fromCode;
    private String stationCode;
    private List<Detl> list = new ArrayList<>();
    @Data
src/main/java/com/zy/common/model/MesPakoutParam.java
@@ -29,6 +29,9 @@
    // 目的地 - 写死
    private String lgortTo;
    // 客户号
    private String kunnr;
    private List<Detl> list = new ArrayList<>();
    @Data
src/main/java/com/zy/common/model/WrkDto.java
New file
@@ -0,0 +1,26 @@
package com.zy.common.model;
import com.zy.asrs.entity.WrkDetl;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by vincent on 2022/5/13
 */
@Data
public class WrkDto {
    private Integer wrkNo;
    private List<WrkDetl> wrkDetls = new ArrayList<>();
    public WrkDto() {
    }
    public WrkDto(Integer wrkNo, WrkDetl wrkDetl) {
        this.wrkNo = wrkNo;
        this.wrkDetls .add(wrkDetl);
    }
}
src/main/java/com/zy/common/service/CommonService.java
@@ -205,6 +205,7 @@
            if (Utils.isShallowLoc(slaveProperties, curRow)) {
                Integer deepRow = Utils.getDeepRow(slaveProperties, curRow);
                locMast = locMastService.queryFreeLocMast(deepRow, locTypeDto.getLocType1());
                // todo:luxiaotao 如果用浅排找到的深库位,那么则需要判断这个深库位对应的浅库位是否有货(F、X、D)
                // 因库位移转、需预留空库位
                if (!locMastService.checkEmptyCount(locMast)) {
                    locMast = null;
src/main/java/com/zy/common/web/WcsController.java
@@ -1,11 +1,13 @@
package com.zy.common.web;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.common.CodeRes;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
@@ -56,9 +58,13 @@
            if (Cools.isEmpty(param.getBarcode())) {
                return R.error("条码不能为空");
            }
            waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("barcode", param.getBarcode()));
            waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
            if (Cools.isEmpty(waitPakins)) {
                return R.error("条码数据错误");
                WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
                if (wrkMast != null && wrkMast.getIoType() == 103) {
                    return R.parse(CodeRes.PICK_600);
                }
                return R.parse(CodeRes.NO_COMB_700);
            }
            int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
            int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
@@ -81,7 +87,7 @@
                dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins);
                break;
            case 10://空托盘入库
                dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto);
                dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto, param.getBarcode());
                break;
            default:
                break;
@@ -140,6 +146,15 @@
                throw new CoolException("保存工作明细失败");
            }
        });
        // 更新入库通知档 ioStatus ===>> Y
        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
                .eq("zpallet", barcode);
        WaitPakin setParam = new WaitPakin();
        setParam.setIoStatus("Y");
        setParam.setModiTime(now);
        if (!waitPakinService.update(setParam, wrapper)) {
            throw new CoolException("更新通知档失败");
        }
        // 更新源站点信息
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiTime(now);
@@ -161,7 +176,7 @@
    }
    @Transactional
    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto) {
    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
@@ -183,6 +198,7 @@
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setBarcode(barcode);
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(new Date());
src/main/resources/application.yml
@@ -9,14 +9,9 @@
  jmx:
    enabled: false
  datasource:
    # sql-server
#    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://47.97.1.152:51433;databasename=jkasrs
#    username: sa
#    password: Zoneyung@zy56$
    # localhost
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://localhost:1433;databasename=jkasrs
#    url: jdbc:sqlserver://localhost:1433;databasename=jkasrs
    url: jdbc:sqlserver://10.20.192.200:1433;databasename=jkasrs
    username: sa
    password: sa@123
  mvc:
@@ -52,9 +47,7 @@
  # 双深
  doubleDeep: true
  # 双深库位排号
  doubleLocs: 1,4,5,8
  doubleLocs: 1,4,5,8,9,12,13,16
  # 一个堆垛机负责的货架排数
  groupCount: 4
erp:
  url: http://123.60.34.127:6220/api
src/main/resources/mapper/LocDetlMapper.xml
@@ -213,6 +213,14 @@
        <if test="orderNo != null and orderNo != ''">
            and a.orderNo = #{orderNo}
        </if>
        <if test="locNos != null and locNos.size > 0">
            and b.loc_no not in
            <foreach item="item" collection="locNos" index="index"  separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        order by
        DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme
        desc,
@@ -289,5 +297,9 @@
        where 1=1
        group by matnr,batch
    </select>
    <select id="sum" resultType="java.lang.Integer">
        SELECT SUM(anfme) FROM asr_loc_detl
    </select>
</mapper>
src/main/resources/mapper/RowLastnoMapper.xml
@@ -19,4 +19,12 @@
    </resultMap>
    <select id="findBySection" resultMap="BaseResultMap">
        select * from asr_row_lastno
        where 1=1
        and s_row &lt;= #{row}
        and e_row >= #{row}
        order by (e_row - s_row)
    </select>
</mapper>
src/main/resources/mapper/StaDescMapper.xml
@@ -29,7 +29,13 @@
        <if test="typeNo != null and typeNo !=''">
            and asd.type_no = #{typeNo}
        </if>
    </select>
    <select id="queryCrnStn" resultMap="BaseResultMap">
        select top 1 * from asr_sta_desc
        where 1=1
        and crn_no = #{crnNo}
        and type_no = 1
    </select>
</mapper>
src/main/resources/mapper/ViewWorkInMapper.xml
@@ -99,11 +99,13 @@
<!-- 不分页查询所有信息,用于excel导出 -->
<select id="getViewWorkInAll" parameterType="com.zy.asrs.entity.ViewWorkInBean" resultType="com.zy.asrs.entity.ViewWorkInBean">
    select count(1)
    from asr_wrkin_view a
<!--    select count(1)-->
<!--    from asr_wrkin_view a-->
<!--    where 1=1-->
<!--    <include refid="viewWorkInConditionSql"></include>-->
    select * from asr_wrkin_view
    where 1=1
    <include refid="viewWorkInConditionSql"></include>
    order by io_time desc
</select>
<!-- 出库统计 -->
src/main/resources/mapper/WrkDetlMapper.xml
@@ -87,4 +87,25 @@
        select * from asr_wrk_detl_log where order_no = #{orderNo}
    </select>
    <update id="updateInspect">
        update asr_wrk_detl
        set inspect = 1
        where 1=1
        and wrk_no = #{wrkNo}
        and matnr = #{matnr}
        <include refid="batchSeq"></include>
    </update>
    <select id="selectPakoutQuery" resultMap="BaseResultMap">
        select
        awd.*
        from asr_wrk_detl awd
        left join asr_wrk_mast awm on awd.wrk_no = awm.wrk_no
        where 1=1
        and awm.wrk_sts = 14
        and (awd.inspect is null or awd.inspect = 0)
        and awm.sta_no = #{staNo}
        and awd.matnr + '-' + awd.batch = #{matnr}
    </select>
</mapper>
src/main/resources/mapper/WrkMastLogMapper.xml
@@ -60,7 +60,8 @@
        <result column="Pdc_type" property="PdcType" />
        <result column="ctn_no" property="ctnNo" />
        <result column="full_plt" property="fullPlt" />
        <result column="pre_have" property="preHave" />
        <result column="take_none" property="takeNone" />
    </resultMap>
</mapper>
src/main/resources/mapper/WrkMastMapper.xml
@@ -59,7 +59,8 @@
        <result column="Pdc_type" property="PdcType" />
        <result column="ctn_no" property="ctnNo" />
        <result column="full_plt" property="fullPlt" />
        <result column="pre_have" property="preHave" />
        <result column="take_none" property="takeNone" />
    </resultMap>
    <select id="selectToBeCompleteData" resultMap="BaseResultMap">
src/main/webapp/static/css/cool.css
@@ -41,4 +41,8 @@
}
.cool-auto-complete-window-select option:first-child{
    color:#aaaaaa;
}
}
.layui-table-grid-down {
    display: none;
}
src/main/webapp/static/js/basDevp/basDevp.js
@@ -77,7 +77,7 @@
                }}
            ,{field: 'wrkNo', align: 'center',title: '工作号', edit:true,  style:'color: blue;font-weight: bold'}
            // ,{field: 'wrkNo1', align: 'center',title: ''}
            ,{field: 'ctnType', align: 'center',title: '容器类型'}
            ,{field: 'locType1$', align: 'center',title: '高低'}
            ,{field: 'barcode', align: 'center',title: '条形码'}
            // ,{field: 'inQty', align: 'center',title: ''}
            // ,{field: 'row1', align: 'center',title: ''}
src/main/webapp/static/js/common.js
@@ -214,7 +214,7 @@
    {field: 'matnr', align: 'center',title: '商品编号'}
    ,{field: 'maktx', align: 'center',title: '商品名称'}
    ,{field: 'orderNo', align: 'center',title: '单据编号', hide: false}
    ,{field: 'batch', align: 'center',title: '序列码'}
    ,{field: 'batch', align: 'center',title: '序列码', width: 300}
    ,{field: 'anfme', align: 'center',title: '数量'}
    ,{field: 'zpallet', align: 'center',title: '托盘条码'}
src/main/webapp/static/js/locDetl/locDetl.js
@@ -21,8 +21,8 @@
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/locDetl/list/auth',
        page: true,
        limit: 16,
        limits: [16, 30, 50, 100, 200, 500],
        limit: 20,
        limits: [20, 30, 50, 100, 200, 500],
        even: true,
        toolbar: '#toolbar',
        cellMinWidth: 50,
src/main/webapp/static/js/locDetlStatis/locDetlStatis.js
@@ -24,8 +24,8 @@
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/locDetl/statis/auth',
        page: true,
        limit: 16,
        limits: [16, 30, 50, 100, 200, 500],
        limit: 20,
        limits: [20, 30, 50, 100, 200, 500],
        even: true,
        toolbar: '#toolbar',
        cellMinWidth: 50,
@@ -59,6 +59,19 @@
                    res.data[_index][data.value] = 'N';
                }
            });
            /**
             * 显示库存总数量
             */
            $.ajax({
                url: baseUrl+"/locDetl/count",
                headers: {'token': localStorage.getItem('token')},
                contentType:'application/json;charset=UTF-8',
                method: 'POST',
                success: function (res) {
                    $("#countNum").text(res.data + '个');
                }
            });
        }
    });
src/main/webapp/static/js/order/order.js
@@ -11,6 +11,27 @@
    var xmSelect = layui.xmSelect;
    var layDate = layui.laydate;
    // 渲染搜索模板
    $.ajax({
        url: baseUrl+"/docType/list/auth",
        headers: {'token': localStorage.getItem('token')},
        data: {
            limit: 9999
        },
        method: 'POST',
        success: function (res) {
            if (res.code === 200){
                let template = Handlebars.compile($('#docTypeTpl').html());
                $('#docType-query').html(template(res.data));
                layui.form.render('select');
            } else if (res.code === 403){
                top.location.href = baseUrl+"/";
            } else {
                layer.msg(res.msg, {icon: 2})
            }
        }
    })
    // 渲染表格
    var insTb = table.render({
        elem: '#order',
@@ -98,12 +119,12 @@
                        cellMinWidth: 100,
                        cols: [[
                            {type: 'numbers'},
                            {field: 'matnr', title: '商品编码'},
                            {field: 'matnr', title: '商品编码', width: 160},
                            {field: 'maktx', title: '商品名称', width: 160},
                            {field: 'batch', title: '序列码'},
                            {field: 'anfme', title: '数量'},
                            {field: 'qty', title: '作业数量', style: 'font-weight: bold'},
                            {field: 'unit', title: '单位'},
                            // {field: 'unit', title: '单位'},
                            // {
                            //     field: 'createTime$', title: '创建时间', sort: true, templet: function (d) {
                            //         return util.toDateString(d.createTime);
@@ -211,7 +232,7 @@
                        {field: 'specs', title: '规格'},
                        {field: 'anfme', title: '数量(修改)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                        // {field: 'inQty', title: '已入库量',  minWidth: 100, width: 100},
                        {field: 'unit', title: '单位', width: 80},
                        // {field: 'unit', title: '单位', width: 80},
                        {field: 'memo', title: '备注' , edit: true},
                        {align: 'center', title: '操作', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'}
                    ]],
src/main/webapp/static/js/order/out.js
@@ -135,7 +135,7 @@
                        ,title: false
                        ,closeBtn: false
                        ,offset: '100px'
                        ,area: '1200px'
                        ,area: ['1200px', '700px']
                        ,shade: 0.5
                        ,shadeClose: true
                        ,btn: ['立即出库', '稍后处理']
@@ -146,7 +146,7 @@
                            table.render({
                                elem: '#stoPreTab',
                                data: res.data,
                                height: 450,
                                height: 520,
                                page: false,
                                limit: Number.MAX_VALUE,
                                cellMinWidth: 100,
@@ -169,7 +169,12 @@
                            form.on('select(tbBasicTbStaNos)', function (obj) {
                                let index  = obj.othis.parents('tr').attr("data-index");
                                let data = tableCache[index];
                                data['staNo'] = Number(obj.elem.value);
                                for (let i = 0; i<tableCache.length; i++) {
                                    if (tableCache[i].locNo === data.locNo) {
                                        tableCache[i]['staNo'] = Number(obj.elem.value);
                                    }
                                }
                                // data['staNo'] = Number(obj.elem.value);
                                obj.othis.children().find("input").css("color", "blue");
                                return false;
                            });
src/main/webapp/static/js/pakStore/stockOut.js
@@ -28,6 +28,7 @@
        even: true,
        toolbar: '#toolbar',
        cellMinWidth: 50,
        limit: 500,
        cols: [getCol()],
        done: function(res, curr, count) {
            limit();
src/main/webapp/static/js/stoMan/stoQue.js
@@ -19,8 +19,8 @@
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/locMast/list/auth',
        page: true,
        limit: 16,
        limits: [16, 30, 50, 100, 200, 500],
        limit: 20,
        limits: [20, 30, 50, 100, 200, 500],
        even: true,
        toolbar: '#toolbar',
        cellMinWidth: 50,
src/main/webapp/static/js/wrkMast/wrkMast.js
@@ -31,6 +31,8 @@
            ,{field: 'sourceLocNo$', align: 'center',title: '源库位'}
            ,{field: 'locNo$', align: 'center',title: '目标库位'}
            ,{field: 'barcode', align: 'center',title: '条码'}
            ,{field: 'preHave', align: 'center',title: '先入品', hide: true}
            ,{field: 'takeNone', align: 'center',title: '空操作', hide: true}
            // ,{field: 'picking', align: 'center',title: '拣料', templet:function(row){
            //         var html = "<input value='picking' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
            //         if(row.picking === 'Y'){html += " checked ";}
@@ -64,7 +66,7 @@
            //         return html;
            //     }}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:230}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:250}
        ]],
        request: {
            pageName: 'curr',
@@ -269,7 +271,7 @@
    // 监听行工具事件
    table.on('tool(wrkMast)', function(obj){
        var data = obj.data;
        let data = obj.data;
        switch (obj.event) {
            // 明细展示 todo
            case 'detlShow':
@@ -318,7 +320,6 @@
                        layer.closeAll();
                    });
                }
                break;
            //  拣料入库
            case 'pick':
@@ -330,46 +331,19 @@
                    layer.closeAll();
                });
                break;
            // 详情
            case 'detail':
                layer.open({
                    type: 2,
                    title: '详情',
                    maxmin: true,
                    area: [top.detailWidth, top.detailHeight],
                    shadeClose: false,
                    content: 'wrkMast_detail.html',
                    success: function(layero, index){
                        setFormVal(layer.getChildFrame('#detail', index), data, true);
                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                        layer.getChildFrame('##dealDownLine', index).hide();
                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                    }
            //  先入品
            case 'preHave':
                layer.confirm('任务发生先入品异常。如需重新入库,请确保货物已放至堆垛机出库站!', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){
                    http.post(baseUrl+"/deal/preHave/start", {wrkNo: data.wrkNo}, function (res) {
                        $(".layui-laypage-btn")[0].click();
                        layer.msg(data.wrkNo + res.msg, {icon: 1});
                    })
                    layer.closeAll();
                });
                break;
            // 编辑
            case 'edit':
                layer.open({
                    type: 2,
                    title: '修改',
                    maxmin: true,
                    area: [top.detailWidth, top.detailHeight],
                    shadeClose: false,
                    content: 'wrkMast_detail.html',
                    success: function(layero, index){
                        layer.getChildFrame('#crnStrTime\\$,#crnEndTime\\$,#refIotime\\$,#ioTime\\$', index).parent().parent().hide();
                        layer.getChildFrame('#data-detail-submit-save', index).hide();
                        setFormVal(layer.getChildFrame('#detail', index), data, false);
                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
                        top.convertDisabled(layer.getChildFrame('#wrkNo', index), true);
                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                        layer.getChildFrame('##dealDownLine', index).hide();
                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                    }
            //  空操作
            case 'takeNone':
                layer.confirm('任务发送空操作异常!是否。。。。。。。。?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){
                });
                break;
        }
src/main/webapp/views/basDevp/basDevp.html
@@ -14,18 +14,18 @@
<!-- 搜索栏 -->
<div id="search-box" class="layui-form layui-card-header">
    <!--<div class="layui-inline">-->
        <!--<label class="layui-form-label">编  号:</label>-->
        <!--<div class="layui-input-inline">-->
            <!--<input class="layui-input" type="text" name="dev_no" placeholder="请输入" autocomplete="off">-->
        <!--</div>-->
    <!--</div>-->
    <div class="layui-inline">
        <label class="layui-form-label">编号:</label>
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="dev_no" placeholder="请输入" autocomplete="off">
        </div>
    </div>
    <!-- 待添加 -->
    <!--<div id="data-search-btn" class="layui-btn-container layui-form-item">-->
        <!--<button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>-->
        <!--<button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>-->
    <!--</div>-->
    <div id="data-search-btn" class="layui-btn-container layui-form-item">
        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>
        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>
    </div>
</div>
<!-- 表格 -->
src/main/webapp/views/locDetl/locDetl.html
@@ -21,9 +21,15 @@
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="zpallet" 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="condition" placeholder="请输入" autocomplete="off">
src/main/webapp/views/locDetlStatis/locDetlStatis.html
@@ -21,8 +21,18 @@
    </div>
    <!-- 待添加 -->
    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>
        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>
        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索
        </button>
        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置
        </button>
    </div>
    <div class="layui-inline">
        <fieldset class="layui-elem-field">
            <legend>总计数量</legend>
            <div class="layui-field-box" id="countNum">
                请稍等
            </div>
        </fieldset>
    </div>
</div>
@@ -31,7 +41,8 @@
    <table class="layui-hide" id="locDetlStatis" lay-filter="locDetlStatis"></table>
</div>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
    <div class="layui-btn-container layui-col-md1">
        <button class="layui-btn" lay-event="exportAll" style="margin-top: -0px">导出全部</button>
    </div>
</script>
src/main/webapp/views/login.html
@@ -3,7 +3,7 @@
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>instancing │ sketch of three.js</title>
    <title>中扬 │ login of zoneyung wms</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1">
    <meta name="description" content="study of Instancing with three.js">
    <meta name="keywords" content="undefined, Yoichi Kobayashi, WebGL, three.js">
src/main/webapp/views/mat/mat.html
@@ -193,16 +193,23 @@
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">SKC</label>
                    <label class="layui-form-label">配置</label>
                    <div class="layui-input-block">
                        <input name="barcode" placeholder="请输入条码" class="layui-input">
                        <input name="specs" placeholder="请输入配置" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单价</label>
                    <label class="layui-form-label">单箱净重</label>
                    <div class="layui-input-block">
                        <input name="price" type="number" placeholder="请输入单价" class="layui-input">
                        <input name="weight" placeholder="请输入单箱净重格" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱体积</label>
                    <div class="layui-input-block">
                        <input name="volume" placeholder="请输入单箱体积" class="layui-input">
                    </div>
                </div>
@@ -217,16 +224,9 @@
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">规格</label>
                    <label class="layui-form-label">代码</label>
                    <div class="layui-input-block">
                        <input name="specs" placeholder="请输入规格" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单位</label>
                    <div class="layui-input-block">
                        <input name="unit" placeholder="请输入单位" class="layui-input">
                        <input name="model" type="number" placeholder="请输入代码" class="layui-input">
                    </div>
                </div>
@@ -237,16 +237,19 @@
                    </div>
                </div>
                <!--                <div class="layui-form-item">-->
                <!--                    <label class="layui-form-label layui-form-required">状态</label>-->
                <!--                    <div class="layui-input-block">-->
                <!--                        <select name="status" lay-vertype="tips" lay-verify="required" required="">-->
                <!--                            <option value="">请选择状态</option>-->
                <!--                            <option value="1">正常</option>-->
                <!--                            <option value="0">禁用</option>-->
                <!--                        </select>-->
                <!--                    </div>-->
                <!--                </div>-->
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱毛重</label>
                    <div class="layui-input-block">
                        <input name="length" placeholder="请输入单箱毛重" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单箱体积</label>
                    <div class="layui-input-block">
                        <input name="threeCode" placeholder="请输入箱子尺寸" class="layui-input">
                    </div>
                </div>
            </div>
        </div>
src/main/webapp/views/order/order.html
@@ -49,6 +49,23 @@
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <select name="doc_type" id="docType-query">
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <select name="settle">
                                <option value="">选择状态</option>
                                <option value="1">待处理</option>
                                <option value="2">作业中</option>
                                <option value="4">已完成</option>
                                <option value="6">上报完成</option>
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <button class="layui-btn icon-btn" lay-filter="tbSearch" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
                        </button>
@@ -167,10 +184,19 @@
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/order/order.js" charset="utf-8"></script>
<script type="text/template" id="docTypeTpl">
    <option value="">选择类型</option>
    {{#each records}}
    <option value="{{docId}}">{{docName}}</option>
    {{/each}}
</script>
</body>
</html>
src/main/webapp/views/pakStore/locDetlQuery.html
@@ -120,7 +120,8 @@
            headers: {token: localStorage.getItem('token')},
            url: baseUrl+'/stock/out/list/auth',
            page: true,
            limit: 10,
            limits: [16, 30, 50, 100, 200, 500],
            limit: 16,
            even: true,
            toolbar: '#toolbar',
            cellMinWidth: 50,
src/main/webapp/views/report/locDetl.html
@@ -51,7 +51,7 @@
            headers: {token: localStorage.getItem('token')},
            url: baseUrl+'/locDetl/list/auth',
            page: true,
            limit: 10,
            limit: 20,
            skin: 'line',
            where: {loc_no: parent.locNo},
            even: true,
src/main/webapp/views/stoMan/stoQue.html
@@ -32,6 +32,11 @@
            <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="barcode" placeholder="托盘码" autocomplete="off">
        </div>
    </div>
    <!-- 日期范围 -->
    <div class="layui-inline" style="width: 300px">
        <div class="layui-input-inline">
src/main/webapp/views/wrkMast/wrkMast.html
@@ -113,6 +113,12 @@
</div>
<script type="text/html" id="operate">
    {{#if (d.preHave === 'Y' && d.wrkSts === 3) { }}
    <a class="layui-btn layui-btn-primary layui-border-red layui-btn-xs btn-error" lay-event="preHave">先入品</a>
    {{# } }}
    {{#if (d.takeNone === 'Y' && d.wrkSts === 12) { }}
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-error" lay-event="takeNone">空操作</a>
    {{# } }}
    <a class="layui-btn layui-btn-xs btn-detlShow" lay-event="detlShow">明细</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-complete" lay-event="complete">完成</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-cancel" lay-event="cancel">取消</a>