zy-asrs-admin/src/components/orderOut/orderOutWavePreview/index.vue
@@ -212,8 +212,8 @@ dataTmp.locNo = null; dataTmp.locDetlId = null; dataTmp.anfme = item.anfme; dataTmp.typeId = val.typeId; dataTmp.workQty = val.workQty; dataTmp.typeId = item.typeId; dataTmp.workQty = item.workQty; dataTmp.key = idx; dataTmp.operationPort = defaultOperationPort; @@ -248,8 +248,8 @@ dataTmp.locId = null; dataTmp.locNo = null; dataTmp.locDetlId = null; dataTmp.typeId = val.typeId; dataTmp.workQty = val.workQty; dataTmp.typeId = item.typeId; dataTmp.workQty = item.workQty; dataTmp.anfme = isused; dataTmp.key = idx; dataTmp.operationPort = defaultOperationPort; @@ -344,10 +344,12 @@ <template #bodyCell="{ column, text, record, index }"> <template v-if="column.dataIndex === 'locNo'"> <div v-if="record.locId != null && record.anfme > 0"> <!-- <a-tag color="green">{{ record.locNo }}</a-tag> --> <a-select v-model:value="record.locId" :options="record.otherLocs" <!-- <a-tag color="green">{{ record.locNo }}</a-tag>--> <a-select v-model:value="record.locNo" :options="record.otherLocs" :fieldNames="{ label: 'locNo', value: 'locId' }" @change="handleOtherLocChange(index, record)"></a-select> @change="handleOtherLocChange(index, record)"> </a-select> </div> <div v-else> <a-tag color="red">库存不足</a-tag> zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/OrderLogController.java
@@ -53,7 +53,6 @@ String condition = map.getOrDefault("condition", "").toString(); BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<OrderLog, BaseParam> pageParam = new PageParam<>(baseParam, OrderLog.class); // QueryWrapper<OrderLog> wrapper = pageParam.buildWrapper(true); QueryWrapper<OrderLog> wrapper = new QueryWrapper<>(); ArrayList<Long> types = new ArrayList<>(); @@ -81,7 +80,7 @@ } } } wrapper.orderByDesc("create_time"); return R.ok().add(orderLogService.page(pageParam, wrapper)); } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mysql.cj.util.StringUtils; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.dto.*; import com.zy.asrs.wms.asrs.entity.dto.OrderOutMergeDto; @@ -24,6 +25,7 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; /** * 出库管理 @@ -551,7 +553,7 @@ sortParams.add(sortParam); List<MergePreviewResultDto> resultDtos = new ArrayList<>(); //优先查询平库数据 param.forEach(pars -> { List<MergePreviewResultLocDto> locDtos = new ArrayList<>(); MergePreviewResultDto resultDto = new MergePreviewResultDto(); @@ -600,15 +602,9 @@ resultDtos.add(resultDto); } else { resultDto.sync(pars); resultDto.setLocs(new ArrayList<>()); resultDto.setOrderIds(pars.getOrderIds()); resultDto.setAnfme(pars.getAnfme()); resultDtos.add(resultDto); } }); //平库查询完成后,再查询TCU for (MergePreviewDto dto : param) { Double anfme = dto.getAnfme() - dto.getWorkQty(); //减去平库数量后,小于等于0,跳出处理 @@ -647,7 +643,7 @@ locDto.setLocId(locDetl.getLocId()); locDto.setLocNo(locDetl.getLocNo()); locDto.setLocDetlId(locDetl.getId()); locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_UTC.id); locDtos.add(locDto); if (anfme - locDetl.getAnfme() < 0) { locDto.setAnfme(anfme); @@ -671,6 +667,7 @@ MergePreviewResultLocDto locDto = new MergePreviewResultLocDto(); locDto.setLocId(locDetl.getLocId()); locDto.setLocNo(locDetl.getLocNo()); locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_UTC.id); locDto.setLocDetlId(locDetl.getId()); locDto.setAnfme(locDetl.getAnfme()); otherLocDtos.add(locDto); @@ -1014,9 +1011,13 @@ //TUC数据源 List<OrderOutMergeParam> tucOrders = new ArrayList<>();//listMap.get(LocAreaTypeSts.LOC_AREA_TYPE_UTC); //按库位类型分类 Map<Long, List<OrderOutMergeParam>> listMap = params.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getTypeId)); //fixme 如果库存不足时,生成任务档 过滤掉没有库位信息的数据。找君杰确认 List<OrderOutMergeParam> mergeParam = params.stream().filter(par -> { return !StringUtils.isNullOrEmpty(par.getLocNo()); }).collect(Collectors.toList()); //数据分类 1.平库数据 2. TUC数据 Map<Long, List<OrderOutMergeParam>> listMap = mergeParam.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getTypeId)); listMap.keySet().forEach(key -> { if (key == LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id) { flatOrders.addAll(listMap.get(key)); @@ -1045,9 +1046,7 @@ */ private void outStockByTUC(List<OrderOutMergeParam> tucOrders, Wave wave) {//123 Map<Long, List<OrderOutMergeDto>> map = checkLoc(tucOrders, wave); if (!Objects.isNull(map)) { return; } for (Map.Entry<Long, List<OrderOutMergeDto>> entry : map.entrySet()) { Long locId = entry.getKey(); List<OrderOutMergeDto> list = entry.getValue(); @@ -1232,12 +1231,12 @@ throw new CoolException("通道参数不能为空"); } for (String channel : channels) { long count = cacheSiteService.count(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getChannel, channel).ne(CacheSite::getSiteStatus, 0)); if (count > 0) { throw new CoolException(channel + "通道已经分配波次"); } } // for (String channel : channels) { // long count = cacheSiteService.count(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getChannel, channel).ne(CacheSite::getSiteStatus, 0)); // if (count > 0) { // throw new CoolException(channel + "通道已经分配波次"); // } // } List<Long> orderIds = param.getOrderIds(); @@ -1290,19 +1289,19 @@ throw new CoolException("订单反写波次失败"); } List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).in(CacheSite::getChannel, channels).orderBy(true, true, CacheSite::getChannel)); if (cacheSites.isEmpty()) { throw new CoolException("缓存站空间不足,请稍后再试"); } CacheSite cacheSite = cacheSites.get(0); cacheSite.setOrderId(order.getId()); cacheSite.setOrderNo(order.getOrderNo()); cacheSite.setSiteStatus(CacheSiteStatusType.R.id); cacheSite.setUpdateTime(new Date()); if (!cacheSiteService.updateById(cacheSite)) { throw new CoolException("缓存站更新失败"); } // List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).in(CacheSite::getChannel, channels).orderBy(true, true, CacheSite::getChannel)); // if (cacheSites.isEmpty()) { // throw new CoolException("缓存站空间不足,请稍后再试"); // } // // CacheSite cacheSite = cacheSites.get(0); // cacheSite.setOrderId(order.getId()); // cacheSite.setOrderNo(order.getOrderNo()); // cacheSite.setSiteStatus(CacheSiteStatusType.R.id); // cacheSite.setUpdateTime(new Date()); // if (!cacheSiteService.updateById(cacheSite)) { // throw new CoolException("缓存站更新失败"); // } } for (Map.Entry<String, List<OrderDetl>> entry : map.entrySet()) { zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -39,6 +39,8 @@ @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private OrderLogService orderLogService; @Autowired private LocService locService; @@ -52,6 +54,12 @@ private PickSheetService pickSheetService; @Autowired private PickSheetDetlService pickSheetDetlService; @Autowired private MatService matService; @Autowired private WaveService waveService; @Autowired private WaveDetlService waveDetlService; @Override @Transactional(rollbackFor = Exception.class) @@ -140,12 +148,16 @@ locDetl.setAnfme(pakin.getAnfme()); locDetl.setBatch(pakin.getBatch()); locDetl.setMatId(pakin.getMatnrId$()); ; locDetl.setCreateTime(new Date()); locDetl.setOrderNo(pakin.getOrderNo()); locDetl.setLocNo(loc.getLocNo()); locDetl.setLocId(loc.getId()); locDetl.setMatnr(pakin.getMatnr()); Mat one = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, pakin.getMatnr())); if (!Objects.isNull(one)) { throw new CoolException("当前物料不存在!!"); } locDetl.setMatId(one.getId()); locDetl.setMemo(pakin.getMemo()); locDetl.setUpdateTime(new Date()); if (!locDetlService.saveOrUpdate(locDetl)) { @@ -167,6 +179,7 @@ if (!waitPakinService.removeBatchByIds(waitPakins)) { throw new CoolException("组拖档删除失败!!"); } //通过组拖订单ID获取订单,并删除原单据,加入单据历史档 List<Long> list = waitPakins.stream().map(WaitPakin::getOrderId).collect(Collectors.toList()); List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getId, list)); @@ -210,6 +223,9 @@ @Transactional(rollbackFor = Exception.class) public boolean confirmFlatSheet(String code) { PickSheet pickSheet = pickSheetService.getOne(new LambdaQueryWrapper<PickSheet>().eq(PickSheet::getPickNo, code)); if (Objects.isNull(pickSheet)) { throw new CoolException("拣货单不存在!!"); } if (pickSheet.getStatus() == 1) { //状态修改为: 已转历史档 pickSheet.setStatus(3); @@ -262,6 +278,26 @@ } } }); //删除波次及对应明细信息 if (!waveService.remove(new LambdaQueryWrapper<Wave>().eq(Wave::getId, pickSheet.getWaveId()))) { throw new CoolException("波次列表单据删除失败!!"); } if (!waveDetlService.remove(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, pickSheet.getWaveId()))) { throw new CoolException("波次明细列表删除失败!!"); } List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, pickSheet.getWaveId())); List<Long> list = orders.stream().map(Order::getId).collect(Collectors.toList()); boolean remove = orderDetlService.remove(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, list)); if (!remove) { throw new CoolException("原始订单明细删除失败!!"); } if (orderService.remove(new LambdaQueryWrapper<Order>().in(Order::getId, list))) { throw new CoolException("原始订单删除失败!!"); } return true; } zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
@@ -3,10 +3,19 @@ <mapper namespace="com.zy.asrs.wms.asrs.mapper.ViewLocDetlMapper"> <select id="queryStock" resultType="map"> select * from view_man_loc_detl ld where matnr = #{matnr} and freeze = 0 and batch = #{batch} SELECT * FROM ( SELECT id, loc_id, loc_no, mat_id, IFNULL(type_id, 4) AS type_id, work_qty, matnr, order_no, batch, anfme, host_id, memo,deleted, freeze FROM view_man_loc_detl ) t WHERE t.deleted = 0 AND t.freeze = 0 <if test="matnr != null and matnr != ''"> AND t.matnr = #{matnr} </if> <if test="batch != null and batch != ''"> AND t.batch = #{batch} </if> <if test="param!=null and param.size()>0"> <foreach item="item" collection="param" index="index"> <if test="item.value!=null and item.value != ''">