| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- package com.dk.mdm.service.ivt;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.dk.common.exception.BaseBusinessException;
- import com.dk.common.infrastructure.annotaiton.Pagination;
- import com.dk.common.infrastructure.constant.Constant;
- import com.dk.common.infrastructure.enums.ErrorCodeEnum;
- import com.dk.common.model.pojo.PageList;
- import com.dk.common.response.ResponseCodeEnum;
- 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.OutboundItemMapper;
- import com.dk.mdm.mapper.ivt.TransferItemMapper;
- import com.dk.mdm.model.pojo.ivt.*;
- 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.mac.RecPay;
- import com.dk.mdm.model.pojo.mac.RecPayItem;
- import com.dk.mdm.model.pojo.sale.Order;
- import com.dk.mdm.model.query.ivt.TransferQuery;
- import com.dk.mdm.model.response.ivt.InboundItemResponse;
- import com.dk.mdm.model.response.ivt.OutboundItemResponse;
- 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;
- @Autowired
- private OutboundItemMapper outboundItemMapper;
- /**
- * @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<InboundItemVO> inboundItemVOList=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(BigDecimal.ZERO)
- .setIntoType(Constant.IntoType.REMOVE.getName());
- // 赋值出库实体
- 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).setOutType(Constant.OutType.REMOVE.getName());
- // 获取入库明细实体
- for (TransferItemVO transferItemVO : transferVO.getItemList()) {
- // 赋值入库明细实体
- InboundItemVO inboundItemVO=new InboundItemVO();
- inboundItemVO.setItemIndex(transferItemVO.getItemIndex()).setSkuId(transferItemVO.getSkuId())
- .setIntoingQty(transferItemVO.getTransferQty()).setFromId(transfer.getTransferId())
- .setIntoingAmt(BigDecimal.ZERO).setPriceInto(BigDecimal.ZERO)
- .setWhId(transferItemVO.getWhId()).setNonStdCode(transferItemVO.getONonStdCode());
- inboundItemVOList.add(inboundItemVO);
- // 赋值出库明细信息。
- OutboundItemVO outboundItemVO =new OutboundItemVO();
- outboundItemVO.setItemIndex(transferItemVO.getItemIndex()).setSkuId(transferItemVO.getSkuId())
- .setOutingQty(transferItemVO.getTransferQty()).setFromId(transfer.getTransferId())
- .setOutingAmt(BigDecimal.ZERO).setPriceOut(BigDecimal.ZERO)
- .setWhId(transferItemVO.getWhId()).setNonStdCode(transferItemVO.getONonStdCode());
- outboundItemVOList.add(outboundItemVO);
- }
- // 赋值出库接口参数 总表和明细
- outboundCheckMap.put("total",outboundVO);
- outboundCheckMap.put("detail",outboundItemVOList);
- // 调用盘点出库接口
- OutboundVO outboundTransferVO = outboundCheckService.otherOutboundInsert(outboundCheckMap);
- // 赋值入库接口参数 总表和明细
- inboundMap.put("total", inboundVO);
- inboundMap.put("detail", inboundItemVOList);
- // 调用入库接口
- InboundVO inboundTransferVO = inboundCheckService.checkInboundInsert(inboundMap);
- // 如果库存接口返回成功,则插入调整单明细数据
- if (transferVO.getItemList() != null && transferVO.getItemList().size() > 0) {
- for (TransferItemVO transferItemVO : transferVO.getItemList()) {
- // 转换库存调整单明细
- TransferItem transferItem = transferItemConvert.convertToPo(transferItemVO);
- // 在入库接口中获取入库明细数据
- 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);
- // 在出库接口中获取入库明细数据
- outboundItemVOList = outboundTransferVO.getItemList().stream()
- .filter(it -> it.getItemIndex().equals(transferItemVO.getItemIndex())).collect(Collectors.toList());
- // 通过出库明细数据的item_id查询出inv_id
- OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVOList.get(0).getItemId());
- // 赋值出库明细值 并修改出库明细from_item_id值
- OutboundItem outboundItem= new OutboundItem();
- outboundItem.setFromItemId(transferItem.getItemId()).setItemId(outboundItemResponse.getItemId());
- inboundItemService.updateByUuid(inboundItem);
- }
- }
- }
- // 非标号调整
- 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(BigDecimal.ZERO)
- .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()) {
- // 赋值入库明细实体
- InboundItemVO inboundItemVO=new InboundItemVO();
- inboundItemVO.setItemIndex(transferItemVO.getItemIndex()).setSkuId(transferItemVO.getSkuId())
- .setIntoingQty(transferItemVO.getTransferQty()).setFromId(transfer.getTransferId())
- .setIntoingAmt(BigDecimal.ZERO).setPriceInto(BigDecimal.ZERO)
- .setWhId(transferItemVO.getOWhId()).setNonStdCode(transferItemVO.getNonStdCode());
- inboundItemVOList.add(inboundItemVO);
- // 赋值出库明细信息。
- OutboundItemVO outboundItemVO =new OutboundItemVO();
- outboundItemVO.setItemIndex(transferItemVO.getItemIndex()).setSkuId(transferItemVO.getSkuId())
- .setOutingQty(transferItemVO.getTransferQty()).setFromId(transfer.getTransferId())
- .setOutingAmt(BigDecimal.ZERO).setPriceOut(BigDecimal.ZERO)
- .setWhId(transferItemVO.getWhId()).setNonStdCode(transferItemVO.getONonStdCode());
- outboundItemVOList.add(outboundItemVO);
- }
- // 赋值出库接口参数 总表和明细
- outboundCheckMap.put("total",outboundVO);
- outboundCheckMap.put("detail",outboundItemVOList);
- // 调用盘点出库接口
- OutboundVO outboundTransferVO = outboundCheckService.otherOutboundInsert(outboundCheckMap);
- // 赋值入库接口参数 总表和明细
- inboundMap.put("total", inboundVO);
- inboundMap.put("detail", inboundItemVOList);
- // 调用入库接口
- InboundVO inboundTransferVO = inboundCheckService.checkInboundInsert(inboundMap);
- // 如果库存接口返回成功,则插入调整单明细数据
- if (transferVO.getItemList() != null && transferVO.getItemList().size() > 0) {
- for (TransferItemVO transferItemVO : transferVO.getItemList()) {
- // 转换库存调整单明细
- TransferItem transferItem = transferItemConvert.convertToPo(transferItemVO);
- // 在入库接口中获取入库明细数据
- 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);
- // 在出库接口中获取入库明细数据
- outboundItemVOList = outboundTransferVO.getItemList().stream()
- .filter(it -> it.getItemIndex().equals(transferItemVO.getItemIndex())).collect(Collectors.toList());
- // 通过出库明细数据的item_id查询出inv_id
- OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVOList.get(0).getItemId());
- }
- }
- }
- }
- return ResponseResultUtil.success();
- } catch (Exception e) {
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // 手动回滚事务
- return ResponseResultUtil.error("保存失败");
- }
- }
- /**
- * @desc : 作废
- * @author : 宋扬
- * @date : 2024/4/15 16:28
- */
- public ResponseResultVO<?> invalid(String id) {
- Transfer transferForUpdate = transferMapper.selectByIdForUpdate(id);
- // 并发校验
- if (!transferForUpdate.getFlgValid()) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
- }
- // 作废
- Transfer transferUpdate = new Transfer();
- transferUpdate.setFlgValid(false).setTransferId(id);
- super.updateByUuid(transferUpdate);
- // 调用入库作废接口
- inboundCheckService.inboundRepeal(id);
- // 调用出库作废接口
- outboundCheckService.outboundRepeal(id);
- return ResponseResultUtil.success();
- }
- }
|