From 54f12f528d78dd54f6813fa54d8f65c28cdd7984 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 21 三月 2025 15:31:32 +0800
Subject: [PATCH] 1
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 245 ++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 200 insertions(+), 45 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 b740cd0..a00a0ec 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,5 +1,6 @@
package com.vincent.rsf.server.api.service.impl;
+import com.alibaba.druid.sql.visitor.functions.If;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
@@ -12,29 +13,37 @@
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.entity.*;
import com.vincent.rsf.server.manager.mapper.*;
+import com.vincent.rsf.server.manager.service.AsnOrderItemLogService;
+import com.vincent.rsf.server.manager.service.AsnOrderLogService;
import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
import com.vincent.rsf.server.manager.service.WarehouseAreasService;
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.util.*;
/**
@@ -73,6 +82,17 @@
private StockItemMapper stockItemMapper;
@Resource
private PurchaseItemMapper purchaseItemMapper;
+ @Resource
+ private FieldsMapper fieldsMapper;
+
+ @Autowired
+ private AsnOrderLogService asnOrderLogService;
+
+ @Autowired
+ private AsnOrderItemLogService asnOrderItemLogService;
+
+ @Autowired
+ private FieldsItemService fieldsItemService;
/**
@@ -122,7 +142,7 @@
if (StringUtils.isEmpty(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::getBarcode, barcode));
if (Objects.isNull(asnOrderItem)) {
throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
}
@@ -146,23 +166,62 @@
if (Objects.isNull(params.getWhAreaId())) {
throw new CoolException("搴撳尯鏍囪瘑涓嶈兘涓虹┖锛侊紒");
}
+
+
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() < dto.getPurQty()) {
+ 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());
+
+ if (asnOrderItemMapper.updateById(orderItem) < 1) {
+ throw new CoolException("閫氱煡鍗曟槑缁嗘暟閲忎慨鏀瑰け璐ワ紒锛�");
+ }
+
WarehouseAreasItem item = new WarehouseAreasItem();
item.setBarcode(dto.getBarcode())
.setAreaName(areasItem.getName())
.setAreaId(areasItem.getId())
.setStockUnit(dto.getStockUnit())
- .setBatch(SerialRuleUtils.generateRuleCode("sys_receipt_batch", dto))
+ .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto))
.setAnfme(dto.getReceiptQty())
.setSplrBtch(dto.getSplrBatch())
.setMatnrCode(matnr.getCode())
@@ -175,6 +234,33 @@
.setShipperId(matnr.getShipperId());
//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);
});
@@ -182,8 +268,56 @@
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);
+
+ 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);
+ 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
@@ -196,7 +330,7 @@
if (Objects.isNull(params.getAsnCode())) {
throw new CoolException("閫氱煡鍗曚笉鑳戒负绌猴紒锛�");
}
- AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>()
+ List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>()
.eq(AsnOrderItem::getAsnCode, params.getAsnCode())
.eq(!Objects.isNull(params.getBarcode()) ,AsnOrderItem::getBarcode, params.getBarcode()));
@@ -232,49 +366,70 @@
}
/**
- * 鑾峰彇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());
+ /**
+ * 鑾峰彇ReceiptDetlsDtos
+ */
+ private R getAsnOrderItem(List<AsnOrderItem> items) {
+ List<ReceiptDetlsDto> detlsDtos = new ArrayList<>();
+ items.forEach(asnOrderItem -> {
+ ReceiptDetlsDto detlsDto = new ReceiptDetlsDto();
- 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()));
- 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());
- }
+ detlsDto.setAsnCode(asnOrderItem.getAsnCode())
+ .setMaktx(asnOrderItem.getMaktx())
+ .setBarcode(asnOrderItem.getBarcode())
+ .setPoCode(asnOrderItem.getPoCode())
+ .setPurQty(asnOrderItem.getAnfme())
+ .setSplrBatch(asnOrderItem.getSplrBatch());
- //鑾峰彇閲囪喘鍗曟槑缁嗕俊鎭�
- PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId()));
- //SET 骞冲彴琛屽彿
- detlsDto.setPlatformId(purchaseItem.getPlatItemId());
+ 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());
+ }
- return R.ok(detlsDto);
+ 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