package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.TaskMapper; import com.zy.asrs.service.*; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.utils.OrderInAndOutUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; @Service("taskService") public class TaskServiceImpl extends ServiceImpl implements TaskService { @Autowired private TaskLogService taskLogService; @Autowired private LocCacheService locCacheService; @Autowired private WaitPakinService waitPakinService; @Autowired private TaskDetlService taskDetlService; @Autowired private TaskService taskService; @Autowired private TaskDetlLogService taskDetlLogService; @Override @Transactional(rollbackFor = Exception.class) public void completeWrkMast(String workNo, Long userId) { Task wrkMast = this.selectOne(new EntityWrapper().eq("wrk_no", workNo)); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) { throw new CoolException("当前工作档已完成"); } // 入库 + 库位转移 if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) { wrkMast.setWrkSts(4L); // 出库 } else if (wrkMast.getWrkSts() > 10) { wrkMast.setWrkSts(14L); } 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 (!this.updateById(wrkMast)) { throw new CoolException("修改工作档失败"); } } @Override @Transactional public void pickWrkMast(String workNo, Long userId) { Task wrkMast = this.selectById(workNo); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } // 入出库类型判断 if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) { throw new CoolException("当前入出库类型无法进行操作"); } // 工作状态判断 if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) { throw new CoolException("当前工作状态无法进行操作"); } // 保存工作明细档历史档 // if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { // throw new CoolException("保存工作明细档历史档失败"); // } // 保存工作主档历史档 if (!taskLogService.save(wrkMast.getWrkNo())) { throw new CoolException("保存工作主档历史档失败"); } // 获取目标站 // Wrapper wrapper = new EntityWrapper() // .eq("type_no", wrkMast.getIoType() - 50) // .eq("stn_no", wrkMast.getStaNo()) // 作业站点 = 拣料出库的目标站 // .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 // StaDesc staDesc = staDescService.selectOne(wrapper); // if (Cools.isEmpty(staDesc)) { // throw new CoolException("入库路径不存在"); // } Date now = new Date(); // 堆垛机站点(目标站) // Integer staNo = staDesc.getCrnStn(); // 更新工作档数据状态 wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 // wrkMast.setStaNo(staNo + ""); // 目标站 wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 wrkMast.setSourceLocNo(""); // 源库位清空 wrkMast.setModiTime(now); wrkMast.setModiUser(userId); if (!this.updateById(wrkMast)) { throw new CoolException("更新工作档数据状态失败"); } // 修改库位状态 Q.拣料/盘点/并板再入库 LocCache locMast = locCacheService.selectOne(new EntityWrapper().eq("loc_no", wrkMast.getLocNo())); locMast.setLocSts("Q"); locMast.setModiTime(now); locMast.setModiUser(userId); if (!locCacheService.updateById(locMast)) { throw new CoolException("修改库位状态失败"); } } @Override public List selectToBeCompleteData() { return this.baseMapper.selectToBeCompleteData(); } @Override @Transactional public void cancelWrkMast(String workNo, Long userId) { Date now = new Date(); Task wrkMast = this.selectOne(new EntityWrapper().eq("wrk_no", workNo)); if (Cools.isEmpty(wrkMast)) { throw new CoolException(workNo + "工作档不存在"); } String locNo = ""; // 待修改目标库位 String locSts = ""; // 待修改目标库位状态 // 入库取消(修改目标库位) if (wrkMast.getWrkSts() < 4) { locNo = wrkMast.getLocNo(); locSts = "O"; // 库位转移 if (wrkMast.getIoType() == 11) { // 库位转移:源库位 LocCache locMast = locCacheService.selectOne(new EntityWrapper().eq("loc_no", wrkMast.getSourceLocNo())); if (Cools.isEmpty(locMast)) { throw new CoolException("取消库位转移失败,源库位不存在:" + wrkMast.getSourceLocNo()); } locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F"); locMast.setModiTime(now); locMast.setModiUser(userId); locCacheService.updateById(locMast); } // 出库取消(修改源库位) } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) { 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"; // 库位转移:目标库位 LocCache locMast = locCacheService.selectOne(new EntityWrapper().eq("loc_no", wrkMast.getLocNo())); if (Cools.isEmpty(locMast)) { throw new CoolException("取消库位转移失败,目标库位不存在:" + wrkMast.getSourceLocNo()); } locMast.setLocSts("O"); locMast.setModiTime(now); locMast.setModiUser(userId); locCacheService.updateById(locMast); } } else { throw new CoolException("当前工作状态无法取消"); } //取消入库工作档时,查询组托表,如果有将状态改为待处理 if (wrkMast.getIoType() == 1) { List waitPakins = waitPakinService.selectList(new EntityWrapper().eq("zpallet", wrkMast.getBarcode())); for (WaitPakin waitPakin : waitPakins) { if (!Cools.isEmpty(waitPakin)) { waitPakin.setIoStatus("N"); waitPakin.setLocNo(""); waitPakinService.update(waitPakin, new EntityWrapper() // .eq("order_no", waitPakin.getOrderNo()) .eq("zpallet", waitPakin.getZpallet()) .eq("matnr", waitPakin.getMatnr()) .eq("batch", waitPakin.getBatch())); } } } //取消出库工作档时,查询单据管理表,回滚作业中数量 if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) { List wrkDetls = taskDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); for (TaskDetl wrkDetl : wrkDetls) { if (!Cools.isEmpty(wrkDetl.getOrderNo())) { // if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { // throw new CoolException("订单数据回滚失败"); // } OrderInAndOutUtil.decrease(Boolean.FALSE, wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme()); //修改订单主表状态,没有作业数量时才可以修改 boolean flag = true; // List orderDetls = orderDetlService.selectList(new EntityWrapper().eq("order_no",wrkDetl.getOrderNo())); Order order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, wrkDetl.getOrderNo()); List orderDetls = OrderInAndOutUtil.selectByOrderId(Boolean.FALSE, order.getId()); for (OrderDetl orderDetl : orderDetls) { if (orderDetl.getWorkQty() > 0) { flag = false; } } if (flag) { // Order order = orderService.selectOne(new EntityWrapper().eq("order_no",wrkDetl.getOrderNo())); if (!Cools.isEmpty(order) && order.getSettle() == 2) { order.setSettle(1L); order.setUpdateBy(userId); order.setUpdateTime(now); } // if(!orderService.update(order,new EntityWrapper().eq("order_no",wrkDetl.getOrderNo()))){ // throw new CoolException("修改订单状态失败"); // } OrderInAndOutUtil.updateOrder(Boolean.FALSE, order.getId(), order.getSettle(), userId); } } } } // // 订单关联 // List wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); // for (WrkDetl wrkDetl : wrkDetls) { // if (!Cools.isEmpty(wrkDetl.getOrderNo())) { // if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { // throw new CoolException("订单数据回滚失败"); // } // // 生成新的出库作业 //// stockOutRe(wrkMast, wrkDetls); // } // } // 取消操作人员记录 wrkMast.setManuType("手动取消"); wrkMast.setModiUser(userId); wrkMast.setModiTime(now); if (!taskService.updateById(wrkMast)) { throw new CoolException("取消工作档失败"); } // 保存工作主档历史档 if (!taskLogService.save(wrkMast.getWrkNo())) { throw new CoolException("保存工作历史档失败, workNo = " + wrkMast.getWrkNo()); } // 删除工作主档 boolean wrkMastRes = taskService.deleteById(wrkMast); if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) { // 保存工作明细档历史档 if (!taskDetlLogService.save(wrkMast.getWrkNo())) { // throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo()); } // 删除工作档明细 boolean wrkDetlRes = taskDetlService.delete(new EntityWrapper().eq("wrk_no", workNo)); } // 修改库位状态 LocCache locMast = locCacheService.selectOne(new EntityWrapper().eq("loc_no", locNo)); if (Cools.isEmpty(locMast)) { throw new CoolException("取消工作档失败,库位不存在:" + locNo); } locMast.setLocSts(locSts); locMast.setModiTime(now); locMast.setModiUser(userId); boolean locMastRes = locCacheService.updateById(locMast); if (!wrkMastRes || !locMastRes) { throw new CoolException("保存数据失败"); } } }