|
@@ -2,7 +2,8 @@ package com.fjhx.wms.service.stock.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.alibaba.fastjson2.JSONWriter;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -15,12 +16,14 @@ import com.fjhx.wms.entity.arrival.po.ArrivalStockRecordsDetails;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockWaitDto;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockWaitSelectDto;
|
|
|
+import com.fjhx.wms.entity.stock.emums.JournalType;
|
|
|
import com.fjhx.wms.entity.stock.emums.StockWaitType;
|
|
|
import com.fjhx.wms.entity.stock.po.*;
|
|
|
import com.fjhx.wms.entity.stock.vo.StockWaitDetailsVo;
|
|
|
import com.fjhx.wms.entity.stock.vo.StockWaitVo;
|
|
|
import com.fjhx.wms.entity.warehouse.po.Warehouse;
|
|
|
import com.fjhx.wms.mapper.stock.StockWaitMapper;
|
|
|
+import com.fjhx.wms.service.WmsService;
|
|
|
import com.fjhx.wms.service.arrival.ArrivalStockRecordsDetailsService;
|
|
|
import com.fjhx.wms.service.arrival.ArrivalStockRecordsService;
|
|
|
import com.fjhx.wms.service.stock.*;
|
|
@@ -52,29 +55,34 @@ import java.util.stream.Collectors;
|
|
|
@Service
|
|
|
public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait> implements StockWaitService {
|
|
|
@Autowired
|
|
|
- ProductInfoService productInfoService;
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
@Autowired
|
|
|
- StockService stockService;
|
|
|
+ private StockService stockService;
|
|
|
@Autowired
|
|
|
- StockJournalService stockJournalService;
|
|
|
+ private StockJournalService stockJournalService;
|
|
|
@Autowired
|
|
|
- StockJournalDetailsService stockJournalDetailsService;
|
|
|
+ private StockJournalDetailsService stockJournalDetailsService;
|
|
|
@Autowired
|
|
|
- StockWaitDetailsService stockWaitDetailsService;
|
|
|
+ private StockWaitDetailsService stockWaitDetailsService;
|
|
|
@Autowired
|
|
|
- WarehouseService warehouseService;
|
|
|
+ private WarehouseService warehouseService;
|
|
|
@Autowired
|
|
|
- ArrivalStockRecordsService arrivalStockRecordsService;
|
|
|
+ private ArrivalStockRecordsService arrivalStockRecordsService;
|
|
|
@Autowired
|
|
|
- ArrivalStockRecordsDetailsService arrivalStockRecordsDetailsService;
|
|
|
+ private ArrivalStockRecordsDetailsService arrivalStockRecordsDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private WmsService wmsService;
|
|
|
+ @Autowired
|
|
|
+ private StockFrozenService stockFrozenService;
|
|
|
|
|
|
@Override
|
|
|
public Page<StockWaitVo> getPage(StockWaitSelectDto dto) {
|
|
|
IWrapper<StockWait> wrapper = getWrapper();
|
|
|
- wrapper.orderByDesc("sw", StockWait::getId);
|
|
|
//过滤入库/出库
|
|
|
wrapper.eq(StockWait::getType, dto.getType());
|
|
|
+ wrapper.eq("sw", StockWait::getBusinessType, dto.getBusinessType());
|
|
|
wrapper.eq(StockWait::getBusinessCode, dto.getKeyword());
|
|
|
+ wrapper.orderByDesc("sw", StockWait::getId);
|
|
|
Page<StockWaitVo> page = this.baseMapper.getPage1(dto.getPage(), wrapper);
|
|
|
|
|
|
List<StockWaitVo> records = page.getRecords();
|
|
@@ -128,7 +136,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
}
|
|
|
JSONObject json = JSONObject.parseObject(victoriatouristJson);
|
|
|
json.put("receiptWarehouseName", warehousesMap.get(json.getLong("receiptWarehouseId")));
|
|
|
- stockWaitVo.setVictoriatouristJson(json.toJSONString());
|
|
|
+ stockWaitVo.setVictoriatouristJson(json.toJSONString(JSONWriter.Feature.WriteLongAsString));
|
|
|
}
|
|
|
|
|
|
return page;
|
|
@@ -196,40 +204,28 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
public void addByWdly(StockWaitDto stockWaitDto) {
|
|
|
List<Stock> stockList = new ArrayList<>();
|
|
|
|
|
|
- List<StockWaitDetails> stockWaitDetailsList = stockWaitDto.getStockWaitDetailsList();
|
|
|
- List<Long> dids = stockWaitDetailsList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
|
|
|
- Map<Long, StockWaitDetails> stockWaitDetailsMap = stockWaitDetailsList.stream().collect(Collectors.toMap(StockWaitDetails::getId, Function.identity()));
|
|
|
- List<StockWaitDetails> stockWaitDetails = stockWaitDetailsService.listByIds(dids);
|
|
|
+ List<StockWaitDetails> stockWaitDetailsDtoList = stockWaitDto.getStockWaitDetailsList();
|
|
|
+ List<Long> dids = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
|
|
|
+ Map<Long, StockWaitDetails> stockWaitDetailsMap = stockWaitDetailsDtoList.stream().collect(Collectors.toMap(StockWaitDetails::getId, Function.identity()));
|
|
|
+ List<StockWaitDetails> stockWaitDetailss = stockWaitDetailsService.listByIds(dids);
|
|
|
|
|
|
//已经完全入库数量统计
|
|
|
Integer statusFlag = 0;
|
|
|
- for (StockWaitDetails stockWaitDetail : stockWaitDetails) {
|
|
|
+ for (StockWaitDetails stockWaitDetail : stockWaitDetailss) {
|
|
|
StockWaitDetails temp = stockWaitDetailsMap.get(stockWaitDetail.getId());
|
|
|
//更新已入库数量
|
|
|
BigDecimal receiptQuantity = stockWaitDetail.getReceiptQuantity() == null ? BigDecimal.ZERO : stockWaitDetail.getReceiptQuantity();
|
|
|
stockWaitDetail.setReceiptQuantity(receiptQuantity.add(temp.getQuantity()));
|
|
|
-// if (stockWaitDetail.getReceiptQuantity().compareTo(stockWaitDetail.getQuantity()) > 0) {
|
|
|
-// throw new ServiceException("入库数量+已入库数量不能大于待采购数量");
|
|
|
-// }
|
|
|
|
|
|
//计算已经完全入库的数量
|
|
|
if (stockWaitDetail.getReceiptQuantity().compareTo(stockWaitDetail.getQuantity()) >= 0) {
|
|
|
statusFlag++;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- //操作库存
|
|
|
- for (StockWaitDetails waitDetails : stockWaitDetailsList) {
|
|
|
- Stock stock = new Stock();
|
|
|
- stock.setQuantity(waitDetails.getQuantity());
|
|
|
- stock.setProductId(waitDetails.getProductId());
|
|
|
- stockList.add(stock);
|
|
|
- }
|
|
|
-
|
|
|
- stockWaitDetailsService.updateBatchById(stockWaitDetails);
|
|
|
+ stockWaitDetailsService.updateBatchById(stockWaitDetailss);
|
|
|
//修改待入库状态
|
|
|
StockWait stockWait = getById(stockWaitDto.getId());
|
|
|
- if (statusFlag == stockWaitDetails.size()) {
|
|
|
+ if (statusFlag == stockWaitDetailss.size()) {
|
|
|
stockWait.setStatus(2);//入库完成
|
|
|
} else {
|
|
|
stockWait.setStatus(1);//部分入库
|
|
@@ -237,13 +233,21 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
String victoriatouristJson = stockWait.getVictoriatouristJson();
|
|
|
JSONObject json = ObjectUtil.isNotEmpty(victoriatouristJson) ? JSONObject.parseObject(victoriatouristJson) : new JSONObject();
|
|
|
json.put("receiptWarehouseId", stockWaitDto.getWarehouseId());
|
|
|
- stockWait.setVictoriatouristJson(json.toJSONString());
|
|
|
+ stockWait.setVictoriatouristJson(json.toJSONString(JSONWriter.Feature.WriteLongAsString));
|
|
|
updateById(stockWait);
|
|
|
|
|
|
+ //操作库存
|
|
|
+ for (StockWaitDetails waitDetails : stockWaitDetailsDtoList) {
|
|
|
+ Stock stock = new Stock();
|
|
|
+ stock.setQuantity(waitDetails.getQuantity());
|
|
|
+ stock.setProductId(waitDetails.getProductId());
|
|
|
+ stockList.add(stock);
|
|
|
+ }
|
|
|
//创建出入库记录
|
|
|
+ Integer businessType = stockWait.getBusinessType();
|
|
|
StockJournal stockJournal = new StockJournal();
|
|
|
- stockJournal.setOpType(stockWaitDto.getType() == 1 ? 1 : 2);
|
|
|
- stockJournal.setType(stockWaitDto.getType() == 1 ? 4 : 5);
|
|
|
+ stockJournal.setOpType(stockWaitDto.getType());
|
|
|
+ stockJournal.setType(getStockJournalType(businessType));
|
|
|
stockJournal.setCode(stockWait.getType() == 1 ? CodeEnum.SIN_CODE.getCode() : CodeEnum.SOUT_CODE.getCode());
|
|
|
stockJournal.setWarehouseId(stockWaitDto.getWarehouseId());
|
|
|
stockJournal.setBusinessId(stockWaitDto.getId());
|
|
@@ -255,7 +259,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
stockJournalDetailsService.saveBatch(stockJournalDetailsList);
|
|
|
|
|
|
//如果是采购到货 创建待质检记录
|
|
|
- if (stockWait.getBusinessType() == StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType()) {
|
|
|
+ if (StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType().equals(businessType)) {
|
|
|
//创建采购到货入库记录
|
|
|
ArrivalStockRecords arrivalStockRecords = new ArrivalStockRecords();
|
|
|
arrivalStockRecords.setStockWaitId(stockWait.getId());
|
|
@@ -265,7 +269,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
arrivalStockRecordsService.save(arrivalStockRecords);
|
|
|
//创建入库明细
|
|
|
List<ArrivalStockRecordsDetails> arrivalStockRecordsDetailsList = new ArrayList<>();
|
|
|
- for (StockWaitDetails waitDetails : stockWaitDetailsList) {
|
|
|
+ for (StockWaitDetails waitDetails : stockWaitDetailsDtoList) {
|
|
|
ArrivalStockRecordsDetails arrivalStockRecordsDetails = new ArrivalStockRecordsDetails();
|
|
|
arrivalStockRecordsDetails.setArrivalStockRecordsId(arrivalStockRecords.getId());
|
|
|
arrivalStockRecordsDetails.setProductInfoId(waitDetails.getProductId());
|
|
@@ -275,6 +279,23 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
}
|
|
|
arrivalStockRecordsDetailsService.saveBatch(arrivalStockRecordsDetailsList);
|
|
|
}
|
|
|
+
|
|
|
+ //销售订单出库
|
|
|
+ if (StockWaitType.SALE_ORDER_OUT.getDetailType().equals(businessType)) {
|
|
|
+ wmsService.outbounds(stockWaitDto);
|
|
|
+ }
|
|
|
+
|
|
|
+ //生产任务待出库
|
|
|
+ if (StockWaitType.PRODUCTION_TASK_OUT.getDetailType().equals(businessType)) {
|
|
|
+ for (StockWaitDetails stockWaitDetailsDto : stockWaitDetailsDtoList) {
|
|
|
+ StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(stockWaitDetailsDto.getId());
|
|
|
+ //减少冻结库存
|
|
|
+ StockFrozen stockFrozen = stockFrozenService.getOne(q -> q.eq(StockFrozen::getProductId, stockWaitDetails.getProductId()));
|
|
|
+ BigDecimal subtract = stockFrozen.getFrozenQuantity().subtract(stockWaitDetailsDto.getQuantity());
|
|
|
+ stockFrozen.setFrozenQuantity(subtract);
|
|
|
+ stockFrozenService.updateById(stockFrozen);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -287,4 +308,34 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
this.removeById(id);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据待出入库业务类型获取对应的出入库记录类型
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Integer getStockJournalType(int businessType) {
|
|
|
+ if (StockWaitType.BORDER_OF_LINE_IN.getDetailType().equals(businessType)) {
|
|
|
+ //线边回仓库
|
|
|
+ return JournalType.BORDER_OF_LINE_IN.getDetailType();
|
|
|
+ } else if (StockWaitType.COMPLETION_IN.getDetailType().equals(businessType)) {
|
|
|
+ //完工入库
|
|
|
+ return JournalType.COMPLETION_IN.getDetailType();
|
|
|
+ } else if (StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType().equals(businessType)) {
|
|
|
+ //采购到货
|
|
|
+ return JournalType.PURCHASE_ARRIVAL_IN.getDetailType();
|
|
|
+ } else if (StockWaitType.BACK_OUT.getDetailType().equals(businessType)) {
|
|
|
+ //退货出货
|
|
|
+ return JournalType.BACK_OUT.getDetailType();
|
|
|
+ } else if (StockWaitType.SALE_ORDER_OUT.getDetailType().equals(businessType)) {
|
|
|
+ //销售订单出库
|
|
|
+ return JournalType.SALES_OUT.getDetailType();
|
|
|
+ } else if (StockWaitType.PRODUCTION_TASK_OUT.getDetailType().equals(businessType)) {
|
|
|
+ //生产任务待出库
|
|
|
+ return JournalType.PRODUCTION_TASK_OUT.getDetailType();
|
|
|
+ } else {
|
|
|
+ throw new ServiceException("未知待出入库业务类型");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|