package com.dk.mdm.service.ivt.outbound; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dk.common.exception.BaseBusinessException; import com.dk.common.infrastructure.constant.Constant; import com.dk.common.infrastructure.enums.ErrorCodeEnum; import com.dk.common.mapper.BaseMapper; 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.ivt.OutboundItemMapper; import com.dk.mdm.mapper.ivt.OutboundMapper; import com.dk.mdm.model.pojo.ivt.Outbound; import com.dk.mdm.model.pojo.ivt.OutboundItem; 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.List; import java.util.Map; /** * @author : 寇珊珊 * @desc : 其他出库业务层 * @date : 2024/3/18 15:33 */ @Service public class OutboundCheckService 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 InventoryService inventoryService; /** * @desc : 其他出库新建 * @date : 2024/3/7 14:13 * @author : 寇珊珊 */ @Transactional(rollbackFor = {Exception.class}) public OutboundVO otherOutboundInsert(Map map) { //region map转json JSONObject total = new JSONObject(); JSONArray detail = new JSONArray(); //总单 if (map.get("total") != null) { total = (JSONObject) JSON.toJSON(map.get("total")); } //明细 if (map.get("total") != null) { detail = (JSONArray) JSON.toJSON(map.get("detail")); } OutboundVO outboundVO = new OutboundVO(); outboundVO = total.toJavaObject(OutboundVO.class); List outboundItemVOList = detail.toJavaList(OutboundItemVO.class); outboundVO.setItemList(outboundItemVOList); //endregion //region 总单 //获取 id/单号 Map codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.INVENTORYLOSEOUTBOUND.getName(), false); outboundVO.setOutId(codeMap.get("outId").toString()). setOutNo(codeMap.get("outNote").toString()); //todo 出库类型可能是盘亏可能是库位移动 调用的时候传 //出库类型 // outboundVO.setOutType(Constant.OutType.INVENTORY_LOSS.getName()); //已出库 outboundVO.setOutStatus(Constant.OutStatus.YICHUKU.getName()); //出库状态等于已出库 更新合计出库数量/金额 = 出库中数量/出库中金额 outboundVO .setOutQty(outboundVO.getOutingQty()) .setOutAmt(outboundVO.getOutingAmt()) .setOutingQty(BigDecimal.ZERO) .setOutingAmt(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.INVENTORY_LOSS.getValue()); //endregion //总单id outboundItemVO.setOutId(outboundVO.getOutId()); //出库类型 outboundItemVO.setOutType(outboundVO.getOutType()); //出库状态等于已出库 更新合计出库数量/金额 = 出库中数量/出库中金额 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.setOutStatus(outboundVO.getOutStatus()); //实体转换 OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO); outboundItemMapper.insert(outboundItem); //endregion } //endregion //region 修改库存 // Map invMap = new HashMap<>(); // invMap.put("outDetail",outboundVO.getItemList()); // inventoryService.updateInventoryInformation(invMap); //endregion //1.入库需要的值 附上 掉用接口 //2.接收接口返回体 return outboundVO; } }