From fa5b8238f31749cc4b0469df317b5849da08a419 Mon Sep 17 00:00:00 2001 From: verou <857149855@qq.com> Date: 星期日, 30 三月 2025 14:53:15 +0800 Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop --- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 365 +++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 315 insertions(+), 50 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 b2bc903..4d4d0c4 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,32 +4,44 @@ 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.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.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.*; 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.FieldsService; import com.vincent.rsf.server.system.service.UserLoginService; +import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.tika.utils.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.*; /** @@ -52,11 +64,14 @@ private UserMapper userService; @Autowired private UserLoginService userLoginService; - @Autowired private WarehouseAreasItemService warehouseAreasItemService; + @Autowired + private WarehouseAreasService warehouseAreasService; @Resource private AsnOrderItemMapper asnOrderItemMapper; + @Resource + private AsnOrderMapper asnOrderMapper; @Resource private MatnrMapper matnrMapper; @Resource @@ -65,6 +80,23 @@ private StockItemMapper stockItemMapper; @Resource private PurchaseItemMapper purchaseItemMapper; + @Resource + private FieldsMapper fieldsMapper; + + @Autowired + private AsnOrderLogService asnOrderLogService; + + @Autowired + private WaitPakinService waitPakinService; + + @Autowired + private WaitPakinItemService waitPakinItemService; + + @Autowired + private AsnOrderItemLogService asnOrderItemLogService; + + @Autowired + private FieldsItemService fieldsItemService; /** @@ -114,47 +146,12 @@ if (StringUtils.isEmpty(barcode)) { return R.error("鏍囩鐮佷笉鑳戒负绌猴紒锛�"); } - ReceiptDetlsDto detlsDto = new ReceiptDetlsDto(); - 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("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); } - detlsDto.setAsnCode(asnOrderItem.getAsnCode()) - .setMatnk(asnOrderItem.getMatnk()) - .setBarcode(asnOrderItem.getBarcode()) - .setPoCode(asnOrderItem.getPoCode()) - .setPurQty(asnOrderItem.getAnfme()) - .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::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); - } else { - detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty()); - } - - //鑾峰彇閲囪喘鍗曟槑缁嗕俊鎭� - PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId())); - //SET 骞冲彴琛屽彿 - detlsDto.setPlatformId(purchaseItem.getPlatItemId()); - - return R.ok(detlsDto); + return getAsnOrderItem(asnOrderItem); } /** @@ -173,33 +170,112 @@ 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.selectOne(new LambdaQueryWrapper<AsnOrder>() + .eq(AsnOrder::getCode, asnCode)); + if (Objects.isNull(asnOrder)) { + throw new CoolException("鏁版嵁閿欒锛氫富鍗曚笉瀛樺湪锛侊紒"); + } + asnOrder.setQty(receiptQty); + + if (asnOrderMapper.updateById(asnOrder) < 1) { + throw new CoolException("宸叉敹璐ф暟閲忎慨鏀瑰け璐ワ紒锛�"); + } + receipts.forEach(dto -> { 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("鏀惰揣鏁伴噺涓嶈兘澶т簬閲囪喘鏁伴噺锛侊紒"); + } + + AsnOrderItem orderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() + .eq(AsnOrderItem::getAsnCode, asnCode) + .eq(AsnOrderItem::getMatnrId, dto.getMatnrId())); + if (Objects.isNull(orderItem)) { + throw new CoolException("閫氱煡鍗曟槑缁嗕笉瀛樺湪锛侊紒"); + } + orderItem.setQty(dto.getReceiptQty()) + .setProdTime(dto.getProdTime()); + + 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.getAreaName()) - .setAreaId(areasItem.getAreaId()) + .setAreaName(areasItem.getName()) + .setAreaId(areasItem.getId()) + .setProdTime(dto.getProdTime()) + .setWeight(dto.getWeigth()) .setStockUnit(dto.getStockUnit()) - //TODO 缂栫爜瑙勫垯鐢熸垚鎵规 (鐗╂枡鍙�+鏃ユ湡) - .setBatch(null) + .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto)) .setAnfme(dto.getReceiptQty()) .setSplrBtch(dto.getSplrBatch()) .setMatnrCode(matnr.getCode()) .setMatnrId(matnr.getId()) .setMatnrName(matnr.getName()) - //TODO 鍏ュ簱鍗曚綅鎹㈢畻 + //搴撳瓨鍗曚綅涓烘渶灏忓崟浣� .setUnit(dto.getStockUnit()) .setStockUnit(dto.getStockUnit()) .setWeight(matnr.getWeight()) .setShipperId(matnr.getShipperId()); - //TODO 渚涘簲鍟嗘爣璇嗘湭璁剧疆 + //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); }); @@ -207,6 +283,195 @@ 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("鎿嶄綔鎴愬姛"); } + + /** + * @author Ryan + * @description 鍒犻櫎鍘熶富鍗曞強鏄庣粏锛屽姞鍏ュ巻鍙叉。 + * @param + * @return + * @time 2025/3/19 19:53 + */ + private void operateOrderLogs(AsnOrder asnOrder) { + if (asnOrderMapper.deleteById(asnOrder.getId()) < 1) { + 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 + * @description 鍏跺畠鏀惰揣 + * @param params + * @return + */ + @Override + public R otherReceipt(OtherReceiptParams params) { + if (Objects.isNull(params.getAsnCode())) { + throw new CoolException("閫氱煡鍗曚笉鑳戒负绌猴紒锛�"); + } + List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>() + .eq(AsnOrderItem::getAsnCode, params.getAsnCode()) + .eq(!Objects.isNull(params.getTrackCode()) ,AsnOrderItem::getTrackCode, params.getTrackCode())); + + if (Objects.isNull(asnOrderItem)) { + throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); + } + + return getAsnOrderItem(asnOrderItem); + + } + + /** + * @author Ryan + * @description 鑾峰彇鎵�鏈夐�氱煡鍗� + * @return + */ + @Override + public List<AsnOrder> getAllAsnOrders() { + List<AsnOrder> asnOrders = asnOrderMapper.selectList(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWkType, OrderWorkType.ORDER_PURCHASE_IN.type)); + return asnOrders; + } + + /** + * @author Ryan + * @description 鑾峰彇鏀惰揣鍖� + * @param + * @return + * @time 2025/3/11 10:12 + */ + @Override + public R getReceiptAreas() { + return R.ok(warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_RECEIPT.type))); + } + + /** + * @author Ryan + * @description 鑾峰彇鎵�鏈夊惎鐢ㄥ姩鎬佸瓧娈� + * @param + * @return + * @time 2025/3/12 09:23 + */ + @Override + public List<Fields> getDynamicFields() { + return fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1)); + } + + @Override + public R getDeltByCode(String code) { + return R.ok(asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, code))); + } + + /** + * @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); + } + + /** + * 鑾峰彇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.getBarcode()) + .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::getAsnItemId, asnOrderItem.getId())); + 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