|
@@ -1,11 +1,27 @@
|
|
|
package com.fjhx.mes.service.produce.impl;
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.mes.entity.produce.dto.ProduceOrderDetailSelectDto;
|
|
|
+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.production.vo.ProductionProcessesVo;
|
|
|
import com.fjhx.mes.mapper.produce.ProduceOrderDetailMapper;
|
|
|
+import com.fjhx.mes.mapper.production.ProductionProcessesMapper;
|
|
|
import com.fjhx.mes.service.produce.ProduceOrderDetailService;
|
|
|
+import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
+import com.ruoyi.common.utils.wrapper.SqlField;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -18,4 +34,69 @@ import org.springframework.stereotype.Service;
|
|
|
@Service
|
|
|
public class ProduceOrderDetailServiceImpl extends ServiceImpl<ProduceOrderDetailMapper, ProduceOrderDetail> implements ProduceOrderDetailService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
+ @Autowired
|
|
|
+ private ProductionProcessesMapper productionProcessesMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<ProduceOrderDetailVo> getPage(ProduceOrderDetailSelectDto dto) {
|
|
|
+ IWrapper<ProduceOrderDetail> wrapper = getWrapper();
|
|
|
+
|
|
|
+ //生产状态
|
|
|
+ wrapper.eq("pod", ProduceOrderDetail::getProduceStatus, dto.getProduceStatus());
|
|
|
+ //交期-时间范围过滤
|
|
|
+ wrapper.ge("po", ProduceOrder::getDeliveryPeriod, dto.getStaDeliveryPeriod());
|
|
|
+ wrapper.le("po", ProduceOrder::getDeliveryPeriod, dto.getEndDeliveryPeriod());
|
|
|
+ //下单时间(创建时间)-时间范围过滤
|
|
|
+ wrapper.ge("po", ProduceOrder::getCreateTime, dto.getBeginTime());
|
|
|
+ wrapper.le("po", ProduceOrder::getCreateTime, dto.getEndTime());
|
|
|
+ //关键字
|
|
|
+ wrapper.keyword(dto.getKeyword(), new SqlField("po", ProduceOrder::getCode));
|
|
|
+
|
|
|
+ wrapper.orderByDesc("po", ProduceOrder::getCreateTime);
|
|
|
+ wrapper.orderByDesc("pod", ProduceOrderDetail::getId);
|
|
|
+
|
|
|
+ Page<ProduceOrderDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
+ List<ProduceOrderDetailVo> records = page.getRecords();
|
|
|
+ if (ObjectUtil.isEmpty(records)) {
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ //赋值产品信息
|
|
|
+ productInfoService.attributeAssign(records, 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());
|
|
|
+ });
|
|
|
+
|
|
|
+ //赋值生产用时
|
|
|
+ for (ProduceOrderDetailVo record : records) {
|
|
|
+ record.setUsageTime(0L);
|
|
|
+ Date produceTime = record.getProduceTime();
|
|
|
+ Date finishTime = record.getFinishTime();
|
|
|
+ if (ObjectUtil.isNotEmpty(produceTime) && ObjectUtil.isNotEmpty(finishTime)) {
|
|
|
+ long usageTime = finishTime.getTime() - produceTime.getTime();
|
|
|
+ record.setUsageTime(usageTime / 1000 / 60 / 60);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //赋值工序列表
|
|
|
+ List<Long> pIds = records.stream().map(ProduceOrderDetail::getProductId).collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isNotEmpty(pIds)) {
|
|
|
+ List<ProductionProcessesVo> processes = productionProcessesMapper.getProcessesByProductId(IWrapper.getWrapper().in("pi.id", pIds));
|
|
|
+ Map<Long, List<ProductionProcessesVo>> processesMap = processes.stream().collect(Collectors.groupingBy(ProductionProcessesVo::getProductId));
|
|
|
+ for (ProduceOrderDetailVo record : records) {
|
|
|
+ List<ProductionProcessesVo> productionProcessesVo = processesMap.get(record.getProductId());
|
|
|
+ record.setProductionProcessesList(productionProcessesVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
}
|