|
@@ -56,6 +56,9 @@ import com.sd.business.service.production.ProductionWorkOrderService;
|
|
|
import com.sd.framework.util.Assert;
|
|
|
import com.sd.framework.util.sql.Sql;
|
|
|
import com.sd.framework.util.sql.Where;
|
|
|
+import com.sd.mq.config.ArtworkConfig;
|
|
|
+import com.sd.mq.entity.TempArtworkMessage;
|
|
|
+import com.sd.mq.util.RabbitMqUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -122,6 +125,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
Where<OrderInfoVo> sql = Sql.create(OrderInfoVo.class)
|
|
|
.selectAll(OrderInfo.class)
|
|
|
.selectAs(Department::getName, OrderInfoVo::getDepartmentName)
|
|
|
+
|
|
|
.from(OrderInfo.class)
|
|
|
.leftJoin(Department.class, OrderInfo::getDepartmentId)
|
|
|
|
|
@@ -238,6 +242,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
return vo;
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
@Override
|
|
|
public void add(OrderInfoDto dto) {
|
|
|
List<OrderSkuDto> orderSkuList = dto.getOrderSkuList();
|
|
@@ -286,7 +291,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
.add(dto.getPackagingMaterialCost())
|
|
|
.add(dto.getManagementFee()));
|
|
|
}
|
|
|
- this.save(dto);
|
|
|
+ save(dto);
|
|
|
|
|
|
// 新增订单产品包材配件
|
|
|
List<OrderSku> tempOrderSkuList = orderSkuList.stream()
|
|
@@ -325,10 +330,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
// 辅料成本暂时没有默认为零
|
|
|
orderSkuProductionCost.setAuxiliaryMaterialCost(BigDecimal.ZERO);
|
|
|
// 产品包材成本
|
|
|
- List<OrderSkuBom> bomList = orderSkuBomMap.get(item.getId());
|
|
|
- if (bomList == null) {
|
|
|
- bomList = new ArrayList<>();
|
|
|
- }
|
|
|
+ List<OrderSkuBom> bomList = orderSkuBomMap.getOrDefault(item.getId(), new ArrayList<>());
|
|
|
BigDecimal productPackagingMaterialCost = bomList.stream()
|
|
|
.map(orderSkuBom -> orderSkuBom.getQuantity()
|
|
|
.multiply(orderSkuBom.getUnitPrice())
|
|
@@ -355,7 +357,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
dto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
|
|
|
// 生成工单
|
|
|
productionWorkOrderService.addByOrderId(dto.getId());
|
|
|
- this.update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
|
|
|
+ update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
|
|
|
}
|
|
|
|
|
|
// 保存订单包装信息
|
|
@@ -377,6 +379,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
ObsFileUtil.saveFile(dto.getFileList(), dto.getId());
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
@Override
|
|
|
public void edit(OrderInfoDto dto) {
|
|
|
// 订单为委外订单时,订单分类为委外订单
|
|
@@ -422,10 +425,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
// 辅料成本暂时没有默认为零
|
|
|
orderSkuProductionCost.setAuxiliaryMaterialCost(BigDecimal.ZERO);
|
|
|
// 产品包材成本
|
|
|
- List<OrderSkuBom> bomList = orderSkuBomMap.get(item.getId());
|
|
|
- if (bomList == null) {
|
|
|
- bomList = new ArrayList<>();
|
|
|
- }
|
|
|
+ List<OrderSkuBom> bomList = orderSkuBomMap.getOrDefault(item.getId(), new ArrayList<>());
|
|
|
BigDecimal productPackagingMaterialCost = bomList.stream()
|
|
|
.map(orderSkuBom -> orderSkuBom.getQuantity()
|
|
|
.multiply(orderSkuBom.getUnitPrice())
|
|
@@ -474,6 +474,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
ObsFileUtil.editFile(dto.getFileList(), dto.getId());
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
@Override
|
|
|
public void delete(Long id) {
|
|
|
removeById(id);
|
|
@@ -551,6 +552,172 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
delete(id);
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
+ @Override
|
|
|
+ public void deleteValidated(Long id) {
|
|
|
+ OrderInfo orderInfo = getById(id);
|
|
|
+
|
|
|
+ if (orderInfo == null) {
|
|
|
+ throw new ServiceException("未找到订单");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Objects.equals(orderInfo.getDelFlag(), StatusConstant.NOT_DELETED)
|
|
|
+ && orderInfo.getStatus() > OrderStatusEnum.STOCK_PREPARATION.getKey()) {
|
|
|
+ throw new ServiceException("订单正在生产中,无法直接删除,需要走审批流程");
|
|
|
+ }
|
|
|
+
|
|
|
+ unLockStorage(orderInfo);
|
|
|
+
|
|
|
+ // 删除订单回滚成品仓库存
|
|
|
+ inventoryFinishedService.removeOrder(id);
|
|
|
+
|
|
|
+ // 删除订单以及订单关联数据
|
|
|
+ delete(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @DSTransactional
|
|
|
+ @Override
|
|
|
+ public void confirmation(OrderInfoDto dto) {
|
|
|
+ OrderInfo order = getById(dto.getId());
|
|
|
+
|
|
|
+ if (ObjectUtil.notEqual(order.getStatus(), OrderStatusEnum.DRAFT.getKey())
|
|
|
+ && ObjectUtil.notEqual(order.getStatus(), OrderStatusEnum.UNDER_REVIEW.getKey())) {
|
|
|
+ throw new ServiceException("订单不在草稿或待确认状态");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 自主订单需要锁定库存
|
|
|
+ List<OrderSkuDto> orderSkuList = dto.getOrderSkuList();
|
|
|
+ if (Objects.equals(dto.getType(), 1)) {
|
|
|
+ // 先判断成品是否能锁定
|
|
|
+ if (inventoryFinishedService.lockNoSourceStorage(orderSkuList)) {
|
|
|
+ dto.setStockType(StatusConstant.YES);
|
|
|
+ } else {
|
|
|
+ lockStorage(orderSkuList);
|
|
|
+ dto.setStockType(StatusConstant.NO);
|
|
|
+ }
|
|
|
+ dto.setLockStorage(StatusConstant.YES);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新订单
|
|
|
+ dto.setStatus(OrderStatusEnum.STOCK_PREPARATION.getKey());
|
|
|
+ // 订单为委外订单时,订单分类为委外订单,订单费用修改
|
|
|
+ if (Objects.equals(dto.getType(), 2)) {
|
|
|
+ dto.setClassify(OrderClassifyEnum.OUTSOURCE_ORDER.getKey());
|
|
|
+ if (!Objects.equals(dto.getSource(), 1)) {
|
|
|
+ dto.setLssueFee(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ dto.setProductTotalAmount(BigDecimal.ZERO);
|
|
|
+ dto.setDeliveryMaterialsFee(BigDecimal.ZERO);
|
|
|
+ dto.setManagementFee(BigDecimal.ZERO);
|
|
|
+ dto.setPackingLabor(dto.getPackingLabor().multiply(new BigDecimal(2)));
|
|
|
+ dto.setTotalAmount(dto.getProductTotalAmount()
|
|
|
+ .add(dto.getCustomProcessingFee())
|
|
|
+ .add(dto.getLssueFee())
|
|
|
+ .add(dto.getDeliveryMaterialsFee())
|
|
|
+ .add(dto.getPackingLabor())
|
|
|
+ .add(dto.getPackagingMaterialCost())
|
|
|
+ .add(dto.getManagementFee()));
|
|
|
+ // 清空订单快递包材
|
|
|
+ dto.setOrderPackageBomList(null);
|
|
|
+ } else if (Objects.equals(dto.getType(), 1)) {
|
|
|
+ // 拥有采购角色的账号创建的自主订单为采购订单
|
|
|
+ Long userId = dto.getCreateUser();
|
|
|
+ Set<String> roleKeys = roleService.selectRolePermissionByUserId(userId);
|
|
|
+ if (!Collections.disjoint(roleKeys, Arrays.asList("sypurchasing", "purchasingOfficer", "bzpurchasing"))) {
|
|
|
+ dto.setClassify(OrderClassifyEnum.PURCHASE_ORDER.getKey());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ updateById(dto);
|
|
|
+
|
|
|
+ // 更新订单产品
|
|
|
+ List<OrderSku> tempOrderSkuList = orderSkuList.stream()
|
|
|
+ .peek(item -> item.setOrderId(dto.getId()))
|
|
|
+ .peek(item -> item.setStockPreparationStatus(StatusConstant.NO))
|
|
|
+ .peek(item -> {
|
|
|
+ // 委外订单修改金额
|
|
|
+ if (ObjectUtil.equals(dto.getType(), 2)) {
|
|
|
+ item.setUnitPrice(BigDecimal.ZERO);
|
|
|
+ item.setLssueFee(BigDecimal.ZERO);
|
|
|
+ item.setDeliveryMaterialsFee(BigDecimal.ZERO);
|
|
|
+ item.setManagementFee(BigDecimal.ZERO);
|
|
|
+ item.setPackingLabor(item.getPackingLabor().multiply(new BigDecimal(2)));
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .map(item -> (OrderSku) item)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ orderSkuService.editLinked(tempOrderSkuList, OrderSku::getOrderId, dto.getId());
|
|
|
+
|
|
|
+ // 更新包材
|
|
|
+ List<OrderSkuBom> orderSkuBomList = orderSkuList.stream()
|
|
|
+ .flatMap(orderSku -> orderSku.getOrderSkuBomList().stream()
|
|
|
+ .peek(orderSkuBom -> orderSkuBom.setOrderId(dto.getId()))
|
|
|
+ .peek(orderSkuBom -> orderSkuBom.setOrderSkuId(orderSku.getId())))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ orderSkuBomService.editLinked(orderSkuBomList, OrderSkuBom::getOrderId, dto.getId());
|
|
|
+
|
|
|
+ // 新增订单产品生产成本
|
|
|
+ Map<Long, List<OrderSkuBom>> orderSkuBomMap = orderSkuBomList.stream().collect(Collectors.groupingBy(OrderSkuBom::getOrderSkuId));
|
|
|
+ List<OrderSkuProductionCost> orderSkuProductionCostList = tempOrderSkuList.stream().map(item -> {
|
|
|
+ OrderSkuProductionCost orderSkuProductionCost = new OrderSkuProductionCost();
|
|
|
+ orderSkuProductionCost.setOrderId(item.getOrderId());
|
|
|
+ orderSkuProductionCost.setOrderSkuId(item.getId());
|
|
|
+ // 材料成本
|
|
|
+ orderSkuProductionCost.setMaterialCost(item.getUnitPrice().multiply(item.getQuantity()));
|
|
|
+ // 辅料成本暂时没有默认为零
|
|
|
+ orderSkuProductionCost.setAuxiliaryMaterialCost(BigDecimal.ZERO);
|
|
|
+ // 产品包材成本
|
|
|
+ List<OrderSkuBom> bomList = orderSkuBomMap.getOrDefault(item.getId(), new ArrayList<>());
|
|
|
+ BigDecimal productPackagingMaterialCost = bomList.stream()
|
|
|
+ .map(orderSkuBom -> orderSkuBom.getQuantity()
|
|
|
+ .multiply(orderSkuBom.getUnitPrice())
|
|
|
+ .multiply(item.getQuantity()))
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ orderSkuProductionCost.setProductPackagingMaterialCost(productPackagingMaterialCost);
|
|
|
+ // 物流包材成本
|
|
|
+ orderSkuProductionCost.setLogisticsPackagingMaterialCost(item.getDeliveryMaterialsFee()
|
|
|
+ .multiply(item.getQuantity()));
|
|
|
+ orderSkuProductionCost.setTotalAmount(
|
|
|
+ orderSkuProductionCost.getMaterialCost()
|
|
|
+ .add(orderSkuProductionCost.getAuxiliaryMaterialCost())
|
|
|
+ .add(orderSkuProductionCost.getProductPackagingMaterialCost())
|
|
|
+ .add(orderSkuProductionCost.getLogisticsPackagingMaterialCost()));
|
|
|
+ return orderSkuProductionCost;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ orderSkuProductionCostService.editLinked(orderSkuProductionCostList, OrderSkuProductionCost::getOrderId, dto.getId());
|
|
|
+
|
|
|
+ // 是委外订单并且没有包材时,修改订单状态为生产中,并生成生产任务和工单
|
|
|
+ if (ObjectUtil.equals(dto.getStatus(), OrderStatusEnum.STOCK_PREPARATION.getKey())
|
|
|
+ && ObjectUtil.equals(dto.getType(), 2)
|
|
|
+ && ObjectUtil.isEmpty(orderSkuBomList)) {
|
|
|
+ dto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
|
|
|
+ // 生成工单
|
|
|
+ productionWorkOrderService.addByOrderId(dto.getId());
|
|
|
+ update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新订单产品包装信息
|
|
|
+ List<OrderPackageBomDto> tempOrderPackageBomList = dto.getOrderPackageBomList();
|
|
|
+ if (tempOrderPackageBomList == null) {
|
|
|
+ tempOrderPackageBomList = new ArrayList<>();
|
|
|
+ }
|
|
|
+ List<OrderPackageBom> orderPackageBomList = tempOrderPackageBomList.stream()
|
|
|
+ .peek(item -> item.setOrderId(dto.getId()))
|
|
|
+ .map(item -> (OrderPackageBom) item)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ orderPackageBomService.editLinked(orderPackageBomList, OrderPackageBom::getOrderId, dto.getId());
|
|
|
+
|
|
|
+ // 更新产品不干胶图稿
|
|
|
+ for (OrderSkuDto item : orderSkuList) {
|
|
|
+ ObsFileUtil.editFile(item.getSelfAdhesiveStickerFile(), item.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新附件
|
|
|
+ ObsFileUtil.editFile(dto.getFileList(), dto.getId());
|
|
|
+
|
|
|
+ // 发送mq下载临时图稿
|
|
|
+ sendMq(dto);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 解锁库存
|
|
|
*/
|
|
@@ -650,4 +817,17 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private void sendMq(OrderInfoDto dto) {
|
|
|
+ List<OrderSkuDto> orderSkuList = dto.getOrderSkuList();
|
|
|
+ for (OrderSkuDto orderSkuDto : orderSkuList) {
|
|
|
+ if (orderSkuDto.getArtworkLibraryId() == null || orderSkuDto.getArtworkLibraryId() == 0L) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ TempArtworkMessage tempArtworkMessage = new TempArtworkMessage();
|
|
|
+ tempArtworkMessage.setImgUrl(orderSkuDto.getBlueprint());
|
|
|
+ tempArtworkMessage.setFileUrl(orderSkuDto.getProductionDocument());
|
|
|
+ RabbitMqUtil.send(ArtworkConfig.DIRECT_EXCHANGE_NAME, ArtworkConfig.TEMP_ARTWORK_QUEUE_NAME, tempArtworkMessage);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|