From b9d414bc2d61b4824ce6a019b1c10f526f71ced1 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期一, 21 四月 2025 12:56:12 +0800 Subject: [PATCH] #修改 1. 新增DO单,DO单明细 --- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 507 ++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 329 insertions(+), 178 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java index 6df867e..a22179e 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java @@ -1,21 +1,29 @@ 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.api.controller.params.*; import com.vincent.rsf.server.api.entity.dto.*; +import com.vincent.rsf.server.api.entity.enums.OrderType; import com.vincent.rsf.server.api.entity.enums.OrderWorkType; import com.vincent.rsf.server.api.service.MobileService; import com.vincent.rsf.server.common.config.ConfigProperties; 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; @@ -25,23 +33,19 @@ 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.FieldsService; 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 org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.math.BigDecimal; -import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -62,7 +66,7 @@ @Autowired private TenantMapper tenantService; @Autowired - private UserMapper userService; + private UserService userService; @Autowired private UserLoginService userLoginService; @Autowired @@ -81,6 +85,8 @@ private QlyIsptItemService qlyIsptItemService; @Resource private StockItemMapper stockItemMapper; + @Autowired + private LocItemService locItemService; @Resource private PurchaseItemMapper purchaseItemMapper; @Resource @@ -118,6 +124,8 @@ private LocAreaRelaMapper locAreaRelaMapper; @Autowired private LocAreaMapper locAreaMapper; + @Autowired + private DeviceSiteMapper deviceSiteMapper; /** * @author Ryan @@ -143,7 +151,7 @@ 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); } @@ -183,28 +191,32 @@ */ @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(); + 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(); @@ -213,13 +225,17 @@ if (Objects.isNull(asnOrder)) { throw new CoolException("鏁版嵁閿欒锛氫富鍗曚笉瀛樺湪锛侊紒"); } - asnOrder.setQty(receiptQty); + //TODO /**鏀惰揣鏁伴噺绱姞锛�1. 浼氬嚭瓒呮敹鎯呭喌 2. 浼氭湁鏀惰揣涓嶈冻鎯呭喌*/ + Double rcptedQty = asnOrder.getQty() + receiptQty; + 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("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪锛侊紒"); @@ -227,21 +243,39 @@ 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浣島uid + 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("閫氱煡鍗曟槑缁嗘暟閲忎慨鏀瑰け璐ワ紒锛�"); @@ -253,112 +287,47 @@ // 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浣島uid - 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("鏀惰揣澶辫触锛侊紒"); } - - //鑾峰彇閲囪喘鏁伴噺 - double purQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getPurQty).sum(); - - BigDecimal subtract = BigDecimal.valueOf(receiptQty).subtract(BigDecimal.valueOf(purQty)); - //鍒ゆ柇宸叉敹璐ф暟閲忔槸鍚﹀皬浜庣瓑浜庨噰璐暟閲� - if (subtract.compareTo(new BigDecimal("0.0")) <= 0) { - asnOrder.setRleStatus(Short.valueOf("1")); - //鏃ュ織琛ㄦ搷浣� - operateOrderLogs(asnOrder); - } - - return R.ok("鎿嶄綔鎴愬姛"); +// //鑾峰彇閲囪喘鏁伴噺 +// double purQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getPurQty).sum(); +// +// BigDecimal subtract = BigDecimal.valueOf(receiptQty).subtract(BigDecimal.valueOf(purQty)); +// //鍒ゆ柇宸叉敹璐ф暟閲忔槸鍚﹀皬浜庣瓑浜庨噰璐暟閲� +// if (subtract.compareTo(new BigDecimal("0.0")) <= 0) { +// asnOrder.setRleStatus(Short.valueOf("1")); +// //鏃ュ織琛ㄦ搷浣� +// operateOrderLogs(asnOrder); +// } + return R.ok(asnOrder); } - - /** - * @author Ryan - * @description 鍒犻櫎鍘熶富鍗曞強鏄庣粏锛屽姞鍏ュ巻鍙叉。 - * @param - * @return - * @time 2025/3/19 19:53 - */ - private void operateOrderLogs(AsnOrder asnOrder) { - if (!asnOrderMapper.removeById(asnOrder.getId())) { - throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�"); - } - - AsnOrderLog orderLog = new AsnOrderLog(); - BeanUtils.copyProperties(asnOrder, orderLog); - orderLog.setAsnId(asnOrder.getId()); - - if (!asnOrderLogService.save(orderLog)) { - throw new CoolException("涓诲崟鍘嗗彶妗f坊鍔犲け璐ワ紒锛�"); - } - - List<AsnOrderItemLog> logs = new ArrayList<>(); - List<AsnOrderItem> items = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asnOrder.getId())); - items.forEach(item -> { - AsnOrderItemLog itemLog = new AsnOrderItemLog(); - BeanUtils.copyProperties(item, itemLog); - itemLog.setAsnItemId(itemLog.getId()) - .setAsnId(item.getAsnId()); - logs.add(itemLog); - }); - - if (!asnOrderItemLogService.saveBatch(logs)) { - throw new CoolException("閫氱煡鍗曟槑缁嗗巻鍙叉。淇濆瓨澶辫触锛侊紒"); - } - - if (asnOrderItemMapper.delete(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asnOrder.getId())) < 1) { - throw new CoolException("鍘熷崟鎹槑缁嗗垹闄ゅけ璐ワ紒锛�"); - } - } - /** * @author Ryan @@ -390,7 +359,7 @@ */ @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; } @@ -403,7 +372,8 @@ */ @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); } /** @@ -418,23 +388,42 @@ 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 瑙g粦 + * @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); @@ -516,36 +505,39 @@ 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); } /** @@ -554,14 +546,12 @@ * @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 { @@ -599,28 +589,27 @@ if (!waitPakins.isEmpty()) { throw new CoolException("鎷栫洏宸蹭娇鐢�!!"); } - List<AsnOrderItem> orderItems = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>() + AsnOrderItem orderItems = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() .eq(AsnOrderItem::getAsnId, asnOrders.getId()) .eq(AsnOrderItem::getMatnrCode, params.getMatnrCode())); - if (orderItems.isEmpty()) { - throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); + if (Objects.isNull(orderItems)) { + return R.ok(null); } - List<AsnOrderItem> stocks = new ArrayList<>(); - orderItems.forEach(item -> { - item.setBarcode(params.getBarcode()); - stocks.add(item); - }); - return R.ok(stocks); + orderItems.setBarcode(params.getBarcode()); + + return R.ok(orderItems); } /** * 浜哄伐涓婃灦鍏ュ簱 + * * @param params + * @param loginUserId * @return */ @Override @Transactional(rollbackFor = Exception.class) - public R publicToStock(PublicToStockParams params) { + public R publicToStock(PublicToStockParams params, Long loginUserId) { if (Objects.isNull(params.getLocCode()) || StringUtils.isBlank(params.getLocCode())) { throw new CoolException("搴撲綅涓嶈兘涓虹┖锛侊紒"); } @@ -628,34 +617,63 @@ throw new CoolException("鍗曟嵁鏄庣粏涓嶈兘涓虹┖锛侊紒"); } Long OrderId = params.getItemList().stream().findFirst().get().getAsnId(); - AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, OrderId)); + /**鑾峰彇骞冲簱璁㈠崟*/ + AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>() + .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())); - 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("搴撳瓨淇濆瓨澶辫触锛侊紒"); } - Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, params.getLocCode())); + //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); @@ -682,7 +700,7 @@ throw new CoolException("鎷栫洏浠诲姟涓嶅瓨鍦紒锛�"); } List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); - if (!taskItems.isEmpty()) { + if (taskItems.isEmpty()) { throw new CoolException("鎷栫洏浠诲姟鏄庣粏涓嶅瓨鍦紒锛�"); } TaskQueueDto queueDto = new TaskQueueDto(); @@ -740,6 +758,138 @@ 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 */ @@ -750,6 +900,7 @@ detlsDto.setAsnCode(asnOrderItem.getAsnCode()) .setMaktx(asnOrderItem.getMaktx()) + .setFieldsIndex(asnOrderItem.getFieldsIndex()) .setBarcode(asnOrderItem.getTrackCode()) .setQty(asnOrderItem.getQty()) .setPoCode(asnOrderItem.getPoCode()) @@ -772,14 +923,15 @@ 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())) { @@ -790,7 +942,6 @@ detlsDto.setPlatformId(purchaseItem.getPlatItemId()); } } - detlsDtos.add(detlsDto); }); -- Gitblit v1.9.1