src/main/java/com/zy/asrs/controller/AgvWorkController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/AgvWorkService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/AgvWrkDetlService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/agvWrkMast/wrkMast.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/common.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/AgvWorkController.java
@@ -40,4 +40,18 @@ workService.adjustLocDetl(param, getUserId()); return R.ok("库存调整成功"); } @RequestMapping("/hand/control/wrkMast") @ManagerAuth(memo = "手动处理工作档") public R handControlWrkMast(@RequestParam String workNo, @RequestParam Integer type){ if (type == 1) { workService.completeWrkMast(workNo, getUserId()); return R.ok("工作档已完成"); } else if (type == 2) { workService.cancelWrkMast(workNo, getUserId()); return R.ok("工作档已取消"); } return R.ok(); } } src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java
@@ -5,6 +5,7 @@ import com.zy.asrs.entity.WrkDetl; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @@ -13,7 +14,8 @@ @Repository public interface AgvWrkDetlMapper extends BaseMapper<AgvWrkDetl> { List<WrkDetl> selectByWrkNo(Integer wrkNo); @Select("SELECT * FROM agv_wrk_detl WHERE wrk_no = #{wrkNo}") List<AgvWrkDetl> selectByWrkNo(@Param("wrkNo")Integer wrkNo); int deleteItem(@Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch); src/main/java/com/zy/asrs/service/AgvWorkService.java
@@ -49,4 +49,14 @@ */ void adjustLocDetl(LocDetlAdjustParam param, Long userId); /** * 手动完成工作档 */ void completeWrkMast(String workNo, Long userId); /** * 手动取消工作档 */ void cancelWrkMast(String workNo, Long userId); } src/main/java/com/zy/asrs/service/AgvWrkDetlService.java
@@ -10,7 +10,7 @@ //void createWorkDetail(Integer workNo, List<DetlDto> detlDtos, String barcode, Long userId); List<WrkDetl> selectByWrkNo(Integer wrkNo); List<AgvWrkDetl> selectByWrkNo(Integer wrkNo); boolean updateAnfme(Double anfme, Integer wrkNo, String matnr, String batch); src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.EmptyPlateOutParam; @@ -24,6 +25,7 @@ import java.util.Iterator; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; /** * Created by vincent on 2020/6/11 @@ -59,6 +61,10 @@ private OrderDetlService orderDetlService; @Autowired private AdjDetlService adjDetlService; @Autowired private AgvWrkMastLogService agvWrkMastLogService; @Autowired private AgvWrkDetlLogService agvWrkDetlLogService; /* @@ -434,6 +440,162 @@ } } @Override @Transactional public void completeWrkMast(String workNo, Long userId) { AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); if (Cools.isEmpty(wrkMast)){ throw new CoolException(workNo+"工作档不存在"); } if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 29) { throw new CoolException("当前工作档已完成"); } // 入库 + 库位转移 if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) { wrkMast.setWrkSts(9L); // 出库 } else if (wrkMast.getWrkSts() > 20) { wrkMast.setWrkSts(29L); } Date now = new Date(); wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true)); wrkMast.setCrnEndTime(now); wrkMast.setModiTime(now); wrkMast.setModiUser(userId); // 完成操作人员记录 wrkMast.setManuType("手动完成"); if (!agvWrkMastService.updateById(wrkMast)) { throw new CoolException("修改工作档失败"); } } @Transactional public void cancelWrkMast(String workNo, Long userId) { AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); if (Cools.isEmpty(wrkMast)){ throw new CoolException(workNo+"工作档不存在"); } if (wrkMast.getWrkSts() == 200) { //小车移库任务,直接删除工作档 agvWrkMastService.deleteById(wrkMast); return; } String locNo = ""; // 待修改目标库位 String locSts = ""; // 待修改目标库位状态 // 入库取消(修改目标库位) if (wrkMast.getWrkSts() < 9) { locNo = wrkMast.getLocNo(); locSts = "O"; // 库位转移 if (wrkMast.getIoType() == 11) { // 库位转移:源库位 AgvLocMast locMast = agvLocMastService.selectById(wrkMast.getSourceLocNo()); if (Cools.isEmpty(locMast)) { throw new CoolException("取消库位转移失败,源库位不存在:"+ wrkMast.getSourceLocNo()); } locMast.setLocSts("F"); locMast.setModiTime(new Date()); locMast.setModiUser(userId); agvLocMastService.updateById(locMast); } // 出库取消(修改源库位) } else if (wrkMast.getWrkSts() > 20) { locNo = wrkMast.getSourceLocNo(); // 出库 ===>> F.在库 if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) { locSts = "F"; // 空板出库 ===>> D.空桶/空栈板 } else if (wrkMast.getIoType() == 110) { locSts = "D"; // 库位转移 ===>> D.空桶/空栈板 } else if (wrkMast.getIoType() == 11) { locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F"; // 库位转移:目标库位 AgvLocMast locMast = agvLocMastService.selectById(wrkMast.getLocNo()); if (Cools.isEmpty(locMast)) { throw new CoolException("取消库位转移失败,目标库位不存在:"+ wrkMast.getSourceLocNo()); } locMast.setLocSts("O"); locMast.setModiTime(new Date()); locMast.setModiUser(userId); agvLocMastService.updateById(locMast); } } else { throw new CoolException("当前工作状态无法取消"); } // 订单关联 List<AgvWrkDetl> wrkDetls = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); for (AgvWrkDetl 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("订单数据回滚失败"); } } else { // 订单合并出库 //实际取消的出库数量 Double wrkDetlAnfme = wrkDetl.getAnfme(); //订单实际出库数量 Double orderAnfme; List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class); for (OrderDto orderDto : orderDtoList) { if(wrkDetlAnfme > orderDto.getAnfme()){ orderAnfme = orderDto.getAnfme(); wrkDetlAnfme -= orderAnfme; }else { orderAnfme = wrkDetlAnfme; } if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderAnfme)) { throw new CoolException("订单数据回滚失败"); } } } } } // 取消操作人员记录 wrkMast.setManuType("手动取消"); wrkMast.setModiUser(userId); wrkMast.setModiTime(new Date()); if (!agvWrkMastService.updateById(wrkMast)) { throw new CoolException("取消工作档失败"); } // 保存工作主档历史档 if (!agvWrkMastLogService.save(wrkMast)) { throw new CoolException("保存工作历史档失败, workNo = " + wrkMast.getWrkNo()); } // 删除工作主档 boolean wrkMastRes = agvWrkMastService.deleteById(wrkMast); if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) { // 保存工作明细档历史档 if (!agvWrkDetlLogService.save(wrkMast.getWrkNo())) { // throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo()); } // 删除工作档明细 boolean wrkDetlRes = agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", workNo)); } // 修改库位状态 AgvLocMast locMast = agvLocMastService.selectById(locNo); if (Cools.isEmpty(locMast)) { throw new CoolException("取消工作档失败,库位不存在:"+ locNo); } locMast.setLocSts(locSts); locMast.setModiTime(new Date()); locMast.setModiUser(userId); boolean locMastRes = agvLocMastService.updateById(locMast); if (!wrkMastRes || !locMastRes) { throw new CoolException("保存数据失败"); } } /* 更新目标库位信息 */ src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java
@@ -50,7 +50,7 @@ } */ @Override public List<WrkDetl> selectByWrkNo(Integer wrkNo) { public List<AgvWrkDetl> selectByWrkNo(Integer wrkNo) { return this.baseMapper.selectByWrkNo(wrkNo); } src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -80,6 +80,12 @@ //修改源库位状态为O agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O"); } //删除AGV工作档 agvWrkMastService.deleteById(wrkNo); //删除AGV工作明细档 agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); if(!isJSON(orderNo)){ //检查订单是否已完成 orderService.checkComplete(orderNo); @@ -90,11 +96,6 @@ orderService.checkComplete(o); }); } //删除AGV工作档 agvWrkMastService.deleteById(wrkNo); //删除AGV工作明细档 agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); return SUCCESS; } src/main/webapp/static/js/agvWrkMast/wrkMast.js
@@ -320,7 +320,7 @@ // 完成 case 'complete': layer.confirm('确认完成该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){ http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:1}, function (res) { http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:1}, function (res) { $(".layui-laypage-btn")[0].click(); layer.msg(data.wrkNo + res.msg); }) @@ -332,7 +332,7 @@ case 'cancel': if (data.pdcType === "Y") { layer.confirm('当前任务关联ERP销售单,取消将重新生成出库作业,是否继续?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){ http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) { http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) { $(".layui-laypage-btn")[0].click(); layer.msg(data.wrkNo + res.msg); }) @@ -340,7 +340,7 @@ }); } else { layer.confirm('确认取消该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){ http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) { http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) { $(".layui-laypage-btn")[0].click(); layer.msg(data.wrkNo + res.msg); }) @@ -351,7 +351,7 @@ // 拣料入库 case 'pick': layer.confirm('拣料入库该笔工作档?', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){ http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:3}, function (res) { http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:3}, function (res) { $(".layui-laypage-btn")[0].click(); layer.msg(data.wrkNo + res.msg); }) @@ -361,7 +361,7 @@ // 先入品 case 'preHave': layer.confirm('任务发生先入品异常。如需重新入库,请确保货物已放至堆垛机出库站!', {title: '工作号:'+data.wrkNo, shadeClose: true}, function(){ http.post(baseUrl+"/deal/preHave/start", {wrkNo: data.wrkNo}, function (res) { http.post(baseUrl+"/agv/deal/preHave/start", {wrkNo: data.wrkNo}, function (res) { $(".layui-laypage-btn")[0].click(); layer.msg(data.wrkNo + res.msg, {icon: 1}); }) src/main/webapp/static/js/common.js
@@ -228,6 +228,7 @@ ,{field: 'suppCode', align: 'center',title: '料箱码', hide: false, width: 110} ,{field: 'matnr', align: 'center',title: '存货编码',hide: true} ,{field: 'matnr', align: 'center',title: '存货编码'} ,{field: 'anfme', align: 'center',title: '数量'} ,{field: 'batch', align: 'center',title: '序列码', width: 300, sort:true, hide: true} ,{field: 'maktx', align: 'center',title: '存货名称'} ,{field: 'orderNo', align: 'center',title: '单据编号', hide: false}