|
|
@@ -0,0 +1,282 @@
|
|
|
+package com.dk.mdm.service.ivt;
|
|
|
+
|
|
|
+import com.dk.common.infrastructure.annotaiton.Pagination;
|
|
|
+import com.dk.common.infrastructure.constant.Constant;
|
|
|
+import com.dk.common.model.pojo.PageList;
|
|
|
+import com.dk.common.response.ResponseResultUtil;
|
|
|
+import com.dk.common.response.ResponseResultVO;
|
|
|
+import com.dk.mdm.infrastructure.convert.ivt.TransferConvert;
|
|
|
+import com.dk.mdm.infrastructure.convert.ivt.TransferItemConvert;
|
|
|
+import com.dk.mdm.mapper.ivt.InboundItemMapper;
|
|
|
+import com.dk.mdm.mapper.ivt.TransferItemMapper;
|
|
|
+import com.dk.mdm.model.pojo.ivt.CheckItem;
|
|
|
+import com.dk.mdm.model.pojo.ivt.InboundItem;
|
|
|
+import com.dk.mdm.model.pojo.ivt.Transfer;
|
|
|
+import com.dk.mdm.mapper.ivt.TransferMapper;
|
|
|
+import com.dk.common.service.BaseService;
|
|
|
+import com.dk.common.mapper.BaseMapper;
|
|
|
+import com.dk.mdm.model.pojo.ivt.TransferItem;
|
|
|
+import com.dk.mdm.model.query.ivt.TransferQuery;
|
|
|
+import com.dk.mdm.model.response.ivt.InboundItemResponse;
|
|
|
+import com.dk.mdm.model.response.ivt.TransferResponse;
|
|
|
+import com.dk.mdm.model.vo.ivt.*;
|
|
|
+import com.dk.mdm.service.common.CommonService;
|
|
|
+import com.dk.mdm.service.ivt.inbound.InboundCheckService;
|
|
|
+import com.dk.mdm.service.ivt.inbound.InboundItemService;
|
|
|
+import com.dk.mdm.service.ivt.outbound.OutboundCheckService;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Transactional
|
|
|
+public class TransferService extends BaseService<Transfer> {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseMapper<Transfer> getRepository() {
|
|
|
+ return transferMapper;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TransferMapper transferMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TransferItemMapper transferItemMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TransferConvert transferConvert;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TransferItemConvert transferItemConvert;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CommonService commonService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private InboundCheckService inboundCheckService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OutboundCheckService outboundCheckService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private InboundItemService inboundItemService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private InboundItemMapper inboundItemMapper;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 重写主键
|
|
|
+ * @author : 宋扬
|
|
|
+ * @date : 2023/3/27 10:39
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String getPrimaryKey() {
|
|
|
+ return "transfer_id";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 查询一览信息
|
|
|
+ * @author : 宋扬
|
|
|
+ * @date : 2024/4/2 9:24
|
|
|
+ */
|
|
|
+ @Pagination
|
|
|
+ public ResponseResultVO<PageList<TransferResponse>> selectByCond(TransferQuery transferQuery) {
|
|
|
+ return super.mergeListWithCount(transferQuery, transferMapper.selectByCond(transferQuery),
|
|
|
+ transferMapper.countByCond(transferQuery));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc : 新建调整单
|
|
|
+ * @author : 宋扬
|
|
|
+ * @date : 2024/3/27 11:08
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = {Exception.class})
|
|
|
+ public ResponseResultVO<?> insert(TransferVO transferVO) {
|
|
|
+ // 转化实体
|
|
|
+ Transfer transfer = transferConvert.convertToPo(transferVO);
|
|
|
+ try {
|
|
|
+ Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.Transfer.getName(), true);
|
|
|
+
|
|
|
+ //判断调整类型 仓库调整
|
|
|
+ if(transferVO.getTransferType().equals(Constant.transferType.CHECK_TYPE_WH.getName())){
|
|
|
+ // 插入仓库调整单的实体
|
|
|
+ transfer.setTransferId(codeMap.get("outId").toString()).setTransferNo(codeMap.get("outNote").toString())
|
|
|
+ .setTransferDate(LocalDate.now()).setStaffId(transferVO.getStaffId()).setOrgId(transferVO.getOrgId())
|
|
|
+ .setTransferType(transferVO.getTransferType()).setMakeStaff(transferVO.getMakeStaff())
|
|
|
+ .setMakeTime(LocalDateTime.now()).setRemarks(transferVO.getRemarks())
|
|
|
+ .setOWhId(transferVO.getOWhId()).setWhId(transferVO.getWhId());
|
|
|
+
|
|
|
+ }else{
|
|
|
+ // 插入非标号调整单的实体
|
|
|
+ transfer.setTransferId(codeMap.get("outId").toString()).setTransferNo(codeMap.get("outNote").toString())
|
|
|
+ .setTransferDate(LocalDate.now()).setStaffId(transferVO.getStaffId()).setOrgId(transferVO.getOrgId())
|
|
|
+ .setTransferType(transferVO.getTransferType()).setMakeStaff(transferVO.getMakeStaff())
|
|
|
+ .setMakeTime(LocalDateTime.now()).setRemarks(transferVO.getRemarks())
|
|
|
+ .setONonStdCode(transferVO.getONonStdCode()).setNonStdCode(transferVO.getNonStdCode());
|
|
|
+ }
|
|
|
+ // 先插调整单主表数据
|
|
|
+ super.insert(transfer);
|
|
|
+ // 因为需要获取目标inv_id,所以必须先调用入库接口。
|
|
|
+ // 定义入库Map
|
|
|
+ Map<String, Object> inboundMap= new HashMap<>();
|
|
|
+ // 定义出库Map
|
|
|
+ Map<String, Object> outboundCheckMap= new HashMap<>();
|
|
|
+ if (transferVO.getItemList() != null && transferVO.getItemList().size() > 0){
|
|
|
+ // 计算总调整量
|
|
|
+ BigDecimal transferQtySum = transferVO.getItemList().stream().map(TransferItemVO::getTransferQty).reduce(BigDecimal.ZERO, BigDecimal::add)
|
|
|
+ .setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ // 计算总入库金额
|
|
|
+ BigDecimal intoingAmtSum = transferVO.getItemList().stream().map(TransferItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add)
|
|
|
+ .setScale(6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ // 获取入库表实体
|
|
|
+ InboundVO inboundVO = new InboundVO();
|
|
|
+ List<InboundItem> inboundItemList=new ArrayList<>();
|
|
|
+ // 获取出库表实体
|
|
|
+ OutboundVO outboundVO = new OutboundVO();
|
|
|
+ List<OutboundItemVO> outboundItemVOList=new ArrayList<>();
|
|
|
+ // 仓库调整
|
|
|
+ if(transferVO.getTransferType().equals(Constant.transferType.CHECK_TYPE_WH.getName())) {
|
|
|
+ // 赋值入库实体
|
|
|
+ inboundVO.setOrgId(transferVO.getOrgId()).setStaffId(transferVO.getStaffId())
|
|
|
+ .setMakeStaff(transferVO.getMakeStaff()).setIntoingQty(transferQtySum)
|
|
|
+ .setFromId(transfer.getTransferId()).setFromNo(transfer.getTransferNo())
|
|
|
+ .setMakeTime(LocalDateTime.now()).setIntoDate(LocalDate.now()).setWhId(transferVO.getWhId())
|
|
|
+ .setFlgAutoHandle(true).setIntoingAmt(intoingAmtSum)
|
|
|
+ .setIntoStatus(Constant.InventoryDocCode.MOVE.getTableName());
|
|
|
+ // 赋值出库实体
|
|
|
+ outboundVO.setOrgId(transferVO.getOrgId()).setStaffId(transferVO.getStaffId())
|
|
|
+ .setMakeStaff(transferVO.getMakeStaff()).setOutingQty(transferQtySum)
|
|
|
+ .setFromId(transfer.getTransferId()).setFromNo(transfer.getTransferNo())
|
|
|
+ .setMakeTime(LocalDateTime.now()).setOutDate(LocalDate.now())
|
|
|
+ .setOutingAmt(BigDecimal.ZERO).setOutStatus(Constant.InventoryDocCode.MOVE.getTableName());
|
|
|
+ // 获取入库明细实体
|
|
|
+ for (TransferItemVO transferItemVO : transferVO.getItemList()) {
|
|
|
+ // 赋值入库明细实体
|
|
|
+ InboundItem inboundItem=new InboundItem();
|
|
|
+ inboundItem.setIntoingQty(transferItemVO.getTransferQty()).setFromId(transfer.getTransferId())
|
|
|
+ .setIntoingAmt(transferItemVO.getIntoingAmt()).setPriceInto(transferItemVO.getPriceInto())
|
|
|
+ .setWhId(transferItemVO.getWhId()).setSkuId(transferItemVO.getSkuId())
|
|
|
+ .setNonStdCode(transferItemVO.getONonStdCode()).setItemIndex(transferItemVO.getItemIndex());
|
|
|
+ inboundItemList.add(inboundItem);
|
|
|
+ }
|
|
|
+ // 赋值入库接口参数 总表和明细
|
|
|
+ inboundMap.put("total", inboundVO);
|
|
|
+ inboundMap.put("detail", inboundItemList);
|
|
|
+ // 调用入库接口
|
|
|
+ InboundVO inboundTransferVO = inboundCheckService.checkInboundInsert(inboundMap);
|
|
|
+ // 如果库存接口返回成功,则插入调整单明细数据
|
|
|
+ if (transferVO.getItemList() != null && transferVO.getItemList().size() > 0) {
|
|
|
+ for (TransferItemVO transferItemVO : transferVO.getItemList()) {
|
|
|
+ // 转换
|
|
|
+ TransferItem transferItem = transferItemConvert.convertToPo(transferItemVO);
|
|
|
+ // 在入库接口中获取入库明细数据
|
|
|
+ List<InboundItemVO> inboundItemVOList = inboundTransferVO.getItemList().stream()
|
|
|
+ .filter(it -> it.getItemIndex().equals(transferItemVO.getItemIndex())).collect(Collectors.toList());
|
|
|
+ // 通过入库明细数据的item_id查询出inv_id
|
|
|
+ InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVOList.get(0).getItemId());
|
|
|
+ // 获取调整主表uuid
|
|
|
+ transferItem.setTransferId(transfer.getTransferId()).setTransferDate(LocalDate.now())
|
|
|
+ .setInvId(inboundItemResponse.getInvId());
|
|
|
+ // 插入调整单明细数据
|
|
|
+ transferItemMapper.insert(transferItem);
|
|
|
+ // 赋值入库明细值 并修改入库明细from_item_id值
|
|
|
+ InboundItem inboundItem= new InboundItem();
|
|
|
+ inboundItem.setFromItemId(transferItem.getItemId()).setItemId(inboundItemResponse.getItemId());
|
|
|
+ inboundItemService.updateByUuid(inboundItem);
|
|
|
+ // 赋值出库明细信息。
|
|
|
+ OutboundItemVO outboundItemVO =new OutboundItemVO();
|
|
|
+ outboundItemVO.setFromItemId(transferItem.getItemId()).setItemIndex(transferItem.getItemIndex())
|
|
|
+ .setOutingQty(transferItem.getTransferQty()).setFromId(transferItem.getTransferId())
|
|
|
+ .setSkuId(transferItem.getSkuId()).setNonStdCode(transferItem.getONonStdCode())
|
|
|
+ .setInvId(transferItem.getOInvId()).setPriceOut(BigDecimal.ZERO).setOutingAmt(BigDecimal.ZERO);
|
|
|
+ outboundItemVOList.add(outboundItemVO);
|
|
|
+ }
|
|
|
+ // 赋值出库接口参数 总表和明细
|
|
|
+ outboundCheckMap.put("total",outboundVO);
|
|
|
+ outboundCheckMap.put("detail",outboundItemVOList);
|
|
|
+ // 调用盘点出库接口
|
|
|
+ outboundCheckService.otherOutboundInsert(outboundCheckMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 非标号调整
|
|
|
+ else{
|
|
|
+ // 赋值入库实体
|
|
|
+ inboundVO.setOrgId(transferVO.getOrgId()).setStaffId(transferVO.getStaffId())
|
|
|
+ .setMakeStaff(transferVO.getMakeStaff()).setIntoingQty(transferQtySum)
|
|
|
+ .setFromId(transfer.getTransferId()).setFromNo(transfer.getTransferNo())
|
|
|
+ .setMakeTime(LocalDateTime.now()).setIntoDate(LocalDate.now()).setWhId(transferVO.getOWhId())
|
|
|
+ .setFlgAutoHandle(true).setIntoingAmt(intoingAmtSum)
|
|
|
+ .setIntoStatus(Constant.InventoryDocCode.MOVE.getTableName());
|
|
|
+ // 赋值出库实体
|
|
|
+ outboundVO.setOrgId(transferVO.getOrgId()).setStaffId(transferVO.getStaffId())
|
|
|
+ .setMakeStaff(transferVO.getMakeStaff()).setOutingQty(transferQtySum)
|
|
|
+ .setFromId(transfer.getTransferId()).setFromNo(transfer.getTransferNo())
|
|
|
+ .setMakeTime(LocalDateTime.now()).setOutDate(LocalDate.now()).setOutingAmt(BigDecimal.ZERO)
|
|
|
+ .setOutStatus(Constant.InventoryDocCode.MOVE.getTableName());
|
|
|
+ // 获取入库明细实体
|
|
|
+ for (TransferItemVO transferItemVO : transferVO.getItemList()) {
|
|
|
+ // 赋值入库明细实体
|
|
|
+ InboundItem inboundItem=new InboundItem();
|
|
|
+ inboundItem.setIntoingQty(transferItemVO.getTransferQty()).setFromId(transfer.getTransferId())
|
|
|
+ .setIntoingAmt(transferItemVO.getIntoingAmt()).setPriceInto(transferItemVO.getPriceInto())
|
|
|
+ .setWhId(transferItemVO.getOWhId()).setSkuId(transferItemVO.getSkuId())
|
|
|
+ .setNonStdCode(transferItemVO.getNonStdCode()).setItemIndex(transferItemVO.getItemIndex());
|
|
|
+ inboundItemList.add(inboundItem);
|
|
|
+ }
|
|
|
+ // 赋值入库接口参数 总表和明细
|
|
|
+ inboundMap.put("total", inboundVO);
|
|
|
+ inboundMap.put("detail", inboundItemList);
|
|
|
+ // 调用入库接口
|
|
|
+ InboundVO inboundTransferVO = inboundCheckService.checkInboundInsert(inboundMap);
|
|
|
+ // 如果库存接口返回成功,则插入调整单明细数据
|
|
|
+ if (transferVO.getItemList() != null && transferVO.getItemList().size() > 0) {
|
|
|
+ for (TransferItemVO transferItemVO : transferVO.getItemList()) {
|
|
|
+ // 转换
|
|
|
+ TransferItem transferItem = transferItemConvert.convertToPo(transferItemVO);
|
|
|
+ // 在入库接口中获取入库明细数据
|
|
|
+ List<InboundItemVO> inboundItemVOList = inboundTransferVO.getItemList().stream()
|
|
|
+ .filter(it -> it.getItemIndex().equals(transferItemVO.getItemIndex())).collect(Collectors.toList());
|
|
|
+ // 通过入库明细数据的item_id查询出inv_id
|
|
|
+ InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVOList.get(0).getItemId());
|
|
|
+ // 获取调整主表uuid
|
|
|
+ transferItem.setTransferId(transfer.getTransferId()).setTransferDate(LocalDate.now())
|
|
|
+ .setInvId(inboundItemResponse.getInvId());
|
|
|
+ // 插入调整单明细数据
|
|
|
+ transferItemMapper.insert(transferItem);
|
|
|
+ // 赋值入库明细值 并修改入库明细from_item_id值
|
|
|
+ InboundItem inboundItem= new InboundItem();
|
|
|
+ inboundItem.setFromItemId(transferItem.getItemId()).setItemId(inboundItemResponse.getItemId());
|
|
|
+ inboundItemService.updateByUuid(inboundItem);
|
|
|
+ // 赋值出库明细信息。
|
|
|
+ OutboundItemVO outboundItemVO =new OutboundItemVO();
|
|
|
+ outboundItemVO.setFromItemId(transferItem.getItemId()).setItemIndex(transferItem.getItemIndex())
|
|
|
+ .setOutingQty(transferItem.getTransferQty()).setFromId(transferItem.getTransferId())
|
|
|
+ .setSkuId(transferItem.getSkuId()).setNonStdCode(transferItem.getONonStdCode())
|
|
|
+ .setInvId(transferItem.getOInvId()).setPriceOut(BigDecimal.ZERO).setOutingAmt(BigDecimal.ZERO);
|
|
|
+ outboundItemVOList.add(outboundItemVO);
|
|
|
+ }
|
|
|
+ // 赋值出库接口参数 总表和明细
|
|
|
+ outboundCheckMap.put("total",outboundVO);
|
|
|
+ outboundCheckMap.put("detail",outboundItemVOList);
|
|
|
+ // 调用盘点出库接口
|
|
|
+ outboundCheckService.otherOutboundInsert(outboundCheckMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ResponseResultUtil.success();
|
|
|
+ } catch (Exception e) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // 手动回滚事务
|
|
|
+ return ResponseResultUtil.error("保存失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|