package com.glxp.api.service.collect; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.glxp.api.constant.Constant; import com.glxp.api.dao.collect.IoSplitDesOrderMapper; import com.glxp.api.entity.collect.IoCollectOrderBiz; import com.glxp.api.entity.collect.IoSplitDesOrder; import com.glxp.api.entity.collect.IoSplitDesOrderCode; import com.glxp.api.entity.collect.IoSplitDesOrderDetail; import com.glxp.api.entity.inout.IoSplitFifoCodeEntity; import com.glxp.api.entity.inout.IoSplitFifoInv; import com.glxp.api.exception.JsonException; import com.glxp.api.req.collect.AddInvDesDetaiRequest; import com.glxp.api.req.collect.IoSplitDesOrderRequest; import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.res.collect.IoSplitDesOrderResponse; import com.glxp.api.service.inout.IoSplitFifoCodeService; import com.glxp.api.service.inout.IoSplitFifoInvService; import com.glxp.api.util.GennerOrderUtils; import com.glxp.api.util.IntUtil; import com.glxp.api.util.OrderNoTypeBean; import org.apache.poi.ss.formula.functions.Offset; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Collections; import java.util.Date; import java.util.List; @Service public class IoSplitDesOrderService extends ServiceImpl { @Resource IoSplitDesOrderMapper splitDesOrderMapper; @Resource IoSplitDesOrderDetailService splitDesOrderDetailService; @Resource GennerOrderUtils gennerOrderUtils; public List filterList(IoSplitDesOrderRequest splitDesOrderRequest) { if (splitDesOrderRequest == null) { return Collections.emptyList(); } if (splitDesOrderRequest.getPage() != null) { int offset = (splitDesOrderRequest.getPage() - 1) * splitDesOrderRequest.getLimit(); PageHelper.offsetPage(offset, splitDesOrderRequest.getLimit()); } List data = splitDesOrderMapper.filterList(splitDesOrderRequest); return data; } public IoSplitDesOrder getByBillNo(String billNo) { return splitDesOrderMapper.selectOne(new LambdaQueryWrapper().eq(IoSplitDesOrder::getBillNo, billNo).last("limit 1")); } public IoSplitDesOrder addInv(AddInvDesDetaiRequest addInvDesDetaiRequest) { IoSplitDesOrder collectOrder; if (StrUtil.isNotEmpty(addInvDesDetaiRequest.getBillNo())) { collectOrder = getByBillNo(addInvDesDetaiRequest.getBillNo()); } else { collectOrder = IoSplitDesOrder.builder() .billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd"))) .busType("1") .workPlaceCode(addInvDesDetaiRequest.getWorkPlaceCode()) .createTime(new Date()) .billTime(new Date()) .remark(addInvDesDetaiRequest.getRemark()) .status(1) .createUser(addInvDesDetaiRequest.getCreateUser()) .updateTime(new Date()) .updateUser(addInvDesDetaiRequest.getUpdateUser()) .build(); save(collectOrder); } IoSplitFifoInv splitFifoInv = addInvDesDetaiRequest.getSplitFifoInv(); IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder() .id(IdUtil.getSnowflakeNextId()) .workPlaceCode(collectOrder.getWorkPlaceCode()) .orderIdFk(collectOrder.getBillNo()) .invId(splitFifoInv.getId()) .relId(splitFifoInv.getRelId()) .batchNo(splitFifoInv.getBatchNo()) .produceDate(splitFifoInv.getProduceDate()) .expireDate(splitFifoInv.getExpireDate()) .supId(splitFifoInv.getSupId()) .count(splitFifoInv.getReCount()) .reCount(splitFifoInv.getReCount()) .createTime(new Date()) .updateTime(new Date()) .remark("").build(); splitDesOrderDetailService.save(splitDesOrderDetail); return collectOrder; } @Resource IoSplitFifoCodeService splitFifoCodeService; @Resource IoSplitDesOrderCodeService ioSplitDesOrderCodeService; public IoSplitDesOrder addCode(AddInvDesDetaiRequest addInvDesDetaiRequest) { IoSplitFifoCodeEntity splitFifoCodeEntity = splitFifoCodeService.findByCode(addInvDesDetaiRequest.getCode(), addInvDesDetaiRequest.getWorkPlaceCode()); if (splitFifoCodeEntity == null) { throw new JsonException("工位存量不存在,请检查后重试!"); } IoSplitDesOrder collectOrder; if (StrUtil.isNotEmpty(addInvDesDetaiRequest.getBillNo())) { collectOrder = getByBillNo(addInvDesDetaiRequest.getBillNo()); } else { collectOrder = IoSplitDesOrder.builder() .billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd"))) .busType("1") .workPlaceCode(addInvDesDetaiRequest.getWorkPlaceCode()) .createTime(new Date()) .billTime(new Date()) .remark(addInvDesDetaiRequest.getRemark()) .status(1) .createUser(addInvDesDetaiRequest.getCreateUser()) .updateTime(new Date()) .updateUser(addInvDesDetaiRequest.getUpdateUser()) .build(); save(collectOrder); } IoSplitDesOrderCode splitDesOrderCode = new IoSplitDesOrderCode(); BeanUtil.copyProperties(splitFifoCodeEntity, splitDesOrderCode); splitDesOrderCode.setCount(0); splitDesOrderCode.setReCount(0); ioSplitDesOrderCodeService.save(splitDesOrderCode); return collectOrder; } @Resource IoSplitFifoInvService ioSplitFifoInvService; @Transactional(rollbackFor = Exception.class) public Boolean destroyOut(AddInvDesDetaiRequest addInvDesDetaiRequest) { IoSplitDesOrder collectOrder; collectOrder = IoSplitDesOrder.builder() .id(IdUtil.getSnowflakeNextId()) .billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd"))) .busType("1") .orderType(1) .workPlaceCode(addInvDesDetaiRequest.getSplitFifoInv().getWorkPlaceCode()) .createTime(new Date()) .billTime(new Date()) .remark(addInvDesDetaiRequest.getRemark()) .status(1) .createUser(addInvDesDetaiRequest.getCreateUser()) .updateTime(new Date()) .updateUser(addInvDesDetaiRequest.getUpdateUser()) .build(); boolean save = save(collectOrder); if (!save) { return false; } //拿到 产品库存 IoSplitFifoInv splitFifoInv = ioSplitFifoInvService.getById(addInvDesDetaiRequest.getSplitFifoInv().getId()); //修改产品 库存 出库数量 可用数量 剩余数量 splitFifoInv.setOutCount(splitFifoInv.getOutCount() + addInvDesDetaiRequest.getOutCount());//出库数量 splitFifoInv.setReCount(splitFifoInv.getInCount() - splitFifoInv.getOutCount());//剩余数量 splitFifoInv.setAvailableCount(splitFifoInv.getInCount() - splitFifoInv.getOutCount() - splitFifoInv.getLockCount()); splitFifoInv.setUpdateTime(new Date()); //更改 库存 boolean update = ioSplitFifoInvService.updateById(splitFifoInv); if (!update) { return false; } // IoSplitFifoInv splitFifoInv = addInvDesDetaiRequest.getSplitFifoInv(); IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder() .id(IdUtil.getSnowflakeNextId()) .workPlaceCode(collectOrder.getWorkPlaceCode()) .orderIdFk(collectOrder.getBillNo()) .invId(splitFifoInv.getId()) .relId(splitFifoInv.getRelId()) .batchNo(splitFifoInv.getBatchNo()) .produceDate(splitFifoInv.getProduceDate()) .expireDate(splitFifoInv.getExpireDate()) .supId(splitFifoInv.getSupId()) .count(splitFifoInv.getReCount()) .reCount(splitFifoInv.getReCount()) .createTime(new Date()) .updateTime(new Date()) .remark("").build(); boolean save1 = splitDesOrderDetailService.save(splitDesOrderDetail); if (!save1) { return false; } return true; } }