|
@@ -39,6 +39,7 @@ import com.sd.business.entity.order.vo.*;
|
|
|
import com.sd.business.entity.price.po.PriceBillingStandard;
|
|
|
import com.sd.business.entity.price.po.PriceBillingStandardDetail;
|
|
|
import com.sd.business.entity.production.po.ProductionWorkOrder;
|
|
|
+import com.sd.business.entity.production.vo.OutBomVo;
|
|
|
import com.sd.business.entity.sku.po.SkuSpec;
|
|
|
import com.sd.business.entity.statement.po.StatementOfAccount;
|
|
|
import com.sd.business.entity.statement.vo.StatementOrderClassifyTotalCountVo;
|
|
@@ -68,6 +69,7 @@ import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
* <p>
|
|
@@ -938,7 +940,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
|
|
|
|
|
|
Map<Long, BomSpecBo> bomSpecBo = skuSpecService.getBomSpecBoByIdList(Collections.singleton(bomSpecId));
|
|
|
IWrapper<OrderInfo> wrapper = getWrapper();
|
|
|
- wrapper.ge("o", OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey());
|
|
|
+ wrapper.in("o", OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey(), OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
|
|
|
wrapper.in("o", OrderInfo::getStatementOfAccountId, accountIds);
|
|
|
if (ObjectUtil.equal(bomSpecBo.get(bomSpecId).getClassifyParentId(), 1L)) {
|
|
|
|
|
@@ -1026,6 +1028,78 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
|
|
|
return this.baseMapper.getOrderClassifyTotalCount(wrapper);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<OutBomVo> returnBomList(Long id) {
|
|
|
+ OrderInfo orderInfo = this.getById(id);
|
|
|
+ if (orderInfo == null) {
|
|
|
+ throw new ServiceException("未找到订单");
|
|
|
+ }
|
|
|
+ List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, id));
|
|
|
+ List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.eq(OrderSkuBom::getOrderId, id));
|
|
|
+ Map<Long, OrderSku> orderSkuMap = orderSkuList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
|
|
|
+ if (Objects.equals(orderInfo.getClassify(), OrderClassifyEnum.OUTSOURCE_ORDER.getKey())) {
|
|
|
+ orderSkuList = Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, OutBomVo> map = Stream.concat(
|
|
|
+
|
|
|
+ orderSkuList.stream()
|
|
|
+ .map(item -> {
|
|
|
+ OutBomVo outBomVo = new OutBomVo();
|
|
|
+ outBomVo.setBomSpecId(item.getBomSpecId());
|
|
|
+ outBomVo.setOutQuantity(item.getQuantity());
|
|
|
+ return outBomVo;
|
|
|
+ }),
|
|
|
+
|
|
|
+
|
|
|
+ orderSkuBomList.stream().map(item -> {
|
|
|
+ OrderSku orderSku = orderSkuMap.get(item.getOrderSkuId());
|
|
|
+ OutBomVo outBomVo = new OutBomVo();
|
|
|
+ outBomVo.setBomSpecId(item.getBomSpecId());
|
|
|
+ outBomVo.setOutQuantity(item.getQuantity().multiply(orderSku.getQuantity()));
|
|
|
+ return outBomVo;
|
|
|
+ })
|
|
|
+ )
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ OutBomVo::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setOutQuantity(v1.getOutQuantity().add(v2.getOutQuantity()));
|
|
|
+ return v1;
|
|
|
+ })
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ List<OutBomVo> outBomVoList = new ArrayList<>(map.values());
|
|
|
+
|
|
|
+
|
|
|
+ Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(map.keySet());
|
|
|
+
|
|
|
+ for (OutBomVo outBomVo : outBomVoList) {
|
|
|
+ Long bomSpecId = outBomVo.getBomSpecId();
|
|
|
+ BomSpecBo bomSpecBo = bomSpecBoMap.get(bomSpecId);
|
|
|
+ outBomVo.setBomSpecCode(bomSpecBo.getBomSpecCode());
|
|
|
+ outBomVo.setBomSpecName(bomSpecBo.getBomSpecName());
|
|
|
+ outBomVo.setClassifyId(bomSpecBo.getClassifyId());
|
|
|
+ outBomVo.setClassifyName(bomSpecBo.getClassifyName());
|
|
|
+ outBomVo.setClassifyParentId(bomSpecBo.getClassifyParentId());
|
|
|
+
|
|
|
+
|
|
|
+ if (Objects.equals(bomSpecBo.getClassifyParentId(), 1L)) {
|
|
|
+ outBomVo.setWarehouseId(WarehouseConstant.SEMI_FINISHED_PRODUCT);
|
|
|
+ outBomVo.setWarehouseName("半成品仓");
|
|
|
+ }
|
|
|
+
|
|
|
+ else {
|
|
|
+ outBomVo.setWarehouseId(WarehouseConstant.PACKAGING_MATERIAL);
|
|
|
+ outBomVo.setWarehouseName("包材仓");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return outBomVoList.stream()
|
|
|
+ .sorted(Comparator.comparing(OutBomVo::getWarehouseId, Comparator.reverseOrder()).thenComparing(OutBomVo::getBomSpecCode))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
* 删除订单以及订单关联数据
|
|
|
*/
|