|
@@ -0,0 +1,130 @@
|
|
|
+package com.fjhx.mes.service.produce.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.common.utils.Assert;
|
|
|
+import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.mes.entity.produce.dto.ProduceOrderDto;
|
|
|
+import com.fjhx.mes.entity.produce.dto.ProduceOrderSelectDto;
|
|
|
+import com.fjhx.mes.entity.produce.po.ProduceOrder;
|
|
|
+import com.fjhx.mes.entity.produce.po.ProduceOrderDetail;
|
|
|
+import com.fjhx.mes.entity.produce.vo.ProduceOrderDetailVo;
|
|
|
+import com.fjhx.mes.entity.produce.vo.ProduceOrderVo;
|
|
|
+import com.fjhx.mes.mapper.produce.ProduceOrderMapper;
|
|
|
+import com.fjhx.mes.service.produce.ProduceOrderDetailService;
|
|
|
+import com.fjhx.mes.service.produce.ProduceOrderService;
|
|
|
+import com.fjhx.sale.entity.contract.po.Contract;
|
|
|
+import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
|
+import com.fjhx.sale.service.contract.ContractProductService;
|
|
|
+import com.fjhx.sale.service.contract.ContractService;
|
|
|
+import com.ruoyi.common.core.domain.entity.SysDept;
|
|
|
+import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
+import com.ruoyi.system.service.ISysDeptService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * <p>
|
|
|
+ * 生产订单 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @since 2024-01-10
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, ProduceOrder> implements ProduceOrderService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ContractService contractService;
|
|
|
+ @Autowired
|
|
|
+ private ContractProductService contractProductService;
|
|
|
+ @Autowired
|
|
|
+ private ProduceOrderDetailService produceOrderDetailService;
|
|
|
+ @Autowired
|
|
|
+ private ISysDeptService sysDeptService;
|
|
|
+ @Autowired
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<ProduceOrderVo> getPage(ProduceOrderSelectDto dto) {
|
|
|
+ IWrapper<ProduceOrder> wrapper = getWrapper();
|
|
|
+ wrapper.orderByDesc("po", ProduceOrder::getId);
|
|
|
+ Page<ProduceOrderVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
+ List<ProduceOrderVo> records = page.getRecords();
|
|
|
+ if (ObjectUtil.isEmpty(records)) {
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Long> produceOrderIds = records.stream().map(ProduceOrder::getId).collect(Collectors.toList());
|
|
|
+ List<ProduceOrderDetail> produceOrderDetailList = produceOrderDetailService.list(q ->
|
|
|
+ q.eq(ProduceOrderDetail::getProduceOrderId, produceOrderIds));
|
|
|
+ List<ProduceOrderDetailVo> produceOrderDetailVos = BeanUtil.copyToList(produceOrderDetailList, ProduceOrderDetailVo.class);
|
|
|
+
|
|
|
+ productInfoService.attributeAssign(produceOrderDetailVos, ProduceOrderDetail::getProductId, (item, product) -> {
|
|
|
+ item.setProductCode(product.getCustomCode());
|
|
|
+ item.setProductName(product.getName());
|
|
|
+ item.setProductUnit(product.getUnit());
|
|
|
+ item.setProductSpec(product.getSpec());
|
|
|
+ item.setProductLength(product.getLength());
|
|
|
+ item.setProductWidth(product.getWidth());
|
|
|
+ item.setProductHeight(product.getHeight());
|
|
|
+ });
|
|
|
+
|
|
|
+ Map<Long, List<ProduceOrderDetailVo>> produceOrderDetailMap = produceOrderDetailVos.stream()
|
|
|
+ .collect(Collectors.groupingBy(ProduceOrderDetail::getProduceOrderId));
|
|
|
+ for (ProduceOrderVo record : records) {
|
|
|
+ record.setProduceOrderDetailList(produceOrderDetailMap.get(record.getId()));
|
|
|
+ }
|
|
|
+
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @DSTransactional
|
|
|
+ public void createOrder(ProduceOrderDto produceOrderDto) {
|
|
|
+ Long contractId = produceOrderDto.getContractId();
|
|
|
+ Assert.notEmpty(produceOrderDto.getContractId(), "合同id不能为空!");
|
|
|
+
|
|
|
+
|
|
|
+ SysDept produceCompany = sysDeptService.getById(produceOrderDto.getProduceCompanyId());
|
|
|
+ Assert.notEmpty(produceCompany, "查询不到生产公司信息");
|
|
|
+ String tenantId = produceCompany.getTenantId();
|
|
|
+ produceOrderDto.setTenantId(tenantId);
|
|
|
+
|
|
|
+
|
|
|
+ Contract contract = contractService.getById(contractId);
|
|
|
+ Assert.notEmpty(contract, "查询不到合同信息!");
|
|
|
+ contractService.update(q -> q.eq(Contract::getId, contractId).set(Contract::getOrderDistributeStatus, 1));
|
|
|
+
|
|
|
+ produceOrderDto.setCode(contract.getCode());
|
|
|
+ produceOrderDto.setProduceStatus(0);
|
|
|
+ this.save(produceOrderDto);
|
|
|
+
|
|
|
+
|
|
|
+ List<ProduceOrderDetail> produceOrderDetailList = new ArrayList<>();
|
|
|
+ List<ContractProduct> contractProductList = contractProductService.list(q -> q.eq(ContractProduct::getContractId, contractId));
|
|
|
+ for (ContractProduct contractProduct : contractProductList) {
|
|
|
+ ProduceOrderDetail produceOrderDetail = new ProduceOrderDetail();
|
|
|
+ produceOrderDetail.setProduceOrderId(produceOrderDto.getId());
|
|
|
+ produceOrderDetail.setContractId(contractId);
|
|
|
+ produceOrderDetail.setContractDetailId(contractProduct.getId());
|
|
|
+ produceOrderDetail.setProductId(contractProduct.getProductId());
|
|
|
+ produceOrderDetail.setQuantity(contractProduct.getQuantity());
|
|
|
+ produceOrderDetail.setFinishQuantity(BigDecimal.ZERO);
|
|
|
+ produceOrderDetail.setProduceStatus(0);
|
|
|
+ produceOrderDetail.setTenantId(tenantId);
|
|
|
+ produceOrderDetailList.add(produceOrderDetail);
|
|
|
+ }
|
|
|
+ produceOrderDetailService.saveBatch(produceOrderDetailList);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|