自动化立体仓库 - WMS系统
luxiaotao1123
2022-11-03 91d05844fa5d170face76455d38a330f24e214bc
Merge branch 'bfasrs' of http://47.97.1.152:5880/r/zy-asrs into bfasrs

 Conflicts:
 src/main/resources/mapper/LocDetlMapper.xml
29个文件已修改
653 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocMastController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MatController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocMast.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/OrderDetl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CombParam.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/MobileAdjustParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/DetlDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locMast/locMast.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/stoMan/stoQue.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locDetl/locDetl.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locMast/locMast_detail.html 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/边锋数据库改动20221028/边锋数据库改动.md 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -107,6 +107,10 @@
            return R.error();
        }
        if (!locMast.getLocSts().equals("F") && !Cools.isEmpty(locMast.getFrozen()) && locMast.getFrozen() == 1) {
            return R.error("库存在库状态才能冻结");
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                .eq("source_loc_no", locMast.getLocNo())
                .or().eq("loc_no", locMast.getLocNo()));
src/main/java/com/zy/asrs/controller/MatController.java
@@ -12,6 +12,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.MatPrint;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.dto.OrderDetlWithSum;
import com.zy.asrs.entity.result.KeyValueVo;
import com.zy.asrs.service.LocDetlService;
@@ -219,10 +220,11 @@
        if (mat == null) {
            return R.ok();
        }
        OrderDetlWithSum orderDetl = new OrderDetlWithSum();
//        OrderDetlWithSum orderDetl = new OrderDetlWithSum();
        OrderDetl orderDetl = new OrderDetl();
        orderDetl.sync(mat);
        orderDetl.setAnfme(0.0D);
        orderDetl.setSum(locDetlService.selectSumByMatnr(mat.getMatnr()));
//        orderDetl.setSum(locDetlService.selectSumByMatnr(mat.getMatnr()));
        return R.ok().add(orderDetl);
    }
@@ -316,7 +318,7 @@
        List<KeyValueVo> valueVos = new ArrayList<>();
        for (Mat mat : mats) {
            KeyValueVo vo = new KeyValueVo();
            vo.setName(mat.getMatnr() + " - " + mat.getMaktx());
            vo.setName(mat.getSpecs() + "-" + mat.getMaktx() + " - " + mat.getMatnr());
            vo.setValue(mat.getMatnr());
            valueVos.add(vo);
        }
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -48,6 +48,60 @@
    @Autowired
    private PackService packService;
    // æ‹£æ–™æ£€ç´¢æ‰˜ç›˜ä¿¡æ¯
    @RequestMapping("/piking/auth")
    @ManagerAuth
    public R pikingAuth(String barcode) {
        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
        if (wrkMast.getIoType() != 103){
            throw new CoolException("此托盘码不为拣料出库");
        }
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        return R.ok().add(wrkDetls);
    }
    // æ‹£æ–™è½¬å…¨æ¿
    @RequestMapping("/piking/to/full")
    @ManagerAuth
    @Transactional
    public R pikingToFull(String barcode) {
        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
        if (wrkMast.getIoType() != 103){
            throw new CoolException(barcode + "不为拣料出库");
        }
        if(Cools.isEmpty(wrkMast)){
            throw new CoolException("工作档不能为空");
        }
        Date now = new Date();
        List<LocDetl> locDetls = locDetlService.selectByLocNo(wrkMast.getSourceLocNo());
        wrkMast.setIoType(101);
        wrkMast.setSourceStaNo(wrkMast.getStaNo());
        wrkMast.setStaNo(200);
        wrkMastService.updateById(wrkMast);
        wrkDetlService.deleteByWrkNo(wrkMast.getWrkNo());
        for(LocDetl locDetl : locDetls){
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setModiTime(now);
            wrkDetl.sync(locDetl);
            wrkDetlService.insert(wrkDetl);
        }
        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
        if (locMast.getLocSts().equals("P")) {
            locMast.setLocSts("R");
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("改变库位状态失败");
            }
        }
        locMastService.updateById(locMast);
        return R.ok("转换成功");
    }
    // ç»„托 ----------------------------------------------------------------------------------------------------
    /**
@@ -287,6 +341,17 @@
        return R.ok();
    }
    @RequestMapping("/checkDetl/auth2")
    @ManagerAuth
    public R getCheckDetl2(String barcode) {
        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
        if (wrkMast.getIoType() != 107){
            throw new CoolException("此托盘码不为盘点出库");
        }
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        return R.ok().add(wrkDetls);
    }
    @RequestMapping("/adjust/auth")
    @ManagerAuth(memo = "盘点")
    public R adjust(@RequestBody MobileAdjustParam combParam){
@@ -294,5 +359,12 @@
        return R.ok("盘点成功");
    }
    @RequestMapping("/adjustNew/auth")
    @ManagerAuth(memo = "盘点")
    public R adjustNew(@RequestBody MobileAdjustParam combParam){
        mobileService.adjustNew(combParam, getUserId());
        return R.ok("盘点成功");
    }
}
src/main/java/com/zy/asrs/entity/LocMast.java
@@ -176,6 +176,11 @@
    @TableField("ctn_no")
    private String ctnNo;
    /**
     * æ˜¯å¦å†»ç»“
     */
    @ApiModelProperty(value= "是否冻结")
    private Integer frozen;
    public String getWhsType$(){
        BasWhsService service = SpringUtils.getBean(BasWhsService.class);
@@ -290,4 +295,15 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime);
    }
    public String getFrozen$() {
        if (null == this.frozen){ return null; }
        switch (this.frozen){
            case 0:
                return "";
            case 1:
                return "已冻结";
            default:
                return null;
        }
    }
}
src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -6,6 +6,8 @@
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.common.utils.Synchro;
import com.zy.system.entity.User;
@@ -285,6 +287,12 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    /**
     * åº“存汇总数量
     */
    @TableField(exist=false)
    private Double sum;
    public OrderDetl() {}
    public OrderDetl(Long orderId, String orderNo, Double anfme, Double qty, String matnr, String maktx, String batch, String specs, String model, String color, String brand, String unit, Double price, String sku, Double units, String barcode, String origin, String manu, String manuDate, String itemNum, Double safeQty, Double weight, Double length, Double volume, String threeCode, String supp, String suppCode, Integer beBatch, String deadTime, Integer deadWarn, Integer source, Integer inspect, Integer danger, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) {
@@ -443,4 +451,12 @@
        Synchro.Copy(source, this);
    }
    public Double getSum(){
        LocDetlService service = SpringUtils.getBean(LocDetlService.class);
        if (!Cools.isEmpty(this.getMatnr())) {
            return service.selectSumByMatnr(this.getMatnr());
        } else {
            return null;
        }
    }
}
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -152,6 +152,9 @@
    @ApiModelProperty(value= "备注")
    private String memo;
    @ApiModelProperty(value= "是否冻结")
    private Integer frozen;
    public String getBeBatch$(){
        if (null == this.beBatch){ return null; }
        switch (this.beBatch){
src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -268,6 +268,11 @@
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    /**
     * æ˜¯å¦å†»ç»“
     */
    @ApiModelProperty(value= "是否冻结")
    private Integer frozen;
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -335,6 +335,11 @@
    @TableField("take_none")
    private String takeNone;
    /**
     * æ˜¯å¦å†»ç»“
     */
    @ApiModelProperty(value= "是否冻结")
    private Integer frozen;
    public WrkMast() {}
    public String getYmd$(){
src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -16,6 +16,9 @@
    // æ‰˜ç›˜æ¡ç 
    private String barcode;
    // æ˜¯å¦å†»ç»“
    private Integer frozen;
    private List<CombMat> combMats;
    @Data
@@ -30,6 +33,9 @@
        // ç‰©æ–™æ•°é‡
        private Double anfme;
        // å¤‡æ³¨
        private String memo;
    }
}
src/main/java/com/zy/asrs/entity/param/MobileAdjustParam.java
@@ -15,6 +15,8 @@
    private Integer wrkNo;
    private String barcode;
    private List<WrkDetl> wrkDetls;
}
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -14,6 +14,7 @@
public interface LocMastMapper extends BaseMapper<LocMast> {
    List<LocMast> queryFreeLocMast(@Param("rows") List<Integer> rows, @Param("rowsLen") Integer rowsLen, @Param("locType1") Short locType1);
    List<LocMast> queryFreeLocMast2(@Param("rows") List<Integer> rows, @Param("rowsLen") Integer rowsLen, @Param("locType1") Short locType1, @Param("inoutEveryday") Boolean inoutEveryday);
    @Select("select loc_no from asr_loc_mast where 1=1 and loc_sts = 'O' and crn_no = #{crnNo}")
    List<String> queryGroupEmptyStock(Integer crnNo);
src/main/java/com/zy/asrs/service/LocMastService.java
@@ -12,6 +12,7 @@
     * æ£€ç´¢å¯ç”¨åº“位
     */
    List<LocMast> queryFreeLocMast(List<Integer> rows, Integer rowsLen, Short locType1);
    List<LocMast> queryFreeLocMast2(List<Integer> rows, Integer rowsLen, Short locType1,Boolean inoutEveryday);
    /**
     * èŽ·å–åŒç»„è´§æž¶çš„ç©ºåº“ä½
src/main/java/com/zy/asrs/service/MobileService.java
@@ -14,7 +14,10 @@
     * ç›˜ç‚¹
     */
    void adjust(MobileAdjustParam param, Long userId);
    void adjustNew(MobileAdjustParam param, Long userId);
    void packComb(CombParam param, Long userId);
    void pikingToFull(String s);
}
src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -59,7 +59,7 @@
            if(station.getWrkNo()!=null && station.getWrkNo()>0 && station.getWrkNo() < 9990) {
                WrkMast wrkMast = wrkMastService.selectById(station.getWrkNo());
                if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
                if (wrkMast!=null && wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
                    throw new CoolException(devpNo+"站点已有工作号");
                }
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -30,6 +30,10 @@
    public List<LocMast> queryFreeLocMast(List<Integer> rows, Integer rowsLen, Short locType1) {
        return this.baseMapper.queryFreeLocMast(rows, rowsLen, locType1);
    }
    @Override
    public List<LocMast> queryFreeLocMast2(List<Integer> rows, Integer rowsLen, Short locType1,Boolean inoutEveryday) {
        return this.baseMapper.queryFreeLocMast2(rows, rowsLen, locType1,inoutEveryday);
    }
    @Override
    public List<String> queryGroupEmptyStock(String sourceLocNo) {
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -63,6 +63,10 @@
    private ApiLogService apiLogService;
    @Autowired
    private WorkLogHandler workLogHandler;
    @Autowired
    private AdjDetlService adjDetlService;
    @Autowired
    private CheckRecordService checkRecordService;
    @Override
    @Transactional
@@ -93,7 +97,7 @@
            // ç”Ÿæˆå…¥åº“通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(), elem.getMemo());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    assert one != null;
@@ -120,6 +124,8 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(detlDto.getMemo());
                waitPakin.setFrozen(param.getFrozen()); // æ˜¯å¦å†»ç»“
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
@@ -177,6 +183,70 @@
            orderService.updateSettle(order.getId(), 2L, userId);
        }
    }
    @Override
    @Transactional
    public void adjustNew(MobileAdjustParam param, Long userId) {
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", param.getBarcode()));
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException("托盘码:"+param.getBarcode()+" æ— æœ‰æ•ˆå·¥ä½œæ¡£");
        }else if (wrkMast.getIoType()!=107){
            throw new CoolException("托盘码:"+param.getBarcode()+" æ‰€å±žå·¥ä½œæ¡£éžç›˜ç‚¹ä»»åŠ¡");
        }else if (wrkMast.getWrkSts()!=17.0){
            throw new CoolException("托盘码:"+param.getBarcode()+" æ‰€å±žå·¥ä½œæ¡£å·¥ä½œçŠ¶æ€ä¸æ˜¯å‡ºåº“å®Œæˆ");
        }else { }
        List<WrkDetl> wrkDetls = param.getWrkDetls();
        String recordRecordLog="托盘码"+param.getBarcode()+"盘点记录:";
        AdjDetl adjDetl=new AdjDetl();
        adjDetl.setAppeTime(new Date());
        adjDetl.setAppeUser(userId);
        adjDetl.setModiTime(new Date());
        adjDetl.setModiUser(userId);
        adjDetl.setLocNo(wrkMast.getSourceLocNo());
        CheckRecord checkRecord=new CheckRecord();
        checkRecord.setLocNo(wrkMast.getSourceLocNo());
        checkRecord.setBarcode(param.getBarcode());
        checkRecord.setCreateTime(new Date());
        for (WrkDetl wrkDetl:wrkDetls){
            WrkDetl wrkDetlOld = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>()
                    .eq("wrk_no", wrkMast.getWrkNo())
                    .eq("matnr",wrkDetl.getMatnr())
//                    .eq("batch",wrkDetl.getBatch())
            );
            adjDetl.setMatnr(wrkDetl.getMatnr());
            adjDetl.setBatch(wrkDetl.getBatch());
            adjDetl.setAdjQty(wrkDetl.getAnfme());
            checkRecord.setMatnr(wrkDetl.getMatnr());
            checkRecord.setMaktx(wrkDetl.getMaktx());
            checkRecord.setSpecs(wrkDetl.getSpecs());
            checkRecord.setBatch(wrkDetl.getBatch());
            checkRecord.setConfirmQty(wrkDetl.getAnfme());
            if (Cools.isEmpty(wrkDetlOld)){
                wrkDetl.setWrkNo(wrkMast.getWrkNo());
                wrkDetlService.insert(wrkDetl);
                recordRecordLog=recordRecordLog+"\n"+"新增一条明细:"+"\t商品编号:"+wrkDetl.getMatnr()+"\t批号:"+wrkDetl.getBatch()+"\t数量:"+wrkDetl.getAnfme();
                adjDetl.setOriQty(0.0);
                adjDetlService.insert(adjDetl);
                checkRecord.setAnfme(0.0);
                checkRecordService.insert(checkRecord);
            }else if (wrkDetlOld.getAnfme()!=wrkDetl.getAnfme()){
                wrkDetlService.updateAnfme(wrkDetl.getAnfme(),wrkMast.getWrkNo(),wrkDetl.getMatnr(),wrkDetl.getBatch());
                recordRecordLog=recordRecordLog+"\n"+"更新一条明细:"+"\t商品编号:"+wrkDetl.getMatnr()+"\t批号:"+wrkDetl.getBatch()+"\t原数量:"+wrkDetlOld.getAnfme()+"\t新数量:"+wrkDetl.getAnfme();
                adjDetl.setOriQty(wrkDetlOld.getAnfme());
                adjDetlService.insert(adjDetl);
                checkRecord.setAnfme(wrkDetlOld.getAnfme());
                checkRecordService.insert(checkRecord);
            }else if (wrkDetlOld.getAnfme()==wrkDetl.getAnfme()){
                recordRecordLog=recordRecordLog+"\n"+"一条明细保持不变:"+"\t商品编号:"+wrkDetl.getMatnr()+"\t批号:"+wrkDetl.getBatch()+"\t数量:"+wrkDetlOld.getAnfme();
                continue;
            }else {
                throw new CoolException("托盘码:"+param.getBarcode()+" æœªçŸ¥å¼‚常,请联系管理员");
            }
        }
        log.info(recordRecordLog);
    }
    @Override
@@ -414,4 +484,9 @@
        }
    }
    @Override
    @Transactional
    public void pikingToFull(String barcode) {
        wrkMastService.selectByBarcode(barcode);
    }
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -102,7 +102,7 @@
        wrkMast.setIoType(1); // å…¥å‡ºåº“状态:1.入库
        Double ioPri = wrkMastService.getIoPri(1, dto.getLocNo());
        wrkMast.setIoPri(ioPri); // ä¼˜å…ˆçº§ï¼š13
        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);;
        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true) ? 1 : 0);
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
@@ -138,20 +138,20 @@
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiUser(userId);
        sourceStaNo.setModiTime(now);
        if (!basDevpService.updateById(sourceStaNo)){
        if (!basDevpService.updateById(sourceStaNo)) {
            throw new CoolException("更新源站失败");
        }
        // æ›´æ–°ç›®æ ‡åº“位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")){
        if (locMast.getLocSts().equals("O")) {
            locMast.setLocSts("S"); // S.入库预约
            locMast.setModiUser(userId);
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)){
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(dto.getLocNo()+"目标库位已被占用");
            throw new CoolException(dto.getLocNo() + "目标库位已被占用");
        }
        return dto.getLocNo();
    }
@@ -234,7 +234,7 @@
            wrkMast.setIoType(ioType); // å…¥å‡ºåº“状态
            Double ioPri = wrkMastService.getIoPri(ioType, dto.getLocNo());
            wrkMast.setIoPri(ioPri); // ä¼˜å…ˆçº§ï¼š13
            wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), false)?1:0);;
            wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), false) ? 1 : 0);
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // æºç«™
            wrkMast.setStaNo(staDesc.getStnNo()); // ç›®æ ‡ç«™
@@ -250,17 +250,19 @@
            wrkMast.setModiUser(userId);
            wrkMast.setModiTime(now);
            if (!wrkMastService.insert(wrkMast)) {
                throw new CoolException("保存工作档失败,出库库位号:"+dto.getLocNo());
                throw new CoolException("保存工作档失败,出库库位号:" + dto.getLocNo());
            }
            // ç”Ÿæˆå·¥ä½œæ¡£æ˜Žç»†
            for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
                if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
                if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
                    continue;
                }
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(detlDto.getLocDetl());
                wrkDetl.setOrderNo(""); // æ‰‹åŠ¨å‡ºåº“ä¸éœ€è¦å¸¦å‡ºåº“å­˜ä¸­çš„å•æ®ç¼–å·
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setIoTime(now);
                Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount();
                Double anfme = ioType == 101 ? detlDto.getLocDetl().getAnfme() : detlDto.getCount();
                wrkDetl.setAnfme(anfme); // æ•°é‡
                wrkDetl.setAppeTime(now);
                wrkDetl.setAppeUser(userId);
@@ -273,11 +275,11 @@
            // ä¿®æ”¹åº“位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
            locMast = locMastService.selectById(dto.getLocNo());
            if (locMast.getLocSts().equals("F")) {
                locMast.setLocSts(ioType==101?"R":"P");
                locMast.setLocSts(ioType == 101 ? "R" : "P");
                locMast.setModiUser(userId);
                locMast.setModiTime(now);
                if (!locMastService.updateById(locMast)) {
                    throw new CoolException("预约库位状态失败,库位号:"+dto.getLocNo());
                    throw new CoolException("预约库位状态失败,库位号:" + dto.getLocNo());
                }
            } else {
                throw new CoolException(dto.getLocNo() + "库位不是在库状态");
@@ -311,7 +313,7 @@
        wrkMast.setIoType(ioType); // å…¥å‡ºåº“状态
        Double ioPri = wrkMastService.getIoPri(ioType, taskDto.getLocNo());
        wrkMast.setIoPri(ioPri); // ä¼˜å…ˆçº§ï¼š13
        wrkMast.setOutMost(locMastService.isOutMost(taskDto.getLocNo(), false)?1:0);;
        wrkMast.setOutMost(locMastService.isOutMost(taskDto.getLocNo(), false) ? 1 : 0);
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // æºç«™
        wrkMast.setStaNo(staDesc.getStnNo()); // ç›®æ ‡ç«™
@@ -327,11 +329,13 @@
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:"+taskDto.getLocNo());
            throw new CoolException("保存工作档失败,出库库位号:" + taskDto.getLocNo());
        }
        // ç”Ÿæˆå·¥ä½œæ¡£æ˜Žç»†
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
                continue;
            }
            LocDetl locDetl = locDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch());
            if (locDetl == null || locDetl.getAnfme() < locDto.getAnfme()) {
                throw new CoolException(locDto.getLocNo() + "库位中" + locDto.getMatnr() + "商品库存不足!");
@@ -356,21 +360,32 @@
            // ä¿®æ”¹è®¢å•明细
            if (BaseController.isJSON(locDto.getOrderNo())) {
                String[] orderNos = GetOrderNo(locDto.getOrderNo());
                Double anfme = locDto.getAnfme();
                for (String orderNo:orderNos){
                    OrderDetl orderDetl = orderDetlService.selectItem(orderNo, locDto.getMatnr(), locDto.getBatch());
                    if (orderDetl == null) {
                        orderDetl = orderDetlService.selectItem(orderNo, locDto.getMatnr(), null);
                if (!Cools.isEmpty(orderNos)){
                    Double anfme = locDto.getAnfme();
                    for (String orderNo : orderNos) {
                        OrderDetl orderDetl = orderDetlService.selectItem(orderNo, locDto.getMatnr(), locDto.getBatch());
                        if (orderDetl == null) {
                            orderDetl = orderDetlService.selectItem(orderNo, locDto.getMatnr(), null);
                        }
                        if (orderDetl.getAnfme() <= anfme) {
                            if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getAnfme())) {
                                throw new CoolException("修改订单明细数量失败");
                            }
                            anfme = anfme - orderDetl.getAnfme();
                        } else {
                            if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), anfme)) {
                                throw new CoolException("修改订单明细数量失败");
                            }
                        }
                        orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
                    }
                    if (orderDetl.getAnfme()<=anfme){
                        if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getAnfme())) {
                            throw new CoolException("修改订单明细数量失败");
                        }
                        anfme=anfme-orderDetl.getAnfme();
                    }else{
                        if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),anfme)) {
                            throw new CoolException("修改订单明细数量失败");
                        }
                }else {
                    OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
                    if (orderDetl == null) {
                        orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
                    }
                    if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
                        throw new CoolException("修改订单明细数量失败");
                    }
                    orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
                }
@@ -392,48 +407,51 @@
        // ä¿®æ”¹åº“位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        locMast = locMastService.selectById(taskDto.getLocNo());
        if (locMast.getLocSts().equals("F")) {
            locMast.setLocSts(ioType==101?"R":"P");
            locMast.setLocSts(ioType == 101 ? "R" : "P");
            locMast.setModiUser(userId);
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("预约库位状态失败,库位号:"+taskDto.getLocNo());
                throw new CoolException("预约库位状态失败,库位号:" + taskDto.getLocNo());
            }
        } else {
            throw new CoolException(taskDto.getLocNo() + "库位不是在库状态");
        }
    }
    private String[] GetOrderNo(String orderNo){
        String s1 = Recombination(orderNo, ",");
        String s2 = Recombination(s1, "\"}");
        String[] s3= s2.split("\"");
        String[] s =new String[(s3.length-1)/3];
        int i=0;
        int j=0;
        for (String ss:s3){
            if (ss.equals("orderNo")){
                s[i]=s3[j+2];
    private String[] GetOrderNo(String orderNo) {
        String[] s3 = orderNo.split("\"");
        String[] s = new String[(s3.length - 1) / 6];
        if (!Cools.isEmpty(s3)){
            int i = 0;
            int j = 0;
            for (String ss : s3) {
                if (ss.equals("orderNo")) {
                    s[i] = s3[j + 2];
                    i++;
                }
                j++;
            }
        }else {
            s=null;
        }
        return s;
    }
    private String[] GetAnfme(String orderNo) {
        String[] s3 = orderNo.split("\"");
        String[] s = new String[(s3.length - 1) / 6];
        int i = 0;
        int j = 0;
        for (String ss : s3) {
            if (ss.equals("anfme")) {
                String[] s4 = s3[j + 1].split(":");
                String[] s5 = s4[1].split("\\.");
                s[i] = s5[0];
                i++;
            }
            j++;
        }
        return s;
    }
    private String Recombination(String a,String b){
        String[] d=a.split(b);
        String c="";
        if (b.equals(",")){
            for (int i=0;i<d.length;i++){
                if (i%2!=0){
                    c=c+d[i];
                }
            }
        }else if(b.equals("\"}")){
            for (int i=0;i<d.length-1;i++){
                c=c+d[i];
            }
        }
        return c;
    }
    @Override
@@ -453,7 +471,7 @@
        wrkMast.setIoType(10); // å…¥å‡ºåº“状态:10.空板入库
        Double ioPri = wrkMastService.getIoPri(10, dto.getLocNo());
        wrkMast.setIoPri(ioPri); // ä¼˜å…ˆçº§ï¼š10
        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);;
        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true) ? 1 : 0);
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
@@ -477,20 +495,20 @@
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiUser(userId);
        sourceStaNo.setModiTime(new Date());
        if (!basDevpService.updateById(sourceStaNo)){
        if (!basDevpService.updateById(sourceStaNo)) {
            throw new CoolException("更新源站失败");
        }
        // æ›´æ–°ç›®æ ‡åº“位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")){
        if (locMast.getLocSts().equals("O")) {
            locMast.setLocSts("S"); // S.入库预约
            locMast.setModiUser(userId);
            locMast.setModiTime(new Date());
            if (!locMastService.updateById(locMast)){
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(dto.getLocNo()+"目标库位已被占用");
            throw new CoolException(dto.getLocNo() + "目标库位已被占用");
        }
        return dto.getLocNo();
    }
@@ -514,7 +532,7 @@
            // èŽ·å–åº“ä½
            LocMast locMast = locMastService.selectById(locNo);
            if (Cools.isEmpty(locMast)) {
                throw new CoolException(locNo+"库位不存在");
                throw new CoolException(locNo + "库位不存在");
            }
            // èŽ·å–æºç«™
            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
@@ -539,7 +557,7 @@
            wrkMast.setIoPri(ioPri);
            wrkMast.setSourceStaNo(sourceStaNo); // æºç«™
            wrkMast.setStaNo(param.getOutSite()); // ç›®æ ‡ç«™
            wrkMast.setOutMost(locMastService.isOutMost(locNo, false)?1:0);;
            wrkMast.setOutMost(locMastService.isOutMost(locNo, false) ? 1 : 0);
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceLocNo(locNo); // æºåº“位
            wrkMast.setFullPlt("N"); // æ»¡æ¿ï¼šY
@@ -556,7 +574,7 @@
                throw new CoolException("保存工作档失败");
            }
            // æ›´æ–°åº“位状态 D.空板 -> R.出库预约
            if (locMast.getLocSts().equals("D")){
            if (locMast.getLocSts().equals("D")) {
                locMast.setLocSts("R");
                locMast.setModiUser(userId);
                locMast.setModiTime(new Date());
@@ -596,11 +614,11 @@
    public void locMove(String sourceLocNo, String locNo, Long userId) {
        LocMast sourceLoc = locMastService.selectById(sourceLocNo);
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
        if (Cools.isEmpty(sourceLoc)){
        if (Cools.isEmpty(sourceLoc)) {
            throw new CoolException("未找到库位");
        }
        LocMast loc = locMastService.selectById(locNo);
        if (Cools.isEmpty(loc)){
        if (Cools.isEmpty(loc)) {
            throw new CoolException("未找到库位");
        }
        if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
@@ -616,14 +634,14 @@
        wrkMast.setWrkSts(11L); // å·¥ä½œçŠ¶æ€ï¼š11.生成出库ID
        wrkMast.setIoType(11); // å…¥å‡ºåº“状态: 11.库格移载
        wrkMast.setIoPri(10D);
        wrkMast.setOutMost(locMastService.isOutMost(locNo, false)?1:0);;
        wrkMast.setOutMost(locMastService.isOutMost(locNo, false) ? 1 : 0);
        wrkMast.setCrnNo(sourceLoc.getCrnNo());
        wrkMast.setSourceLocNo(sourceLocNo); // æºåº“位
        wrkMast.setLocNo(locNo); // ç›®æ ‡åº“位
        wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // æ»¡æ¿ï¼šY
        wrkMast.setFullPlt(Cools.isEmpty(locDetls) ? "N" : "Y"); // æ»¡æ¿ï¼šY
        wrkMast.setPicking("N"); // æ‹£æ–™
        wrkMast.setExitMk("N"); // é€€å‡º
        wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // ç©ºæ¿
        wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D") ? "Y" : "N"); // ç©ºæ¿
        wrkMast.setBarcode(sourceLoc.getBarcode()); // æ‰˜ç›˜ç 
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
@@ -654,11 +672,11 @@
            sourceLoc.setLocSts("R"); // R.出库预约
            sourceLoc.setModiUser(userId);
            sourceLoc.setModiTime(now);
            if (!locMastService.updateById(sourceLoc)){
            if (!locMastService.updateById(sourceLoc)) {
                throw new CoolException("更新源库位状态失败");
            }
        } else {
            throw new CoolException(sourceLoc.getLocNo() + "源库位出库失败,状态:"+sourceLoc.getLocSts$());
            throw new CoolException(sourceLoc.getLocNo() + "源库位出库失败,状态:" + sourceLoc.getLocSts$());
        }
        // ä¿®æ”¹ç›®æ ‡åº“位状态
        if (loc.getLocSts().equals("O")) {
@@ -669,7 +687,7 @@
                throw new CoolException("更新目标库位状态失败");
            }
        } else {
            throw new CoolException("移转失败,目标库位状态:"+loc.getLocSts$());
            throw new CoolException("移转失败,目标库位状态:" + loc.getLocSts$());
        }
    }
@@ -677,14 +695,14 @@
    @Transactional
    public void completeWrkMast(String workNo, Long userId) {
        WrkMast wrkMast = wrkMastService.selectById(workNo);
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
        if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 17) {
            throw new CoolException("当前工作档已完成");
        }
        // å…¥åº“ + åº“位转移
        if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
        if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) {
            wrkMast.setWrkSts(9L);
            // å‡ºåº“
        } else if (wrkMast.getWrkSts() > 10) {
@@ -727,7 +745,9 @@
            Iterator<LocDetlAdjustParam.LocDetlAdjust> iterator1 = list.iterator();
            while (iterator1.hasNext()) {
                LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
                if (adjust.getCount() == 0) { continue; }
                if (adjust.getCount() == 0) {
                    continue;
                }
                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
                    if (!locDetl.getAnfme().equals(adjust.getCount())) {
                        // todo ç›˜ç‚¹è®°å½•
@@ -776,7 +796,9 @@
        // æ·»åŠ åº“å­˜
        for (LocDetlAdjustParam.LocDetlAdjust adjust : list) {
            if (adjust.getCount() == 0.0D) { continue; }
            if (adjust.getCount() == 0.0D) {
                continue;
            }
            Mat mat = matService.selectByMatnr(adjust.getMatnr());
            LocDetl locDetl = new LocDetl();
            locDetl.sync(mat);
@@ -827,8 +849,8 @@
    @Transactional
    public void cancelWrkMast(String workNo, Long userId) {
        WrkMast wrkMast = wrkMastService.selectById(workNo);
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
        String locNo = ""; // å¾…修改目标库位
        String locSts = ""; // å¾…修改目标库位状态
@@ -842,29 +864,29 @@
                // åº“位转移:源库位
                LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
                if (Cools.isEmpty(locMast)) {
                    throw new CoolException("取消库位转移失败,源库位不存在:"+ wrkMast.getSourceLocNo());
                    throw new CoolException("取消库位转移失败,源库位不存在:" + wrkMast.getSourceLocNo());
                }
                locMast.setLocSts("F");
                locMast.setModiTime(new Date());
                locMast.setModiUser(userId);
                locMastService.updateById(locMast);
            }
        // å‡ºåº“取消(修改源库位)
            // å‡ºåº“取消(修改源库位)
        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 19) {
            locNo = wrkMast.getSourceLocNo();
            // å‡ºåº“ ===>> F.在库
            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
                locSts = "F";
            // ç©ºæ¿å‡ºåº“ ===>> D.空桶/空栈板
                // ç©ºæ¿å‡ºåº“ ===>> D.空桶/空栈板
            } else if (wrkMast.getIoType() == 110) {
                locSts = "D";
            // åº“位转移 ===>> D.空桶/空栈板
                // åº“位转移 ===>> D.空桶/空栈板
            } else if (wrkMast.getIoType() == 11) {
                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F";
                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F";
                // åº“位转移:目标库位
                LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                if (Cools.isEmpty(locMast)) {
                    throw new CoolException("取消库位转移失败,目标库位不存在:"+ wrkMast.getSourceLocNo());
                    throw new CoolException("取消库位转移失败,目标库位不存在:" + wrkMast.getSourceLocNo());
                }
                locMast.setLocSts("O");
                locMast.setModiTime(new Date());
@@ -877,17 +899,42 @@
        // è®¢å•关联
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        for (WrkDetl wrkDetl : wrkDetls) {
            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                if (BaseController.isJSON(wrkDetl.getOrderNo())) {
                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
                        throw new CoolException("订单数据回滚失败");
            if (!Cools.isEmpty(wrkDetl.getOrderNo())){
                String[] orderNos = GetOrderNo(wrkDetl.getOrderNo());
                if (!Cools.isEmpty(orderNos)){
                    String[] anfmes = GetAnfme(wrkDetl.getOrderNo());
                    int i = 0;
                    for (String orderNo : orderNos) {
                        if (!Cools.isEmpty(orderNo)) {
                            Double anfme = Integer.parseInt(anfmes[i]) + 0.0;
                            i++;
                            if (BaseController.isJSON(wrkDetl.getOrderNo())) {
                                if (!orderDetlService.decrease(orderNo, wrkDetl.getMatnr(), wrkDetl.getBatch(), anfme)) {
                                    throw new CoolException("订单数据回滚失败");
                                }
                            } else {
                                // è®¢å•合并出库
                                List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class);
                                for (OrderDto orderDto : orderDtoList) {
                                    if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) {
                                        throw new CoolException("订单数据回滚失败");
                                    }
                                }
                            }
                        }
                    }
                } else {
                    // è®¢å•合并出库
                    List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class);
                    for (OrderDto orderDto : orderDtoList) {
                        if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) {
                }else {
                    if (BaseController.isJSON(wrkDetl.getOrderNo())) {
                        if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
                            throw new CoolException("订单数据回滚失败");
                        }
                    } else {
                        // è®¢å•合并出库
                        List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class);
                        for (OrderDto orderDto : orderDtoList) {
                            if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) {
                                throw new CoolException("订单数据回滚失败");
                            }
                        }
                    }
                }
@@ -919,7 +966,7 @@
        // ä¿®æ”¹åº“位状态
        LocMast locMast = locMastService.selectById(locNo);
        if (Cools.isEmpty(locMast)) {
            throw new CoolException("取消工作档失败,库位不存在:"+ locNo);
            throw new CoolException("取消工作档失败,库位不存在:" + locNo);
        }
        locMast.setLocSts(locSts);
        locMast.setModiTime(new Date());
@@ -934,8 +981,8 @@
    @Transactional
    public void pickWrkMast(String workNo, Long userId) {
        WrkMast wrkMast = wrkMastService.selectById(workNo);
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
        // å…¥å‡ºåº“类型判断
        if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
@@ -1048,11 +1095,11 @@
            while (iterator.hasNext()) {
                LocMast sourceLoc = locMastService.selectById(sourceLocNo);
                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
                if (Cools.isEmpty(sourceLoc)){
                if (Cools.isEmpty(sourceLoc)) {
                    throw new CoolException("未找到库位");
                }
                LocMast loc = iterator.next();
                if (Cools.isEmpty(loc)){
                if (Cools.isEmpty(loc)) {
                    throw new CoolException("未找到库位");
                }
                if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
@@ -1067,14 +1114,14 @@
                wrkMast.setWrkSts(11L); // å·¥ä½œçŠ¶æ€ï¼š11.生成出库ID
                wrkMast.setIoType(11); // å…¥å‡ºåº“状态: 11.库格移载
                wrkMast.setIoPri(15D);
                wrkMast.setOutMost(locMastService.isOutMost(loc.getLocNo(), false)?1:0);;
                wrkMast.setOutMost(locMastService.isOutMost(loc.getLocNo(), false) ? 1 : 0);
                wrkMast.setCrnNo(sourceLoc.getCrnNo());
                wrkMast.setSourceLocNo(sourceLocNo); // æºåº“位
                wrkMast.setLocNo(loc.getLocNo()); // ç›®æ ‡åº“位
                wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // æ»¡æ¿ï¼šY
                wrkMast.setFullPlt(Cools.isEmpty(locDetls) ? "N" : "Y"); // æ»¡æ¿ï¼šY
                wrkMast.setPicking("N"); // æ‹£æ–™
                wrkMast.setExitMk("N"); // é€€å‡º
                wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // ç©ºæ¿
                wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D") ? "Y" : "N"); // ç©ºæ¿
                wrkMast.setBarcode(sourceLoc.getBarcode()); // æ‰˜ç›˜ç 
                wrkMast.setLinkMis("N");
                wrkMast.setAppeUser(9527L);
@@ -1105,11 +1152,11 @@
                    sourceLoc.setLocSts("R"); // R.出库预约
                    sourceLoc.setModiUser(9527L);
                    sourceLoc.setModiTime(now);
                    if (!locMastService.updateById(sourceLoc)){
                    if (!locMastService.updateById(sourceLoc)) {
                        throw new CoolException("更新源库位状态失败");
                    }
                } else {
                    throw new CoolException(sourceLoc.getLocNo() + "源库位出库失败,状态:"+sourceLoc.getLocSts$());
                    throw new CoolException(sourceLoc.getLocNo() + "源库位出库失败,状态:" + sourceLoc.getLocSts$());
                }
                // ä¿®æ”¹ç›®æ ‡åº“位状态
                if (loc.getLocSts().equals("O")) {
@@ -1120,7 +1167,7 @@
                        throw new CoolException("更新目标库位状态失败");
                    }
                } else {
                    throw new CoolException("移转失败,目标库位状态:"+loc.getLocSts$());
                    throw new CoolException("移转失败,目标库位状态:" + loc.getLocSts$());
                }
                iterator.remove();
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -127,6 +127,7 @@
                    if (locMast.getLocSts().equals("S")) {
                        locMast.setLocSts("F");
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setFrozen(wrkMast.getFrozen());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        if (!locMastService.updateById(locMast)) {
@@ -207,6 +208,24 @@
                    if (wrkDetls57.isEmpty()) {
                        exceptionHandle("盘点入库 ===>> å·¥ä½œæ˜Žç»†æ¡£ä¸ºç©ºï¼›[workNo={0}]", wrkMast.getWrkNo());
                    }
                    if(!Cools.isEmpty(locDetlService.selectByLocNo(wrkMast.getLocNo()))){
                        locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()));
                    }
                    if (Cools.isEmpty(locDetlService.selectByLocNo(wrkMast.getLocNo()))){
                        for (WrkDetl wrkDetl:wrkDetls57){
                            LocDetl locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            locDetl.setLocNo(wrkMast.getLocNo()); // åº“位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // æ•°é‡
                            locDetl.setZpallet(wrkDetl.getZpallet()); // æ‰˜ç›˜æ¡ç 
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
                            if (!locDetlService.insert(locDetl)) {
                                exceptionHandle("盘点入库 ===>> æ–°å¢žåº“存明细失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
                            }
                        }
                    }
                    // ä¿®æ”¹åº“位状态 Q ====>> F
                    if (locMast.getLocSts().equals("Q")) {
                        locMast.setLocSts(wrkMast.getFullPlt().equals("Y")?"F":"D");
@@ -277,6 +296,36 @@
            }
            assert locMast != null;
            switch (wrkMast.getIoType()) {
                case 11://移库再回原库位
                    String locSts = "R";
                    // åº“位移转判断是否为空板移转
                    if (wrkMast.getEmptyMk().equals("N")) {
                        // è½¬ç§»åº“存明细数据: åº“存号 ç”±å·¥ä½œæ¡£æºåº“位变为目标库位
                        if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
                            exceptionHandle("库位移转 ===>> è½¬ç§»åº“存明细数据失败;[源库位={0}],[目标库位={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
                        }
                    }
                    // ä¿®æ”¹æºåº“位状态 ==> O
                    LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
                    if (null != sourceLoc && !sourceLoc.getLocSts().equals("O")) {
                        sourceLoc.setBarcode("");
                        sourceLoc.setLocSts("O");
                        sourceLoc.setModiTime(now);
                        sourceLoc.setIoTime(now);
                        if (!locMastService.updateById(sourceLoc)) {
                            exceptionHandle("库位移转 ===>> ä¿®æ”¹æºåº“位状态失败;[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                        }
                        // ä¿®æ”¹ç›®æ ‡åº“位状态 ==> .locSts
                        locMast.setLocSts(locSts);
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        if (!locMastService.updateById(locMast)) {
                            exceptionHandle("库位移转 ===>> ä¿®æ”¹ç›®æ ‡åº“位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                        }
                    }
                    break;
                // å…¨æ¿å‡ºåº“
                case 101:
                    // å‡ºåº“确认信号位
@@ -299,6 +348,7 @@
                    if (locMast.getLocSts().equals("R")) {
                        locMast.setLocSts("O");
                        locMast.setBarcode("");
                        locMast.setFrozen(0);
                        locMast.setModiTime(now);
                        locMast.setIoTime(now);
                        if (!locMastService.updateById(locMast)) {
@@ -322,11 +372,13 @@
                default:
                    break;
            }
            // ä¿®æ”¹å·¥ä½œä¸»æ¡£çŠ¶æ€
            wrkMast.setWrkSts(18L);
            wrkMast.setModiTime(now);
            if (!wrkMastService.updateById(wrkMast)) {
                exceptionHandle("更新出库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
            if(wrkMast.getIoType()!=11) {
                // ä¿®æ”¹å·¥ä½œä¸»æ¡£çŠ¶æ€
                wrkMast.setWrkSts(18L);
                wrkMast.setModiTime(now);
                if (!wrkMastService.updateById(wrkMast)) {
                    exceptionHandle("更新出库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
                }
            }
        } catch (Exception e) {
            log.error("fail", e);
src/main/java/com/zy/common/model/DetlDto.java
@@ -21,6 +21,9 @@
    private Double anfme;
    private String memo;
    public DetlDto() {
    }
@@ -40,6 +43,7 @@
        this.anfme = anfme;
    }
    public DetlDto(String orderNo, String matnr, String batch, Double anfme) {
        this.orderNo = orderNo;
        this.matnr = matnr;
@@ -47,6 +51,14 @@
        this.anfme = anfme;
    }
    public DetlDto(String matnr, String batch, Double anfme, String memo) {
        this.matnr = matnr;
        this.batch = batch;
        this.anfme = anfme;
        this.memo = memo;
    }
    public static boolean hasList(Set<DetlDto> detlDtos, OrderDetl orderDetl) {
        for (DetlDto dto : detlDtos) {
            if (Cools.isEmpty(dto.getBatch()) && Cools.isEmpty(orderDetl.getBatch())) {
src/main/java/com/zy/common/service/CommonService.java
@@ -55,6 +55,8 @@
    private LocDetlService locDetlService;
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private MatService matService;
    /**
     * ç”Ÿæˆå·¥ä½œå·
@@ -274,7 +276,11 @@
        if (locMast == null) {
            List<Integer> rows = Utils.getGroupLoc(curRow);
            List<LocMast> locMasts = locMastService.queryFreeLocMast(rows, rows.size(), locTypeDto.getLocType1());
            Mat mat = matService.selectByMatnr(matNos.get(0));
            if (Cools.isEmpty(mat.getInoutEveryday())){
                mat.setInoutEveryday(false);
            }
            List<LocMast> locMasts = locMastService.queryFreeLocMast2(rows, rows.size(), locTypeDto.getLocType1(),mat.getInoutEveryday());
            if (!Cools.isEmpty(locMasts)) {
                Integer innermostRow = Utils.getInnermostRow(locMasts.get(0).getLocNo());
                for (LocMast one : locMasts) {
src/main/java/com/zy/common/web/WcsController.java
@@ -138,6 +138,11 @@
        // æ“ä½œäººå‘˜æ•°æ®
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        if(waitPakins.size()>0) {
            WaitPakin one = waitPakins.get(0);
            wrkMast.setFrozen(one.getFrozen());
        }
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
src/main/resources/application.yml
@@ -11,8 +11,8 @@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://10.10.10.100:1433;databasename=bfasrs
    url: jdbc:sqlserver://localhost:1433;databasename=bfasrs
#    url: jdbc:sqlserver://192.168.4.15:1433;databasename=bfasrs
#    url: jdbc:sqlserver://localhost:1433;databasename=bfasrs
    url: jdbc:sqlserver://192.168.4.15:1433;databasename=bfasrs
    username: sa
#    password: Zoneyung@zy56$
    password: sa@123
src/main/resources/mapper/LocDetlMapper.xml
@@ -237,7 +237,7 @@
            from asr_loc_detl a
            left join asr_loc_mast b on a.loc_no = b.loc_no
            where 1=1
            and b.loc_sts = 'F'
            and b.loc_sts = 'F' and b.frozen != 1
            and a.matnr = #{matnr}
            and b.row1 >= 1
            and b.row1 &lt;= 3
@@ -251,7 +251,7 @@
            from asr_loc_detl a
            left join asr_loc_mast b on a.loc_no = b.loc_no
            where 1=1
            and b.loc_sts = 'F'
            and b.loc_sts = 'F' and b.frozen != 1
            and a.matnr = #{matnr}
            and b.row1 >= 4
            and b.row1 &lt;= 7
@@ -265,7 +265,7 @@
            from asr_loc_detl a
            left join asr_loc_mast b on a.loc_no = b.loc_no
            where 1=1
            and b.loc_sts = 'F'
            and b.loc_sts = 'F' and b.frozen != 1
            and a.matnr = #{matnr}
            and b.row1 >= 8
            and b.row1 &lt;= 11
@@ -279,7 +279,7 @@
            from asr_loc_detl a
            left join asr_loc_mast b on a.loc_no = b.loc_no
            where 1=1
            and b.loc_sts = 'F'
            and b.loc_sts = 'F' and b.frozen != 1
            and a.matnr = #{matnr}
            and b.row1 >= 12
            and b.row1 &lt;= 14
@@ -293,7 +293,7 @@
            from asr_loc_detl a
            left join asr_loc_mast b on a.loc_no = b.loc_no
            where 1=1
            and b.loc_sts = 'F'
            and b.loc_sts = 'F' and b.frozen != 1
            and a.matnr = #{matnr}
            and b.row1 >= 15
            and b.row1 &lt;= 18
@@ -307,7 +307,7 @@
            from asr_loc_detl a
            left join asr_loc_mast b on a.loc_no = b.loc_no
            where 1=1
            and b.loc_sts = 'F'
            and b.loc_sts = 'F' and b.frozen != 1
            and a.matnr = #{matnr}
            and b.row1 >= 19
            and b.row1 &lt;= 21
src/main/resources/mapper/LocMastMapper.xml
@@ -77,4 +77,46 @@
        )
    </select>
    <select id="queryFreeLocMast2" resultMap="BaseResultMap">
        select
        *
        from asr_loc_mast
        where 1=1
        <if test="inoutEveryday == false ">
            and bay1 > 10
        </if>
        <if test="inoutEveryday == true">
            and bay1 &lt; 11
        </if>
        and row1 in
        <foreach item="item" collection="rows" index="index"  separator="," open="(" close=")">
            #{item}
        </foreach>
        and ctn_no =
        (
        select
        top 1
        ctn_no
        from (
        select
        ctn_no,
        count(1) as count
        from asr_loc_mast
        where 1=1
        and row1 in
        <foreach item="item" collection="rows" index="index"  separator="," open="(" close=")">
            #{item}
        </foreach>
        and loc_sts = 'O'
        <if test="locType1 != null">
            and loc_type1 = #{locType1}
        </if>
        and loc_no not in ('0100101', '0200101', '0300101', '1200701', '1300701', '1400701', '1900401', '2000401', '2100401')
        group by ctn_no
        ) a
        where count = #{rowsLen}
        order by right(ctn_no, 2) + 0 asc, left(ctn_no, 3) + 0 asc
        )
    </select>
</mapper>
src/main/webapp/static/js/locMast/locMast.js
@@ -27,6 +27,7 @@
            // ,{field: 'ctnType', align: 'center',title: ''}
            // ,{field: 'locSts', align: 'center',title: ''}
            // ,{field: 'sheetNo', align: 'center',title: ''}
            ,{field: 'frozen$', align: 'center',title: '冻结状态'}
            ,{field: 'crnNo', align: 'center',title: '堆垛机号'}
            ,{field: 'row1', align: 'center',title: '排', sort:true}
            ,{field: 'bay1', align: 'center',title: '列', sort:true}
@@ -56,7 +57,7 @@
            ,{field: 'locType1$', align: 'center',title: '高低类型'}
            // ,{field: 'locType2$', align: 'center',title: '宽窄类型'}
            // ,{field: 'locType3$', align: 'center',title: '轻重类型'}
            // ,{field: 'frozen$', align: 'center',title: '是否冻结'}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:100}
        ]],
        request: {
@@ -64,6 +65,7 @@
            pageSize: 'limit'
        },
        parseData: function (res) {
            console.log(res)
            return {
                'code': res.code,
                'msg': res.msg,
@@ -458,7 +460,7 @@
            barcode: $('#barcode').val(),
            PdcType: $('#PdcType').val(),
            ctnNo: $('#ctnNo').val(),
            frozen: $('#frozen').val()
        };
        $.ajax({
            url: baseUrl+"/locMast/"+name+"/auth",
src/main/webapp/static/js/stoMan/stoQue.js
@@ -39,6 +39,7 @@
                    html += "disabled='disabled' >";
                    return html;
                },width:80}
            ,{field: 'frozen$', align: 'center',title: '冻结状态'}
            ,{field: 'modiUser$', align: 'center',title: '修改人员'}
            ,{field: 'modiTime$', align: 'center',title: '修改时间', width: 180}
            ,{ fixed: 'right', title:'操作', align: 'center', toolbar: '#operate'}
src/main/webapp/views/locDetl/locDetl.html
@@ -45,7 +45,7 @@
    <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="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">查看异常数据</button>
<!--        <button id="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">查看异常数据</button>-->
    </div>
</div>
src/main/webapp/views/locMast/locMast_detail.html
@@ -77,6 +77,17 @@
                <input id="sheetNo" class="layui-input" type="text">
            </div>
        </div>
        <!-- å†»ç»“ -->
        <div class="layui-inline"  style="width:80%;">
            <label class="layui-form-label">冻结</label>
            <div class="layui-input-inline">
                <select id="frozen" name="frozen">
                    <option style="display: none"></option>
                    <option value="0">未冻结</option>
                    <option value="1">冻结</option>
                </select>
            </div>
        </div>
        <div class="layui-inline"  style="width:80%;">
            <label class="layui-form-label">堆垛机号:</label>
            <div class="layui-input-inline">
version/±ß·æÊý¾Ý¿â¸Ä¶¯20221028/±ß·æÊý¾Ý¿â¸Ä¶¯.md
@@ -23,3 +23,9 @@
asr_check_record
```
新增冻结字段frozen int é»˜è®¤å€¼0
组托档:入库通知档/历史档表
工作主档/历史档
库存档
已有库存数据需要初始化frozen值为0