| | |
| | | package com.vincent.rsf.server.api.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.vincent.rsf.framework.common.Cools; |
| | | import com.vincent.rsf.framework.common.R; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | |
| | | import com.vincent.rsf.server.common.enums.WarehouseAreaType; |
| | | import com.vincent.rsf.server.common.security.JwtSubject; |
| | | import com.vincent.rsf.server.common.utils.CommonUtil; |
| | | import com.vincent.rsf.server.common.utils.FieldsUtils; |
| | | import com.vincent.rsf.server.common.utils.JwtUtil; |
| | | import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams; |
| | | import com.vincent.rsf.server.manager.controller.params.IsptItemsParams; |
| | | import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; |
| | | import com.vincent.rsf.server.manager.entity.*; |
| | | import com.vincent.rsf.server.manager.enums.AsnExceStatus; |
| | | import com.vincent.rsf.server.manager.enums.PakinIOStatus; |
| | | import com.vincent.rsf.server.manager.enums.QlyIsptStatus; |
| | | import com.vincent.rsf.server.manager.mapper.*; |
| | | import com.vincent.rsf.server.manager.service.*; |
| | | import com.vincent.rsf.server.system.constant.CodeRes; |
| | |
| | | import com.vincent.rsf.server.system.entity.*; |
| | | import com.vincent.rsf.server.system.mapper.FieldsMapper; |
| | | import com.vincent.rsf.server.system.mapper.TenantMapper; |
| | | import com.vincent.rsf.server.system.mapper.UserMapper; |
| | | import com.vincent.rsf.server.system.service.FieldsItemService; |
| | | import com.vincent.rsf.server.system.service.UserLoginService; |
| | | import com.vincent.rsf.server.system.service.UserService; |
| | | import com.vincent.rsf.server.system.utils.SerialRuleUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @Autowired |
| | | private TenantMapper tenantService; |
| | | @Autowired |
| | | private UserMapper userService; |
| | | private UserService userService; |
| | | @Autowired |
| | | private UserLoginService userLoginService; |
| | | @Autowired |
| | |
| | | private QlyIsptItemService qlyIsptItemService; |
| | | @Resource |
| | | private StockItemMapper stockItemMapper; |
| | | @Autowired |
| | | private LocItemService locItemService; |
| | | @Resource |
| | | private PurchaseItemMapper purchaseItemMapper; |
| | | @Resource |
| | |
| | | private LocAreaRelaMapper locAreaRelaMapper; |
| | | @Autowired |
| | | private LocAreaMapper locAreaMapper; |
| | | @Autowired |
| | | private DeviceSiteMapper deviceSiteMapper; |
| | | |
| | | /** |
| | | * @author Ryan |
| | |
| | | if (user.getStatus() != 1) { |
| | | return R.parse(CodeRes.USER_10002); |
| | | } |
| | | if (!user.getPassword().equals(param.getPassword())) { |
| | | if (!userService.comparePassword(user.getPassword(), param.getPassword())) { |
| | | return R.parse(CodeRes.USER_10003); |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R receiptToWarehouse(ReceiptParams params) { |
| | | if (params.getReceipts().isEmpty()) { |
| | | public R receiptToWarehouse(Map<String, Object> params) { |
| | | if (Objects.isNull(params)) { |
| | | throw new CoolException("参数不能为空!!"); |
| | | } |
| | | ReceiptParams receiptParam = JSONObject.parseObject(JSONObject.toJSONString(params), ReceiptParams.class); |
| | | if (receiptParam.getReceipts().isEmpty()) { |
| | | throw new CoolException("收货明细不能为空!!"); |
| | | } |
| | | if (Objects.isNull(params.getWhAreaId())) { |
| | | if (Objects.isNull(receiptParam.getWhAreaId())) { |
| | | throw new CoolException("库区标识不能为空!!"); |
| | | } |
| | | |
| | | WarehouseAreas areasItem = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>() |
| | | .eq(WarehouseAreas::getId, params.getWhAreaId())); |
| | | .eq(WarehouseAreas::getId, receiptParam.getWhAreaId())); |
| | | if (Objects.isNull(areasItem)) { |
| | | throw new CoolException("数据错误:当前库区不存在!!"); |
| | | } |
| | | //获取已启用的动态扩展字 |
| | | List<Fields> fields = fieldsMapper.selectList(new LambdaQueryWrapper<Fields>() |
| | | .eq(Fields::getFlagEnable, 1) |
| | | .eq(Fields::getStatus, 1)); |
| | | |
| | | List<ReceiptDetlsDto> receipts = params.getReceipts(); |
| | | List<ReceiptDetlsDto> receipts = receiptParam.getReceipts(); |
| | | List<WarehouseAreasItem> allOrders = new ArrayList<>(); |
| | | |
| | | Double receiptQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getReceiptQty).sum(); |
| | | |
| | | if (Objects.isNull(receiptQty) || receiptQty.compareTo(0.00) <= 0) { |
| | | throw new CoolException("收货数量不能小于或等于零!!"); |
| | | } |
| | | |
| | | String asnCode = receipts.stream().findFirst().get().getAsnCode(); |
| | | |
| | |
| | | if (Objects.isNull(asnOrder)) { |
| | | throw new CoolException("数据错误:主单不存在!!"); |
| | | } |
| | | /**收货数量累加,1. 会出超收情况 2. 会有收货不足情况*/ |
| | | //TODO /**收货数量累加,1. 会出超收情况 2. 会有收货不足情况*/ |
| | | Double rcptedQty = asnOrder.getQty() + receiptQty; |
| | | asnOrder.setQty(rcptedQty); |
| | | asnOrder.setQty(rcptedQty).setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val); |
| | | |
| | | if (!asnOrderMapper.updateById(asnOrder)) { |
| | | throw new CoolException("已收货数量修改失败!!"); |
| | | } |
| | | |
| | | receipts.forEach(dto -> { |
| | | List<Map<String, Object>> receipts1 = (List<Map<String, Object>>) params.get("receipts"); |
| | | for (Map<String, Object> rcpt : receipts1) { |
| | | if (Objects.isNull(rcpt)) {continue;} |
| | | ReceiptDetlsDto dto = JSONObject.parseObject(JSONObject.toJSONString(rcpt), ReceiptDetlsDto.class); |
| | | Matnr matnr = matnrMapper.selectById(dto.getMatnrId()); |
| | | if (Objects.isNull(matnr)) { |
| | | throw new CoolException("数据错误:当前物料不存在!!"); |
| | |
| | | if (Objects.isNull(dto.getReceiptQty())) { |
| | | throw new CoolException("收货数据不能为空!!"); |
| | | } |
| | | if (dto.getReceiptQty().compareTo(dto.getAnfme()) > 0) { |
| | | throw new CoolException("收货数量不能大于采购数量!!"); |
| | | } |
| | | |
| | | // if (dto.getReceiptQty().compareTo(dto.getAnfme()) > 0) { |
| | | // throw new CoolException("收货数量不能大于采购数量!!"); |
| | | // } |
| | | AsnOrderItem orderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() |
| | | .eq(AsnOrderItem::getAsnCode, asnCode) |
| | | .eq(AsnOrderItem::getTrackCode, dto.getBarcode()) |
| | | .eq(AsnOrderItem::getMatnrId, dto.getMatnrId())); |
| | | if (Objects.isNull(orderItem)) { |
| | | throw new CoolException("通知单明细不存在!!"); |
| | | } |
| | | if (Objects.isNull(dto.getReceiptQty()) || Double.compare(dto.getReceiptQty(), 0.0) == 0) { |
| | | throw new CoolException("收货数量不能为零!!"); |
| | | throw new CoolException("物料:" + dto.getMaktx() + "收货数量不能为零!!"); |
| | | } |
| | | orderItem.setQty(dto.getReceiptQty()) |
| | | Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty(); |
| | | orderItem.setQty(itemRcptQty) |
| | | .setSplrBatch(dto.getSplrBatch()) |
| | | .setStockUnit(dto.getStockUnit()) |
| | | .setProdTime(dto.getProdTime()); |
| | | |
| | | if (!Objects.isNull(rcpt)) { |
| | | try { |
| | | if (Objects.isNull(rcpt.get("fieldsindex")) || StringUtils.isBlank(rcpt.get("fieldsindex").toString())) { |
| | | //获取16位uuid |
| | | String uuid16 = CommonUtil.randomUUID16(); |
| | | rcpt.put("index", uuid16); |
| | | orderItem.setFieldsIndex(uuid16); |
| | | } |
| | | //保存或更新扩展字段 |
| | | FieldsUtils.updateFieldsValue(rcpt); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | if (asnOrderItemMapper.updateById(orderItem) < 1) { |
| | | throw new CoolException("通知单明细数量修改失败!!"); |
| | |
| | | // if (Objects.isNull(dto.getProdTime())) { |
| | | // format = dateFormat.format(dto.getProdTime()); |
| | | // } |
| | | item.setBarcode(dto.getBarcode()) |
| | | item.setTrackCode(dto.getBarcode()) |
| | | .setAreaName(areasItem.getName()) |
| | | .setAreaId(areasItem.getId()) |
| | | .setAsnItemId(orderItem.getId()) |
| | | .setAsnCode(asnOrder.getCode()) |
| | | .setAsnId(asnOrder.getId()) |
| | | .setProdTime(dto.getProdTime()) |
| | | .setWeight(dto.getWeigth()) |
| | | .setStockUnit(dto.getStockUnit()) |
| | | .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto)) |
| | | .setAnfme(dto.getReceiptQty()) |
| | | .setSplrBtch(dto.getSplrBatch()) |
| | | .setSplrBatch(dto.getSplrBatch()) |
| | | .setMatnrCode(matnr.getCode()) |
| | | .setMatnrId(matnr.getId()) |
| | | .setMatnrName(matnr.getName()) |
| | | .setMaktx(matnr.getName()) |
| | | //库存单位为最小单位 |
| | | .setUnit(dto.getStockUnit()) |
| | | .setStockUnit(dto.getStockUnit()) |
| | | .setWeight(matnr.getWeight()) |
| | | .setFieldsIndex(orderItem.getFieldsIndex()) |
| | | .setShipperId(matnr.getShipperId()); |
| | | //TODO 供应商标识未设置,标识由PO单供应商编码转换 |
| | | //TODO 供应商标识未设置,标识由PO单供应商编码转换 |
| | | |
| | | if (!Objects.isNull(fields)) { |
| | | if (!Objects.isNull(dto.getExtendFields())) { |
| | | //获取16位uuid |
| | | String uuid16 = CommonUtil.randomUUID16(); |
| | | Map<String, Object> extendFields = dto.getExtendFields(); |
| | | //字段集合申明 |
| | | List<FieldsItem> fieldsItems = new ArrayList<>(); |
| | | extendFields.keySet().forEach(key -> { |
| | | fields.forEach(obj -> { |
| | | //判断key值与fields表字段是否相同 |
| | | if (obj.getFields().equals(key)) { |
| | | FieldsItem fieldsItem = new FieldsItem(); |
| | | fieldsItem.setMatnrId(matnr.getId()).setFieldsId(obj.getId()) |
| | | .setShiperId(matnr.getShipperId()) |
| | | .setValue(extendFields.get(key).toString()) |
| | | .setUuid(uuid16); |
| | | fieldsItems.add(fieldsItem); |
| | | //唯一标识入库 |
| | | item.setFieldsIndex(uuid16); |
| | | } |
| | | }); |
| | | }); |
| | | if (!fieldsItemService.saveBatch(fieldsItems)) { |
| | | throw new CoolException("扩展字段保存失败!!"); |
| | | } |
| | | } |
| | | } |
| | | allOrders.add(item); |
| | | }); |
| | | } |
| | | |
| | | if (!warehouseAreasItemService.saveBatch(allOrders)) { |
| | | throw new CoolException("收货失败!!"); |
| | |
| | | // //日志表操作 |
| | | // operateOrderLogs(asnOrder); |
| | | // } |
| | | return R.ok("操作成功"); |
| | | return R.ok(asnOrder); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public List<AsnOrder> getAllAsnOrders() { |
| | | List<AsnOrder> asnOrders = asnOrderMapper.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWkType, OrderWorkType.ORDER_PURCHASE_IN.type)); |
| | | List<AsnOrder> asnOrders = asnOrderMapper.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWkType, OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)); |
| | | return asnOrders; |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public R getReceiptAreas() { |
| | | return R.ok(warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_RECEIPT.type))); |
| | | List<WarehouseAreas> areas = warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_RECEIPT.type)); |
| | | return R.ok(areas); |
| | | } |
| | | |
| | | /** |
| | |
| | | return fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1)); |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @description 获取组盘明细 |
| | | * @param |
| | | * @return |
| | | * @time 2025/4/7 16:58 |
| | | */ |
| | | @Override |
| | | public R getDeltByCode(String code) { |
| | | return R.ok(asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, code))); |
| | | //TODO 后续需根据策略配置,获取组拖数据。如:混装,按批次混装等 |
| | | LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>() |
| | | .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx").lambda() |
| | | .eq(WarehouseAreasItem::getTrackCode, code) |
| | | .groupBy(WarehouseAreasItem::getSplrBatch, WarehouseAreasItem::getAsnId, WarehouseAreasItem::getAreaId, WarehouseAreasItem::getMatnrId); |
| | | return R.ok(warehouseAreasItemService.getOne(queryWrapper)); |
| | | } |
| | | |
| | | /** |
| | | * @param |
| | | * @param userId |
| | | * @return |
| | | * @author Ryan |
| | | * @description PDA组拖 |
| | | * @time 2025/3/29 14:26 |
| | | */ |
| | | @Override |
| | | public WaitPakin mergeItems(WaitPakinParam waitPakin, Long userId) { |
| | | return waitPakinService.mergeItems(waitPakin, userId); |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @description PDA组拖 |
| | | * @param |
| | | * @description 解绑 |
| | | * @param param |
| | | * @return |
| | | * @time 2025/3/29 14:26 |
| | | */ |
| | | @Override |
| | | public WaitPakin mergeItems(WaitPakinParam waitPakin) { |
| | | return waitPakinService.mergeItems(waitPakin); |
| | | } |
| | | |
| | | @Override |
| | | public WaitPakin unBind(WaitPakinParam param) { |
| | | return waitPakinService.unBind(param); |
| | |
| | | if (Objects.isNull(params.getIsptCode())) { |
| | | throw new CoolException("质检单不能为空"); |
| | | } |
| | | if (Objects.isNull(params.getMatnrCode())) { |
| | | throw new CoolException("物料编码不能为空!"); |
| | | } |
| | | QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>().eq(QlyInspect::getCode, params.getIsptCode())); |
| | | List<Short> asList = Arrays.asList(QlyIsptStatus.QLY_ISPT_STAS_DONE.val, QlyIsptStatus.QLY_ISPT_STAS_CLOSE.val); |
| | | QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>() |
| | | .notIn(QlyInspect::getIsptStatus, asList) |
| | | .eq(QlyInspect::getCode, params.getIsptCode())); |
| | | if (Objects.isNull(inspect)) { |
| | | throw new CoolException("质检单据不存在!!"); |
| | | } |
| | | QlyIsptItem isptItem = qlyIsptItemService.getOne(new LambdaQueryWrapper<QlyIsptItem>() |
| | | .eq(QlyIsptItem::getMatnrCode, params.getMatnrCode()) |
| | | List<QlyIsptItem> isptItems = qlyIsptItemService.list(new LambdaQueryWrapper<QlyIsptItem>() |
| | | .eq(StringUtils.isNotBlank(params.getMatnrCode()), QlyIsptItem::getMatnrCode, StringUtils.isNotBlank(params.getMatnrCode()) ? params.getMatnrCode() : null) |
| | | .eq(QlyIsptItem::getIspectId, inspect.getId())); |
| | | if (Objects.isNull(isptItem)) { |
| | | if (Objects.isNull(isptItems)) { |
| | | throw new CoolException("质检单明细不存在!!"); |
| | | } |
| | | |
| | | CheckObjDto objDto = new CheckObjDto(); |
| | | objDto.setIsptCode(inspect.getCode()) |
| | | .setAsnCode(inspect.getAsnCode()) |
| | | .setId(isptItem.getId()) |
| | | .setMatnrCode(isptItem.getMatnrCode()) |
| | | .setMaktx(isptItem.getMaktx()) |
| | | .setDisQty(isptItem.getDisQty()) |
| | | .setDlyQty(isptItem.getDlyQty()) |
| | | .setRcptQty(isptItem.getRcptQty()) |
| | | .setIsptResult(isptItem.getIsptResult()) |
| | | .setSplrBatch(isptItem.getSplrBatch()) |
| | | .setSplrName(isptItem.getSplrName()) |
| | | .setPicPath(isptItem.getPicPath()) |
| | | .setMemo(isptItem.getMemo()) |
| | | .setSafeQty(isptItem.getSafeQty()); |
| | | return R.ok(objDto); |
| | | List<CheckObjDto> dtos = new ArrayList<>(); |
| | | isptItems.forEach(isptItem -> { |
| | | CheckObjDto objDto = new CheckObjDto(); |
| | | objDto.setIsptCode(inspect.getCode()) |
| | | .setAsnCode(inspect.getAsnCode()) |
| | | .setId(isptItem.getId()) |
| | | .setMatnrCode(isptItem.getMatnrCode()) |
| | | .setMaktx(isptItem.getMaktx()) |
| | | .setDisQty(isptItem.getDisQty()) |
| | | .setDlyQty(isptItem.getDlyQty()) |
| | | .setRcptQty(isptItem.getRcptQty()) |
| | | .setIsptResult(isptItem.getIsptResult()) |
| | | .setSplrBatch(isptItem.getSplrBatch()) |
| | | .setSplrName(isptItem.getSplrName()) |
| | | .setPicPath(isptItem.getPicPath()) |
| | | .setMemo(isptItem.getMemo()) |
| | | .setSafeQty(isptItem.getSafeQty()); |
| | | dtos.add(objDto); |
| | | }); |
| | | return R.ok(dtos); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R checkUpdate(QlyIsptItem params) { |
| | | if (Objects.isNull(params.getId())) { |
| | | public R checkUpdate(List<QlyIsptItem> params) { |
| | | if (Objects.isNull(params) || params.isEmpty()) { |
| | | throw new CoolException("参数不能为空!!"); |
| | | } |
| | | IsptItemsParams itemsParams = new IsptItemsParams(); |
| | | List<QlyIsptItem> items = new ArrayList<>(); |
| | | items.add(params); |
| | | itemsParams.setIsptItem(items).setType("0"); |
| | | itemsParams.setIsptItem(params).setType("0"); |
| | | if (qlyIsptItemService.batchUpdate(itemsParams)) { |
| | | return R.ok(); |
| | | } else { |
| | |
| | | .eq(AsnOrder::getId, OrderId) |
| | | .eq(AsnOrder::getType, OrderType.ORDER_PLAT_IN.type)); |
| | | if (Objects.isNull(order)) { |
| | | throw new CoolException("单据不存在!!"); |
| | | throw new CoolException("非平库单据不可执行人工上架!!"); |
| | | } |
| | | Stock stock = new Stock(); |
| | | stock.setAsnId(OrderId).setAsnCode(order.getCode()); |
| | | if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) { |
| | | Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode())); |
| | | if (!Objects.isNull(purchase)) { |
| | | stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId()); |
| | | } |
| | | } |
| | | // if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) { |
| | | // Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode())); |
| | | // if (!Objects.isNull(purchase)) { |
| | | // stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId()); |
| | | // } |
| | | // } |
| | | String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null); |
| | | if (StringUtils.isBlank(ruleCode)) { |
| | | throw new CoolException("当前业务:" + SerialRuleCode.SYS_STOCK_CODE + ",编码规则不存在!!"); |
| | | } |
| | | List<AsnOrderItem> itemList = params.getItemList(); |
| | | double sum = itemList.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); |
| | | stock.setAnfme(sum) |
| | | .setSourceId(order.getId()) |
| | | .setType(order.getType()) |
| | | .setWkType(Short.parseShort(order.getWkType())); |
| | | if (!stockService.save(stock)) { |
| | | throw new CoolException("库存保存失败!!"); |
| | | } |
| | | //TODO 平库上架策略问题: 1 平库库位是单独设计,还是与产库一起用类型区分 |
| | | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, params.getLocCode())); |
| | | if (Objects.isNull(loc)) { |
| | | throw new CoolException("库位不存在!!"); |
| | | } |
| | | //locItemSerivce |
| | | List<LocItem> locItems = new ArrayList<>(); |
| | | itemList.forEach(asnOrderItem -> { |
| | | LocItem item = new LocItem(); |
| | | BeanUtils.copyProperties(asnOrderItem, item); |
| | | item.setId(loc.getId()) |
| | | .setOrderId(order.getId()) |
| | | .setOrderItemId(asnOrderItem.getId()) |
| | | .setWkType(Short.parseShort(order.getWkType())) |
| | | .setType(order.getType()); |
| | | locItems.add(item); |
| | | }); |
| | | if (!locItemService.saveBatch(locItems)) { |
| | | throw new CoolException("库位明细更新失败!!"); |
| | | } |
| | | |
| | | List<StockItem> stockItems = new ArrayList<>(); |
| | | params.getItemList().forEach(orderItem -> { |
| | | itemList.forEach(orderItem -> { |
| | | StockItem stockItem = new StockItem(); |
| | | BeanUtils.copyProperties(orderItem, stockItem); |
| | | stockItem.setAsnItemId(orderItem.getId()) |
| | | stockItem.setSourceItemId(orderItem.getId()) |
| | | .setBarcode(orderItem.getBarcode()) |
| | | .setLocId(loc.getId()) |
| | | .setStockCode(stock.getCode()) |
| | | .setUpdateBy(loginUserId) |
| | | .setCreateBy(loginUserId) |
| | | .setId(null) |
| | | .setStockId(stock.getId()); |
| | | stockItems.add(stockItem); |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | @Override |
| | | public R completeOrder(Long id, Long loginUserId) { |
| | | return asnOrderMapper.completeOrder(id, loginUserId); |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @description 通过容器获取组拖物料 |
| | | * @param |
| | | * @return |
| | | * @time 2025/4/9 16:57 |
| | | */ |
| | | @Override |
| | | public R getItemByContainer(Map<String, Object> params) { |
| | | //获取组拖未生成任务的组拖档 |
| | | List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val)); |
| | | Short flagDefect = 0; |
| | | if (!Objects.isNull(params.get("type")) && params.get("type").equals("defective")) { |
| | | flagDefect = 1; |
| | | } |
| | | WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>() |
| | | .eq(WaitPakin::getBarcode, params.get("barcode").toString()) |
| | | .eq(WaitPakin::getFlagDefect, flagDefect) |
| | | .in(WaitPakin::getIoStatus, asList)); |
| | | if (Objects.isNull(waitPakin)) { |
| | | return R.ok(new ArrayList<>()); |
| | | } |
| | | List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>() |
| | | .eq(WaitPakinItem::getPakinId, waitPakin.getId())); |
| | | if (pakinItems.isEmpty()) { |
| | | return R.ok(new ArrayList<>()); |
| | | } |
| | | if (!Objects.isNull(params.get("type")) && params.get("type").equals("defective")) { |
| | | return R.ok(pakinItems); |
| | | } else { |
| | | List<String> list = pakinItems.stream().map(WaitPakinItem::getTrackCode).collect(Collectors.toList()); |
| | | LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>() |
| | | .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx") |
| | | .lambda() |
| | | .in(WarehouseAreasItem::getTrackCode, list) |
| | | .groupBy(WarehouseAreasItem::getSplrBatch, |
| | | WarehouseAreasItem::getTrackCode); |
| | | List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper); |
| | | for (int i = 0; i < warehouseAreasItems.size(); i++) { |
| | | for (WaitPakinItem pakinItem : pakinItems) { |
| | | if (warehouseAreasItems.get(i).getTrackCode().equals(pakinItem.getTrackCode())) { |
| | | warehouseAreasItems.get(i).setAnfme(pakinItem.getAnfme()); |
| | | } |
| | | } |
| | | } |
| | | return R.ok(warehouseAreasItems); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @description 不良标签 |
| | | * @param |
| | | * @return |
| | | * @time 2025/4/12 08:12 |
| | | */ |
| | | @Override |
| | | public R defectProducts(String trackCode) { |
| | | AsnOrderItem orderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, trackCode)); |
| | | return R.ok(orderItem); |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @description 获取入库组拖信息 |
| | | * @param barcode |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R getPakinInStock(String barcode) { |
| | | WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode)); |
| | | if (Objects.isNull(waitPakin)) { |
| | | throw new CoolException("组拖单据不存在!!"); |
| | | } |
| | | List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId())); |
| | | if (pakinItems.isEmpty()) { |
| | | return R.ok(new ArrayList<>()); |
| | | } |
| | | return R.ok(pakinItems); |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @description 获取库口站点信息 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R getDeviceSites() { |
| | | List<DeviceSite> sites = deviceSiteMapper.selectList(new LambdaQueryWrapper<DeviceSite>() |
| | | .select(DeviceSite::getId, DeviceSite::getSite, DeviceSite::getName) |
| | | .eq(DeviceSite::getStatus, 1) |
| | | .groupBy(DeviceSite::getSite, DeviceSite::getId, DeviceSite::getName)); |
| | | return R.ok(sites); |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @description 获取推荐库位 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R getRecommondLocs() { |
| | | return R.ok(locService.list(new LambdaQueryWrapper<Loc>().last("limit 10"))); |
| | | } |
| | | |
| | | /** |
| | | * @param map |
| | | * @param loginUserId |
| | | * @return |
| | | * @author Ryan |
| | | * @description 生成任务列表 |
| | | */ |
| | | @Override |
| | | public R generateTask(Map<String, Object> map, Long loginUserId) { |
| | | String barcode = map.get("barcode").toString(); |
| | | List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode)); |
| | | if (waitPakins.isEmpty()) { |
| | | throw new CoolException("单据不存在 !!"); |
| | | } |
| | | GenerateTaskParams taskParams = new GenerateTaskParams(); |
| | | taskParams.setWaitPakins(waitPakins) |
| | | .setSiteId(Long.parseLong(map.get("site").toString())) |
| | | .setLocCode(map.get("locCode").toString()); |
| | | return R.ok(taskService.generateTasks(taskParams, loginUserId)); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 获取ReceiptDetlsDtos |
| | | */ |
| | |
| | | |
| | | detlsDto.setAsnCode(asnOrderItem.getAsnCode()) |
| | | .setMaktx(asnOrderItem.getMaktx()) |
| | | .setFieldsIndex(asnOrderItem.getFieldsIndex()) |
| | | .setBarcode(asnOrderItem.getTrackCode()) |
| | | .setQty(asnOrderItem.getQty()) |
| | | .setPoCode(asnOrderItem.getPoCode()) |
| | |
| | | detlsDto.setInspect(inspect.getStatus$()); |
| | | } |
| | | //获取当前库存信息 |
| | | StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>() |
| | | .eq(StockItem::getAsnItemId, asnOrderItem.getId()) |
| | | .eq(StockItem::getMatnrId, asnOrderItem.getMatnrId())); |
| | | LocItem stockItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>() |
| | | .eq(LocItem::getOrderItemId, asnOrderItem.getId()) |
| | | .eq(LocItem::getBatch, asnOrderItem.getBatch()) |
| | | .eq(LocItem::getMatnrId, asnOrderItem.getMatnrId())); |
| | | //SET 当前库存数量 |
| | | if (Objects.isNull(stockItem)) { |
| | | detlsDto.setStockQty(0.0); |
| | | } else { |
| | | detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty()); |
| | | detlsDto.setStockQty(stockItem.getAnfme() + stockItem.getWorkQty()); |
| | | } |
| | | |
| | | if (!Objects.isNull(asnOrderItem.getPoDetlId())) { |
| | |
| | | detlsDto.setPlatformId(purchaseItem.getPlatItemId()); |
| | | } |
| | | } |
| | | |
| | | detlsDtos.add(detlsDto); |
| | | }); |
| | | |