package com.dk.mdm.service.ivt.outbound; 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.mapper.BaseMapper; 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.common.service.BaseService; import com.dk.mdm.infrastructure.convert.ivt.OutboundConvert; import com.dk.mdm.infrastructure.convert.ivt.OutboundItemConvert; import com.dk.mdm.mapper.common.CommonMapper; import com.dk.mdm.mapper.ivt.OutboundItemMapper; import com.dk.mdm.mapper.ivt.OutboundMapper; import com.dk.mdm.model.pojo.ivt.InboundItem; import com.dk.mdm.model.pojo.ivt.Outbound; import com.dk.mdm.model.pojo.ivt.OutboundItem; import com.dk.mdm.model.query.ivt.InboundItemQuery; import com.dk.mdm.model.query.ivt.InboundQuery; import com.dk.mdm.model.query.ivt.OutboundItemQuery; import com.dk.mdm.model.query.ivt.OutboundQuery; import com.dk.mdm.model.response.ivt.InboundItemResponse; import com.dk.mdm.model.response.ivt.InboundResponse; import com.dk.mdm.model.response.ivt.OutboundItemResponse; import com.dk.mdm.model.response.ivt.OutboundResponse; import com.dk.mdm.model.vo.ivt.InboundItemVO; import com.dk.mdm.model.vo.ivt.OutboundItemVO; import com.dk.mdm.model.vo.ivt.OutboundVO; import com.dk.mdm.service.common.CommonService; import com.dk.mdm.service.ivt.inventory.InventoryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; /** * @author : 寇珊珊 * @desc : 其他出库业务层 * @date : 2024/3/18 15:33 */ @Service public class OutboundOtherService extends BaseService { @Override public BaseMapper getRepository() { return outboundMapper; } @Autowired private CommonService commonService; @Autowired private OutboundMapper outboundMapper; @Autowired private OutboundConvert outboundConvert; @Autowired private OutboundItemMapper outboundItemMapper; @Autowired private OutboundItemConvert outboundItemConvert; @Autowired private CommonMapper commonMapper; @Autowired private InventoryService inventoryService; /** * @desc : 条件查询 * @date : 2024/3/18 11:20 * @author : 寇珊珊 */ @Pagination public ResponseResultVO> selectByCond(OutboundQuery outboundQuery) { return super.mergeListWithCount(outboundQuery, outboundMapper.selectByCond(outboundQuery), outboundMapper.countByCond(outboundQuery)); } /** * @desc : 查询明细 * @date : 2024/3/15 16:43 * @author : 寇珊珊 */ @Pagination public ResponseResultVO> selectOutboundOtherItemInfoById(String id) { Map result = new HashMap<>(); // 商品明细 List outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(id)); result.put("itemList", outboundItemResponseList); // 收款 // 附件 return ResponseResultUtil.success(result); } /** * @desc : 其他出库新建 * @date : 2024/3/7 14:13 * @author : 寇珊珊 */ @Transactional(rollbackFor = {Exception.class}) public ResponseResultVO otherOutboundInsert(OutboundVO outboundVO) { //region 查询当前公司的系统参数 自动办理信息 并赋值 Map map = new HashMap<>(); map.put("cpId", outboundVO.getCpId()); map.put("code", Constant.SystemConstant.IVT_001.getValue()); //自动办理标识 String flgHandleSetting = commonMapper.getSettingValue(map); //自动办理标识为1 自动办理出库 if (Constant.FlgAutoHandleStringType.ONE.getValue().equals(flgHandleSetting)) { outboundVO.setFlgHandleSetting(Constant.FlgHandleSetting.TRUE.getValue()); outboundVO.setFlgAutoHandle(Constant.FlgAutoHandle.TRUE.getValue()); } //endregion //region 总单 //获取 id/单号 Map codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHEROUTBOUND.getName(), false); outboundVO.setOutId(codeMap.get("outId").toString()). setOutNo(codeMap.get("outNote").toString()); //出库类型 outboundVO.setOutType(Constant.OutType.OTHER.getName()); //自动出库标识 if (outboundVO.getFlgAutoHandle()) { //已出库 outboundVO.setOutStatus(Constant.OutStatus.YICHUKU.getName()); } else { //出库中 outboundVO.setOutStatus(Constant.OutStatus.CHUKUZHONG.getName()); } //出库状态等于已出库 更新合计出库数量/金额 = 出库中数量/出库中金额 if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) { outboundVO .setOutQty(outboundVO.getOutingQty()) .setOutAmt(outboundVO.getOutingAmt()) .setOutingQty(BigDecimal.ZERO) .setOutingAmt(BigDecimal.ZERO) ; } else { outboundVO .setOutQty(BigDecimal.ZERO) .setOutAmt(BigDecimal.ZERO) ; } //实体转换 Outbound outbound = outboundConvert.convertToPo(outboundVO); outboundMapper.insert(outbound); //endregion //region 明细 //校验明细 if (outboundVO.getItemList().size() == 0) { throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(), ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage()); } for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) { //region 将库存需要的参数赋值 outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); outboundItemVO.setAddOrEditFlag(true); //endregion //总单id outboundItemVO.setOutId(outboundVO.getOutId()); //出库类型 outboundItemVO.setOutType(outboundVO.getOutType()); //出库状态等于已出库 更新合计出库数量/金额 = 出库中数量/出库中金额 if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) { outboundItemVO .setOutQty(outboundItemVO.getOutingQty()) .setOutAmt(outboundItemVO.getOutingAmt()) .setOutingQty(BigDecimal.ZERO) .setOutingAmt(BigDecimal.ZERO) .setCostPrice(outboundItemVO.getPriceOut()) .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP)) ; } else { outboundItemVO .setOutQty(BigDecimal.ZERO) .setOutAmt(BigDecimal.ZERO); } //出库状态 outboundItemVO.setOutStatus(outboundVO.getOutStatus()); //实体转换 OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); outboundItemMapper.insert(outboundItem); outboundItemVO.setItemId(outboundItem.getItemId()); //endregion } //endregion //region 修改库存 if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) { Map invMap = new HashMap<>(); invMap.put("outDetail", outboundVO.getItemList()); inventoryService.operatingInventoryInformation(invMap); } //endregion return ResponseResultUtil.success(outboundVO); } /** * @desc : 其他出库编辑 * @date : 2024/3/25 16:25 * @author : 寇珊珊 */ @Transactional(rollbackFor = {Exception.class}) public ResponseResultVO otherOutboundUpdate(OutboundVO outboundVO) { //region 小编辑 if (!outboundVO.getLimitEdit()) { Outbound outbound = new Outbound(); outbound.setOutId(outboundVO.getOutId()); outbound.setRemarks(outboundVO.getRemarks()); outbound.setAnnexPaths(outboundVO.getAnnexPaths()); outboundMapper.update(outbound, new UpdateWrapper().lambda() .eq(Outbound::getOutId, UUID.fromString(outbound.getOutId())) ); for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) { OutboundItem outboundItem = new OutboundItem(); outboundItem.setItemId(outboundItemVO.getItemId()); outboundItem.setRemarks(outboundItemVO.getRemarks()); outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); } } //endregion //region 大编辑 else { //region 明细数量金额 求和 BigDecimal sumQty = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP); BigDecimal sumAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP); //endregion //region 自动办理参数为true 已出库编辑 //自动办理参数为true if (Constant.FlgHandleSetting.TRUE.getValue().equals(outboundVO.getFlgHandleSetting())) { //region 修改明细 List itemList = outboundVO.getItemList(); for (OutboundItemVO outboundItemVO : itemList) { //根据id查询 OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId()); //region 编辑明细 if (outboundItemVO.getItemId() != null) { //region 将库存需要的参数赋值 outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); //编辑之前的数 outboundItemVO.setQtyBeforeUpdate(outboundItemResponse.getOutQty()); outboundItemVO.setAmtBeforeUpdate(outboundItemResponse.getOutAmt()); //编辑之后的数 outboundItemVO.setOutQty(outboundItemVO.getOutingQty()); outboundItemVO.setOutAmt(outboundItemVO.getOutingAmt()); outboundItemVO.setAddOrEditFlag(false); //endregion OutboundItem outboundItem = new OutboundItem(); outboundItem.setItemId(outboundItemVO.getItemId()); outboundItem.setOutQty(outboundItemVO.getOutingQty()); outboundItem.setOutAmt(outboundItemVO.getOutingAmt()); outboundItem.setCostPrice(outboundItemVO.getPriceOut()); outboundItem.setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(6, BigDecimal.ROUND_HALF_UP)); //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); } //endregion //region 新建 else { outboundItemVO .setOutQty(outboundItemVO.getOutingQty()) .setOutAmt(outboundItemVO.getOutingAmt()) .setOutingQty(BigDecimal.ZERO) .setOutingAmt(BigDecimal.ZERO) .setCostPrice(outboundItemVO.getPriceOut()) .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP)) ; outboundItemVO.setOutId(outboundVO.getOutId()); //入库状态 outboundItemVO.setOutStatus(outboundVO.getOutStatus()); outboundItemVO.setOutType(Constant.OutType.OTHER.getName()); //实体转换 OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); outboundItemMapper.insert(outboundItem); outboundItemVO.setItemId(outboundItem.getItemId()); //region 将库存需要的参数赋值 outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); outboundItemVO.setOutQty(outboundItemVO.getOutQty()); outboundItemVO.setOutAmt(outboundItemVO.getOutAmt()); outboundItemVO.setAddOrEditFlag(true); //endregion } //endregion } //endregion //region 删除明细 if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) { for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) { if (outboundItemVO.getItemId() != null) { //region 将库存需要的参数赋值 outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); //endregion OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); outboundItem.setFlgValid(false); //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); } } } //endregion //region 修改出库总单 Outbound outbound = new Outbound(); outbound.setOutId(outboundVO.getOutId()); outbound.setOutQty(sumQty); outbound.setOutAmt(sumAmt); //修改 outboundMapper.update(outbound, new UpdateWrapper().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId())) ); //endregion //region 修改库存 if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) { Map invMap = new HashMap<>(); invMap.put("outDetail", outboundVO.getItemList()); invMap.put("delOutDetail", outboundVO.getDeleteItemList()); inventoryService.operatingInventoryInformation(invMap); } //endregion } else{ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.FLG_HANDLE_SETTING_NOT_ENABLED_OUT.getMessage()); } //endregion //region 自动办理参数false 出库中编辑 //自动办理标识为false 并且 自动办理参数为false 出库中 if (!outboundVO.getFlgAutoHandle() && Constant.FlgHandleSetting.FALSE.getValue().equals(outboundVO.getFlgHandleSetting())) { //region 修改明细 List itemList = outboundVO.getItemList(); for (OutboundItemVO outboundItemVO : itemList) { //region 赋值明细 if (outboundItemVO.getItemId() != null) { OutboundItem outboundItem = new OutboundItem(); outboundItem.setItemId(outboundItemVO.getItemId()); outboundItem.setOutingQty(outboundItemVO.getOutingQty()); outboundItem.setOutingAmt(outboundItemVO.getOutingAmt()); //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); } //endregion //region 新建 else { outboundItemVO .setOutId(outboundItemVO.getOutId()) .setOutQty(BigDecimal.ZERO) .setOutAmt(BigDecimal.ZERO) .setCostPrice(outboundItemVO.getPriceOut()) .setCostAmt(outboundItemVO.getOutingQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP)) .setOutType(Constant.OutType.OTHER.getName()) ; //出库状态 String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty()); outboundItemVO.setOutStatus(outStatus); //实体转换 OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); //新建 outboundItemMapper.insert(outboundItem); outboundItemVO.setItemId(outboundItem.getItemId()); } //endregion } //endregion //region 删除明细 if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) { for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) { if (outboundItemVO.getItemId() != null) { OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); outboundItem.setFlgValid(false); //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); } } } //endregion //region 修改出库总单 Outbound outbound = new Outbound(); outbound.setOutId(outboundVO.getOutId()); outbound.setOutingQty(sumQty); outbound.setOutingAmt(sumAmt); //修改 outboundMapper.update(outbound, new UpdateWrapper().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId())) ); //endregion } else{ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.FLG_HANDLE_SETTING_NOT_ENABLED_OUT.getMessage()); } //endregion } //endregion return ResponseResultUtil.success(outboundVO); } /** * @desc : 其他出库作废 * @date : 2024/3/25 16:25 * @author : 寇珊珊 */ @Transactional(rollbackFor = {Exception.class}) public ResponseResultVO otherOutboundRepeal(String outId) { //region 查询总单 查询明细 //根据id查询 此条出库单的数据还未更改前的数据 OutboundResponse outboundResponse = outboundMapper.selectById(outId); //根据总单id查询 List outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId())); //endregion //region 自动办理参数为true 已出库编辑 //自动办理参数为true if (Constant.FlgHandleSetting.TRUE.getValue().equals(outboundResponse.getFlgHandleSetting())) { //region 修改明细 for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) { //region 将库存需要的参数赋值 outboundItemResponse.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); outboundItemResponse.setOutQty(outboundItemResponse.getOutQty().negate()); outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt().negate()); //endregion //赋值 OutboundItem outboundItem = new OutboundItem(); outboundItem.setItemId(outboundItemResponse.getItemId()); outboundItem.setFlgValid(false); //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); } //endregion //region 修改出库总单 Outbound outbound = new Outbound(); outbound.setOutId(outboundResponse.getOutId()); outbound.setFlgValid(false); //修改 outboundMapper.update(outbound, new UpdateWrapper().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId())) ); //endregion //region 修改库存 Map map = new HashMap<>(); map.put("delOutDetail", outboundItemResponseList); inventoryService.operatingInventoryInformation(map); //endregion } else{ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.FLG_HANDLE_SETTING_NOT_ENABLED_OUT.getMessage()); } //endregion //region 自动办理参数false 出库中编辑 //自动办理标识为false 并且 自动办理参数为false 出库中 if (!outboundResponse.getFlgAutoHandle() && Constant.FlgHandleSetting.FALSE.getValue().equals(outboundResponse.getFlgHandleSetting())) { //region 修改明细 for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) { //赋值 OutboundItem outboundItem = new OutboundItem(); outboundItem.setItemId(outboundItemResponse.getItemId()); outboundItem.setOutingQty(BigDecimal.ZERO); outboundItem.setOutingAmt(BigDecimal.ZERO); outboundItem.setFlgValid(false); //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); } //endregion //region 修改出库总单 Outbound outbound = new Outbound(); outbound.setOutId(outboundResponse.getOutId()); outbound.setOutingQty(BigDecimal.ZERO); outbound.setOutingAmt(BigDecimal.ZERO); outbound.setFlgValid(false); //修改 outboundMapper.update(outbound, new UpdateWrapper().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId())) ); //endregion } else{ throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.FLG_HANDLE_SETTING_NOT_ENABLED_OUT.getMessage()); } //endregion return ResponseResultUtil.success(); } /** * @desc : 其他出库办理 * @date : 2024/3/7 15:47 * @author : 寇珊珊 */ @Transactional(rollbackFor = {Exception.class}) public ResponseResultVO otherHandleOutbound(OutboundVO outboundVO) { //region 编辑明细 //校验明细 if (outboundVO.getItemList().size() == 0) { throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(), ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage()); } for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) { //查询原单 OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId()); //region 校验数量是否超出 if (outboundItemVO.getOutingQty().compareTo(outboundItemResponse.getOutingQty()) > 0) { throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getCode(), ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getMessage()); } //endregion //region 编辑明细 if (outboundItemVO.getItemId() != null) { outboundItemVO .setOutQty(outboundItemResponse.getOutQty().add(outboundItemVO.getOutingQty())) .setOutAmt(outboundItemResponse.getOutAmt().add(outboundItemVO.getOutingAmt())) .setOutingQty(outboundItemResponse.getOutingQty().subtract(outboundItemVO.getOutingQty())) .setOutAmt(outboundItemResponse.getOutingAmt().subtract(outboundItemVO.getOutingAmt())) .setCostPrice(outboundItemVO.getPriceOut()) .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP)) ; //出库状态 String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty()); outboundItemVO.setOutStatus(outStatus); //实体转换 OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); //region 将库存需要的参数赋值 outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); //编辑之前的数 outboundItemVO.setQtyBeforeUpdate(outboundItemResponse.getOutQty()); outboundItemVO.setAmtBeforeUpdate(outboundItemResponse.getOutAmt()); outboundItemVO.setAddOrEditFlag(true); //endregion } //endregion //region 新建明细 else { outboundItemVO .setOutId(outboundItemVO.getOutId()) .setOutQty(outboundItemVO.getOutingQty()) .setOutAmt(outboundItemVO.getOutingAmt()) .setCostPrice(outboundItemVO.getPriceOut()) .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP)) .setOutType(Constant.OutType.OTHER.getName()) .setOutingQty(BigDecimal.ZERO) .setOutingAmt(BigDecimal.ZERO) ; //出库状态 String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty()); outboundItemVO.setOutStatus(outStatus); //实体转换 OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); //新建 outboundItemMapper.insert(outboundItem); outboundItemVO.setItemId(outboundItem.getItemId()); //region 将库存需要的参数赋值 outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); outboundItemVO.setAddOrEditFlag(true); //endregion } //endregion } //endregion //region 删除明细 if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) { for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) { if (outboundItemVO.getItemId() != null) { //region 将库存需要的参数赋值 outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); //endregion OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); outboundItem.setFlgValid(false); //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); } } } //endregion //region 编辑总单 BigDecimal sumOutQty = outboundVO.getItemList().stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP); BigDecimal sumOutAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP); outboundVO.setOutQty(sumOutQty); outboundVO.setOutAmt(sumOutAmt); outboundVO.setOutingQty(BigDecimal.ZERO); outboundVO.setOutingAmt(BigDecimal.ZERO); //出库状态 String outStatus = this.setOutStatus(outboundVO.getOutingQty(), outboundVO.getOutQty()); outboundVO.setOutStatus(outStatus); //实体转换 Outbound outbound = outboundConvert.convertToPo(outboundVO); //修改 outboundMapper.update(outbound, new UpdateWrapper().lambda() .eq(Outbound::getOutId, UUID.fromString(outbound.getOutId())) ); //endregion //region 修改库存 Map map = new HashMap<>(); map.put("outDetail", outboundVO.getItemList()); map.put("delOutDetail", outboundVO.getDeleteItemList()); inventoryService.operatingInventoryInformation(map); //endregion return ResponseResultUtil.success(outboundVO); } /** * @desc : 其他出库撤销 * @date : 2024/3/7 17:06 * @author : 寇珊珊 */ @Transactional(rollbackFor = {Exception.class}) public ResponseResultVO otherOutboundCancel(OutboundVO outboundVO) { //region 查询出库总单数据信息 OutboundResponse outboundResponse = outboundMapper.selectById(outboundVO.getOutId()); //endregion //region 修改总单数据信息 Outbound outbound = new Outbound(); outbound.setOutId(outboundVO.getOutId()); outbound.setOutDate(null); outbound.setOutStatus(Constant.OutStatus.CHUKUZHONG.getName()); outbound.setOutingQty(outboundResponse.getOutingQty().add(outboundResponse.getOutQty())); outbound.setOutingAmt(outboundResponse.getOutingAmt().add(outboundResponse.getOutAmt())); outbound.setOutQty(BigDecimal.ZERO); outbound.setOutAmt(BigDecimal.ZERO); //修改 outboundMapper.update(outbound, new UpdateWrapper().lambda() .eq(Outbound::getOutId, UUID.fromString(outbound.getOutId())) ); //endregion //region 明细数据 //根据总单id查明细 List outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundVO.getOutId())); for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) { //region 将库存需要的参数赋值 outboundItemResponse.setInventoryType(Constant.InventoryType.OUTBOUND.getName()); outboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue()); outboundItemResponse.setOutQty(outboundItemResponse.getOutQty().negate()); outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt().negate()); //endregion //region修改出库明细信息 OutboundItem outboundItem = new OutboundItem(); outboundItem .setOutId(outboundResponse.getOutId()) .setOutStatus(Constant.OutStatus.CHUKUZHONG.getName()) .setOutingQty(outboundItemResponse.getOutingQty().add(outboundItemResponse.getOutQty())) .setOutAmt(outboundItemResponse.getOutingAmt().add(outboundItemResponse.getOutAmt())) .setOutQty(BigDecimal.ZERO) .setOutAmt(BigDecimal.ZERO) .setItemId(outboundItemResponse.getItemId()) .setCostPrice(BigDecimal.ZERO) .setCostAmt(BigDecimal.ZERO) ; //修改 outboundItemMapper.update(outboundItem, new UpdateWrapper().lambda() .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId())) ); //endregion } //endregion //region 修改库存 Map map = new HashMap<>(); map.put("delOutDetail", outboundItemResponseList); inventoryService.operatingInventoryInformation(map); //endregion return ResponseResultUtil.success(); } /** * @desc : 出库状态通用(目前本页面) * @date : 2024/3/9 8:59 * @author : 寇珊珊 */ @Transactional(rollbackFor = {Exception.class}) public String setOutStatus(BigDecimal outingQty, BigDecimal outQty) { //出库状态 String outStatus = null; //已出库数量<0 出库中数量<0 if (outQty.compareTo(BigDecimal.ZERO) >= 0 && outingQty.compareTo(BigDecimal.ZERO) < 0) { //出库中 outStatus = Constant.OutStatus.CHUKUZHONG.getName(); } //出出库数量=0 出库中数量=0 else if (outQty.compareTo(BigDecimal.ZERO) == 0 && outingQty.compareTo(BigDecimal.ZERO) == 0) { //待出库 outStatus = Constant.OutStatus.DAICHUKU.getName(); } //已出库数量<0 出库中数量=0 else if (outQty.compareTo(BigDecimal.ZERO) > 0 && outingQty.compareTo(BigDecimal.ZERO) == 0) { //已出库 outStatus = Constant.OutStatus.YICHUKU.getName(); } return outStatus; } /** * @desc : 获取单据信息(编辑用) * @date : 2024/3/16 16:28 * @author : 寇珊珊 */ public ResponseResultVO selectByUpdate(String id) { Map dataInfo = new HashMap<>(); //总单 OutboundResponse outboundResponse = outboundMapper.selectMessageByOtherQuery(new OutboundQuery().setOutId(id).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName())); //单据不存在 if (outboundResponse == null) { throw new BaseBusinessException(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getCode(), ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getMessage()); } dataInfo.put("data", outboundResponse); // 明细 List outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId())); dataInfo.put("dataItem", outboundItemResponseList); return ResponseResultUtil.success(dataInfo); } /** * @desc : 条件查询 --- web端入库办理用 * @date : 2024/3/23 9:24 * @author : 寇珊珊 */ @Pagination public ResponseResultVO> selectOutbound(OutboundQuery outboundQuery) { return super.mergeListWithCount(outboundQuery, outboundMapper.selectOutbound(outboundQuery), outboundMapper.selectOutboundCond(outboundQuery)); } /** * @desc : 查询明细查询 --- web端入库办理用 * @date : 2024/3/9 15:43 * @author : 寇珊珊 */ public ResponseResultVO> selectOutboundItem(String id) { Map result = new HashMap<>(); // 商品明细 List outboundItemResponseList = outboundItemMapper.selectOutboundItem(new OutboundItemQuery().setOutId(id)); result.put("itemList", outboundItemResponseList); // 收款 // 附件 return ResponseResultUtil.success(result); } /** * @desc : 条件查询 --- web端入库办理用(小程序汇总条数) * @date : 2024/4/9 9:24 * @author : 周兴 */ @Pagination public ResponseResultVO selectWaitOutboundCount(OutboundQuery outboundQuery) { return ResponseResultUtil.success(outboundMapper.selectOutboundCond(outboundQuery)); } }