From 391e56cca8fc835791358ff32e63b1da6574462d Mon Sep 17 00:00:00 2001 From: Ryan <creaycat@gmail.com> Date: 星期四, 03 四月 2025 20:26:31 +0800 Subject: [PATCH] no message --- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 613 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 551 insertions(+), 62 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 956f040..df57841 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 @@ -4,30 +4,34 @@ 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.OtherReceiptParams; -import com.vincent.rsf.server.api.controller.params.ReceiptParams; -import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto; +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.JwtUtil; +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.mapper.*; -import com.vincent.rsf.server.manager.service.WarehouseAreasItemService; -import com.vincent.rsf.server.manager.service.WarehouseAreasService; +import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.system.constant.CodeRes; +import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.controller.param.LoginParam; import com.vincent.rsf.server.system.controller.result.LoginResult; -import com.vincent.rsf.server.system.entity.Tenant; -import com.vincent.rsf.server.system.entity.User; -import com.vincent.rsf.server.system.entity.UserLogin; +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.utils.SerialRuleUtils; -import org.apache.tika.utils.StringUtils; +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.stereotype.Service; @@ -35,7 +39,9 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; /** * @author Ryan @@ -63,17 +69,53 @@ private WarehouseAreasService warehouseAreasService; @Resource private AsnOrderItemMapper asnOrderItemMapper; - @Resource - private AsnOrderMapper asnOrderMapper; + @Autowired + private AsnOrderService asnOrderMapper; @Resource private MatnrMapper matnrMapper; @Resource private QlyInspectMapper qlyInspectMapper; + @Autowired + private QlyIsptItemService qlyIsptItemService; @Resource private StockItemMapper stockItemMapper; @Resource private PurchaseItemMapper purchaseItemMapper; + @Resource + private FieldsMapper fieldsMapper; + @Autowired + private IsptHistoriesMapper isptHistoriesMapper; + @Autowired + private AsnOrderLogService asnOrderLogService; + + @Autowired + private WaitPakinService waitPakinService; + + @Autowired + private WaitPakinItemService waitPakinItemService; + @Autowired + private AsnOrderItemLogService asnOrderItemLogService; + @Autowired + private FieldsItemService fieldsItemService; + @Autowired + private LocService locService; + @Autowired + private PurchaseService purchaseService; + @Autowired + private StockService stockService; + @Autowired + private StockItemService stockItemService; + @Autowired + private TaskService taskService; + @Autowired + private TaskItemService taskItemService; + @Autowired + private LocAreaMatRelaMapper locAreaMatRelaMapper; + @Autowired + private LocAreaRelaMapper locAreaRelaMapper; + @Autowired + private LocAreaMapper locAreaMapper; /** * @author Ryan @@ -119,10 +161,10 @@ */ @Override public R getOrderByCode(String barcode) { - if (StringUtils.isEmpty(barcode)) { + if (StringUtils.isBlank(barcode)) { return R.error("鏍囩鐮佷笉鑳戒负绌猴紒锛�"); } - AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode)); + List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, barcode)); if (Objects.isNull(asnOrderItem)) { throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); } @@ -146,21 +188,109 @@ if (Objects.isNull(params.getWhAreaId())) { throw new CoolException("搴撳尯鏍囪瘑涓嶈兘涓虹┖锛侊紒"); } - WarehouseAreasItem areasItem = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getAreaId, params.getWhAreaId())); + + WarehouseAreas areasItem = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>() + .eq(WarehouseAreas::getId, params.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<WarehouseAreasItem> allOrders = new ArrayList<>(); + List<WarehouseAreasItem> allOrders = new ArrayList<>(); + + Double receiptQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getReceiptQty).sum(); + + String asnCode = receipts.stream().findFirst().get().getAsnCode(); + + AsnOrder asnOrder = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>() + .eq(AsnOrder::getCode, asnCode)); + if (Objects.isNull(asnOrder)) { + throw new CoolException("鏁版嵁閿欒锛氫富鍗曚笉瀛樺湪锛侊紒"); + } + /**鏀惰揣鏁伴噺绱姞锛�1. 浼氬嚭瓒呮敹鎯呭喌 2. 浼氭湁鏀惰揣涓嶈冻鎯呭喌*/ + Double rcptedQty = asnOrder.getQty() + receiptQty; + asnOrder.setQty(rcptedQty); + + if (!asnOrderMapper.updateById(asnOrder)) { + throw new CoolException("宸叉敹璐ф暟閲忎慨鏀瑰け璐ワ紒锛�"); + } + receipts.forEach(dto -> { Matnr matnr = matnrMapper.selectById(dto.getMatnrId()); if (Objects.isNull(matnr)) { throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪锛侊紒"); } - WarehouseAreasItem item = new WarehouseAreasItem(); - item.setBarcode(dto.getBarcode()) - .setAreaName(areasItem.getAreaName()) - .setAreaId(areasItem.getAreaId()) + if (Objects.isNull(dto.getReceiptQty())) { + 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::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("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒"); +// } + Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty(); + orderItem.setQty(itemRcptQty) + .setSplrBatch(dto.getSplrBatch()) .setStockUnit(dto.getStockUnit()) - .setBatch(SerialRuleUtils.generateRuleCode("sys_receipt_batch", dto)) - .setAnfme(dto.getReceiptQty()) + .setProdTime(dto.getProdTime()); + + 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); + } + }); + }); + if (!fieldsItemService.saveBatch(fieldsItems)) { + throw new CoolException("鎵╁睍瀛楁淇濆瓨澶辫触锛侊紒"); + } + orderItem.setFieldsIndex(uuid16); + } + } + + if (asnOrderItemMapper.updateById(orderItem) < 1) { + throw new CoolException("閫氱煡鍗曟槑缁嗘暟閲忎慨鏀瑰け璐ワ紒锛�"); + } + + WarehouseAreasItem item = new WarehouseAreasItem(); +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// String format = null; +// if (Objects.isNull(dto.getProdTime())) { +// format = dateFormat.format(dto.getProdTime()); +// } + item.setBarcode(dto.getBarcode()) + .setAreaName(areasItem.getName()) + .setAreaId(areasItem.getId()) + .setProdTime(dto.getProdTime()) + .setWeight(dto.getWeigth()) + .setStockUnit(dto.getStockUnit()) + .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto)) + .setAnfme(itemRcptQty) .setSplrBtch(dto.getSplrBatch()) .setMatnrCode(matnr.getCode()) .setMatnrId(matnr.getId()) @@ -169,8 +299,10 @@ .setUnit(dto.getStockUnit()) .setStockUnit(dto.getStockUnit()) .setWeight(matnr.getWeight()) + .setFieldsIndex(orderItem.getFieldsIndex()) .setShipperId(matnr.getShipperId()); //TODO 渚涘簲鍟嗘爣璇嗘湭璁剧疆锛屾爣璇嗙敱PO鍗曚緵搴斿晢缂栫爜杞崲 + allOrders.add(item); }); @@ -178,7 +310,16 @@ 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("鎿嶄綔鎴愬姛"); } @@ -193,13 +334,9 @@ if (Objects.isNull(params.getAsnCode())) { throw new CoolException("閫氱煡鍗曚笉鑳戒负绌猴紒锛�"); } - if (Objects.isNull(params.getBarcode())) { - throw new CoolException("鐗╂枡缂栫爜涓嶈兘涓虹┖锛侊紒"); - } - - AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() + List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>() .eq(AsnOrderItem::getAsnCode, params.getAsnCode()) - .eq(AsnOrderItem::getBarcode, params.getBarcode())); + .eq(!Objects.isNull(params.getTrackCode()) ,AsnOrderItem::getTrackCode, params.getTrackCode())); if (Objects.isNull(asnOrderItem)) { throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); @@ -216,7 +353,7 @@ */ @Override public List<AsnOrder> getAllAsnOrders() { - List<AsnOrder> asnOrders = asnOrderMapper.selectList(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWkType, OrderWorkType.ORDER_PURCHASE_IN.type)); + List<AsnOrder> asnOrders = asnOrderMapper.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWkType, OrderWorkType.ORDER_PURCHASE_IN.type)); return asnOrders; } @@ -233,47 +370,399 @@ } /** - * 鑾峰彇ReceiptDetlsDto + * @author Ryan + * @description 鑾峰彇鎵�鏈夊惎鐢ㄥ姩鎬佸瓧娈� + * @param + * @return + * @time 2025/3/12 09:23 */ - private R getAsnOrderItem(AsnOrderItem asnOrderItem) { - ReceiptDetlsDto detlsDto = new ReceiptDetlsDto(); + @Override + public List<Fields> getDynamicFields() { + return fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1)); + } - detlsDto.setAsnCode(asnOrderItem.getAsnCode()) - .setMatnk(asnOrderItem.getMatnk()) - .setBarcode(asnOrderItem.getBarcode()) - .setPoCode(asnOrderItem.getPoCode()) - .setPurQty(asnOrderItem.getAnfme()) - .setSplrBatch(asnOrderItem.getSplrBatch()); + @Override + public R getDeltByCode(String code) { + return R.ok(asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, code))); + } - Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId()); - if (Objects.isNull(matnr)) { - throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪锛侊紒"); + /** + * @author Ryan + * @description PDA缁勬嫋 + * @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); + } + + /** + * 鎶ユ鍔熻兘 + * @param code + * @param loginUserId + * @return + */ + @Override + public R inspect(String code, Long loginUserId) { + AsnOrder asnOrders = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, code)); + if (Objects.isNull(asnOrders)) { + throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } - //SET 鐗╂枡鏈�澶у瓨鏀炬暟閲� - detlsDto.setMaxQty(matnr.getMaxQty()) - .setMatnrId(matnr.getId()) - .setStockUnit(matnr.getStockUnit()); - QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>() - .eq(QlyInspect::getAsnItemId, asnOrderItem.getId()).eq(QlyInspect::getPoItemId, asnOrderItem.getPoDetlId())); - //set 璐ㄦ缁撴灉 - detlsDto.setInspect(inspect.getStatus$()); - //鑾峰彇褰撳墠搴撳瓨淇℃伅 - StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>() - .eq(StockItem::getAsnItemId, asnOrderItem.getId()) - .eq(StockItem::getMatnrId, asnOrderItem.getMatnrId())); - //SET 褰撳墠搴撳瓨鏁伴噺 - if (Objects.isNull(stockItem)) { - detlsDto.setStockQty(0.0); + InspectDetlDto detlDto = new InspectDetlDto(); + detlDto.setCode(asnOrders.getCode()).setId(asnOrders.getId()).setPoCode(asnOrders.getPoCode()); + List<AsnOrderItem> orderItems = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnCode, code)); + if (orderItems.isEmpty()) { + detlDto.setItems(new ArrayList<>()); } else { - detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty()); + List<InspectItemDto> itemDtos = new ArrayList<>(); + orderItems.forEach(dto -> { + InspectItemDto itemDto = new InspectItemDto(); + if (!Objects.isNull(dto.getMatnrCode())) { + Matnr matnr = matnrMapper.selectOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, dto.getMatnrCode())); + itemDto.setGroup(matnr.getGroupCode()); + } + itemDto.setMaktx(dto.getMaktx()) + .setMatnrCode(dto.getMatnrCode()) + .setPurUnit(dto.getPurUnit()) + .setSuplierCode(dto.getSplrCode()) + .setSuplierName(dto.getSplrName()) + .setPurQty(dto.getPurQty()); + itemDtos.add(itemDto); + }); + detlDto.setItems(itemDtos); } - //鑾峰彇閲囪喘鍗曟槑缁嗕俊鎭� - PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId())); - //SET 骞冲彴琛屽彿 - detlsDto.setPlatformId(purchaseItem.getPlatItemId()); + List<IsptHistories> histories = isptHistoriesMapper.selectList(new LambdaQueryWrapper<IsptHistories>().eq(IsptHistories::getAsnId, asnOrders.getId())); + detlDto.setHistories(histories); + return R.ok(detlDto); + } - return R.ok(detlsDto); + /** + * @author Ryan + * @description 鎻愪氦鎶ユ + * @param + * @return + * @time 2025/4/1 16:47 + */ + @Override + public R confirmIspt(String id) { + if (org.apache.commons.lang3.StringUtils.isBlank(id)) { + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + AsnOrder asnOrder = asnOrderMapper.getById(id); + if (Objects.isNull(asnOrder)) { + throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); + } + List<AsnOrder> orders = new ArrayList<>(); + orders.add(asnOrder); + if (asnOrderMapper.notifyInspect(orders)) { + return R.ok("涓婃姤鎴愬姛锛侊紒"); + }else { + return R.error("涓婃姤澶辫触锛侊紒"); + } + } + + /** + * 閫氳繃鐗╂枡锛岃川妫�鍗曡幏鍙栭渶瑕佽川妫�鍗曟嵁 + * @param params + * @return + */ + @Override + public R checkObjs(CheckObjParams params) { + 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())); + if (Objects.isNull(inspect)) { + throw new CoolException("璐ㄦ鍗曟嵁涓嶅瓨鍦紒!"); + } + QlyIsptItem isptItem = qlyIsptItemService.getOne(new LambdaQueryWrapper<QlyIsptItem>() + .eq(QlyIsptItem::getMatnrCode, params.getMatnrCode()) + .eq(QlyIsptItem::getIspectId, inspect.getId())); + if (Objects.isNull(isptItem)) { + 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); + } + + /** + * 蹇�熻川妫� + * @param params + * @return + */ + @Override + public R checkUpdate(QlyIsptItem params) { + if (Objects.isNull(params.getId())) { + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + IsptItemsParams itemsParams = new IsptItemsParams(); + List<QlyIsptItem> items = new ArrayList<>(); + items.add(params); + itemsParams.setIsptItem(items).setType("0"); + if (qlyIsptItemService.batchUpdate(itemsParams)) { + return R.ok(); + } else { + return R.error("淇濆瓨澶辫触锛侊紒"); + } + } + + /** + * @author Ryan + * @description 浜哄伐涓婃灦 + * @param + * @return + * @time 2025/4/2 16:33 + */ + @Override + public R operateToStock(OpStockParams params) { + if (org.apache.commons.lang3.StringUtils.isBlank(params.getBarcode())) { + throw new CoolException("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�"); + } + if (StringUtils.isBlank(params.getAsnCode())) { + throw new CoolException("鍗曟嵁涓嶈兘涓虹┖锛侊紒"); + } + if (StringUtils.isBlank(params.getMatnrCode())) { + throw new CoolException("鐗╂枡缂栫爜涓嶈兘涓虹┖锛侊紒"); + } + AsnOrder asnOrders = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, params.getAsnCode())); + if (Objects.isNull(asnOrders)) { + throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); + } + List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, params.getBarcode())); + if (!locs.isEmpty()) { + throw new CoolException("鎷栫洏宸蹭娇鐢�"); + } + List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode())); + if (!waitPakins.isEmpty()) { + throw new CoolException("鎷栫洏宸蹭娇鐢�!!"); + } + AsnOrderItem orderItems = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() + .eq(AsnOrderItem::getAsnId, asnOrders.getId()) + .eq(AsnOrderItem::getMatnrCode, params.getMatnrCode())); + if (Objects.isNull(orderItems)) { + return R.ok(null); + } + orderItems.setBarcode(params.getBarcode()); + + return R.ok(orderItems); + } + + /** + * 浜哄伐涓婃灦鍏ュ簱 + * + * @param params + * @param loginUserId + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R publicToStock(PublicToStockParams params, Long loginUserId) { + if (Objects.isNull(params.getLocCode()) || StringUtils.isBlank(params.getLocCode())) { + throw new CoolException("搴撲綅涓嶈兘涓虹┖锛侊紒"); + } + if (Objects.isNull(params.getItemList()) || params.getItemList().isEmpty()) { + throw new CoolException("鍗曟嵁鏄庣粏涓嶈兘涓虹┖锛侊紒"); + } + Long OrderId = params.getItemList().stream().findFirst().get().getAsnId(); + /**鑾峰彇骞冲簱璁㈠崟*/ + 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("鍗曟嵁涓嶅瓨鍦紒锛�"); + } + 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()); + } + } + String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null); + if (StringUtils.isBlank(ruleCode)) { + throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒"); + } + if (!stockService.save(stock)) { + throw new CoolException("搴撳瓨淇濆瓨澶辫触锛侊紒"); + } + Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, params.getLocCode())); + if (Objects.isNull(loc)) { + throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�"); + } + List<StockItem> stockItems = new ArrayList<>(); + params.getItemList().forEach(orderItem -> { + StockItem stockItem = new StockItem(); + BeanUtils.copyProperties(orderItem, stockItem); + stockItem.setAsnItemId(orderItem.getId()) + .setBarcode(orderItem.getBarcode()) + .setLocId(loc.getId()) + .setUpdateBy(loginUserId) + .setId(null) + .setStockId(stock.getId()); + stockItems.add(stockItem); + }); + + if (!stockItemService.saveBatch(stockItems)) { + throw new CoolException("浠诲姟涓婃灦澶辫触锛侊紒"); + } + return R.ok(stock); + } + + /** + * 鑾峰彇浠诲姟淇℃伅 + * @param code + * @return + */ + @Override + public R taskToStock(String code) { + if (StringUtils.isBlank(code)) { + throw new CoolException("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�"); + } + Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, code)); + if (Objects.isNull(task)) { + throw new CoolException("鎷栫洏浠诲姟涓嶅瓨鍦紒锛�"); + } + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); + if (taskItems.isEmpty()) { + throw new CoolException("鎷栫洏浠诲姟鏄庣粏涓嶅瓨鍦紒锛�"); + } + TaskQueueDto queueDto = new TaskQueueDto(); + queueDto.setTask(task).setTaskItems(taskItems); + List<Long> list = taskItems.stream().map(TaskItem::getMatnrId).collect(Collectors.toList()); + List<LocAreaMatRela> matRelas = locAreaMatRelaMapper.selectList(new LambdaQueryWrapper<LocAreaMatRela>().in(LocAreaMatRela::getMatnrId, + list)); + TaskLocAreaDto locAreaDto = new TaskLocAreaDto(); + /**鍒ゆ柇鏄惁涓虹┖*/ + if (matRelas.isEmpty()) { + locAreaDto.setLocs(new ArrayList<>()); + } else { + Long ids = matRelas.stream().map(LocAreaMatRela::getLocId).collect(Collectors.toList()).stream().findFirst().get(); + List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getId, ids)); + if (locs.isEmpty()) { + locAreaDto.setLocs(new ArrayList<>()); + } else { + LocArea locArea = locAreaMapper.selectById(new LambdaQueryWrapper<Loc>().in(Loc::getId, ids)); + if (!Objects.isNull(locArea)) { + locAreaDto.setAreaName(locArea.getName()).setAreaCode(locArea.getCode()).setAreaId(locArea.getId()); + } + locAreaDto.setLocs(locs); + } + } + queueDto.setLocArea(locAreaDto); + + return R.ok(queueDto); + } + + /** + * @Author Ryan + * @param code + * @desc 浠诲姟涓婃灦 + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R taskGetLocs(String code) throws Exception { + if (StringUtils.isBlank(code)) { + throw new CoolException("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�"); + } + Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, code)); + if (Objects.isNull(task)) { + throw new CoolException("鎷栫洏浠诲姟涓嶅瓨鍦紒锛�"); + } + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); + if (!taskItems.isEmpty()) { + throw new CoolException("鎷栫洏浠诲姟鏄庣粏涓嶅瓨鍦紒锛�"); + } + List<Task> tasks = new ArrayList<>(); + tasks.add(task); + + taskService.completeTask(tasks); + + return R.ok(); + } + + /** + * 鑾峰彇ReceiptDetlsDtos + */ + private R getAsnOrderItem(List<AsnOrderItem> items) { + List<ReceiptDetlsDto> detlsDtos = new ArrayList<>(); + items.forEach(asnOrderItem -> { + ReceiptDetlsDto detlsDto = new ReceiptDetlsDto(); + + detlsDto.setAsnCode(asnOrderItem.getAsnCode()) + .setMaktx(asnOrderItem.getMaktx()) + .setBarcode(asnOrderItem.getTrackCode()) + .setQty(asnOrderItem.getQty()) + .setPoCode(asnOrderItem.getPoCode()) + .setAnfme(asnOrderItem.getAnfme()) + .setPurQty(asnOrderItem.getPurQty()) + .setSplrBatch(asnOrderItem.getSplrBatch()); + + Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId()); + if (Objects.isNull(matnr)) { + throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪锛侊紒"); + } + //SET 鐗╂枡鏈�澶у瓨鏀炬暟閲� + detlsDto.setMaxQty(matnr.getMaxQty()) + .setMatnrId(matnr.getId()) + .setStockUnit(matnr.getStockUnit()); + QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>() + .eq(QlyInspect::getAsnId, asnOrderItem.getAsnId())); + if (!Objects.isNull(inspect)) { + //set 璐ㄦ缁撴灉 + detlsDto.setInspect(inspect.getStatus$()); + } + //鑾峰彇褰撳墠搴撳瓨淇℃伅 + StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>() + .eq(StockItem::getAsnItemId, asnOrderItem.getId()) + .eq(StockItem::getMatnrId, asnOrderItem.getMatnrId())); + //SET 褰撳墠搴撳瓨鏁伴噺 + if (Objects.isNull(stockItem)) { + detlsDto.setStockQty(0.0); + } else { + detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty()); + } + + if (!Objects.isNull(asnOrderItem.getPoDetlId())) { + //鑾峰彇閲囪喘鍗曟槑缁嗕俊鎭� + PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId())); + if (Objects.isNull(purchaseItem)) { + //SET 骞冲彴琛屽彿 + detlsDto.setPlatformId(purchaseItem.getPlatItemId()); + } + } + + detlsDtos.add(detlsDto); + }); + + return R.ok(detlsDtos); } -- Gitblit v1.9.1